linux 花絮

来源:互联网 发布:淘宝店铺可以转让吗 编辑:程序博客网 时间:2024/06/08 07:45
-------------------------------------------------------------------------------
1. 关闭bash 语句的控制台输出, 用重定向即可。
--------------------------------------------------------------------------------
2. linux 环境变量问题
env 查询环境变量。 (env 配合grep 查询特定类变量)
也可以用echo $部分环境变量 加tab 显示相关变量
set 显示本地所有shell变量。
export 导出环境变量,
unset 清除环境变量
--------------------------------------------------------------------------------
问:gcc 的文件包含路径   
答:/usr/include, /usr/local/include  等
--------------------------------------------------------------------------------
问:如何清除dmesg 信息,
答:dmesg -c
--------------------------------------------------------------------------------
问:查看是32 bits or 64 bits
答:uname -a
--------------------------------------------------------------------------------
问:linux 下查看机器cpu是几核的
答:cat /proc/cpuinfo |grep "processor"
--------------------------------------------------------------------------------
问:linux 下查看机器cpu 频率
答:cat /proc/cpuinfo |grep MHz|uniq
--------------------------------------------------------------------------------
问:添加一个ip 地址,
答:示例
ifconfig eth0:1 192.168.1.253 broadcast 192.168.1.255 netmask 255.255.255.0 up
route add -host 192.168.1.253 dev eth0:1
ifconfig eth0:2 192.168.1.252 broadcast 192.168.1.255 netmask 255.255.255.0 up
route add -host 192.168.1.252 dev eth0:2
通过ifconfig, route 配置的IP 会在系统重启时丢失。
可以放在/etc/rc.local 中

linux setup 真是一个非常好的系统配置工具
我从bond状态退到非bond状态,手工编辑一次网络配置怎么也不正确, 而用setup轻松搞定
可能是devicename 加了引号所致。
--------------------------------------------------------------------------------
问:查看活动进程
答: ps -ef

     ps -aux //可以看到进程的状态

用树形显示进程和线程 pstree
------------------------------------------------------------------------------

问: 如何安装内核文件man 文档
答:在linux 内核代码下
1. make mandocs
2. make installmandocs    
// 注意install 和mandocs 之间没有空格,否则变成两个目标install, mandocs了。
安装在/usr/local/man/man9 下,
----------------------------------------
linux PS1 帮助手册在哪?如何查找
----------------------------------------
man 的用法, 你可以用 man man 来查阅
如果不知道所要打开的手册页名称,可以用 “man -k”命令搜索相关的手册页,比如:
man -k bash
会给出一堆 bash 相关的命令, 方面你查看。
man -K  可以打开man 页搜索内容。不过这可能会比较慢, 你最好指定man 页搜索。
例如:
man -K 1 PS1
然后对你感兴趣的页打开来查看。

--------------------------------------------------------------------------------
gcc -O0 引起的错误
/usr/src/linux-2.6.32/drivers/serial/serial_core.c:759: undefined reference to `tty_port_users'
还有许多类似的奇怪的错误, 皆有-O0 引起,
gcc 也有bug, 很可怕!, -O2 能编译过, -O0 不能。 只好修改 Makefile, 使各取所需。 又多了一种处理问题的经验
gdb /usr/src/linux/vmlinux /proc/kcore
warning: unrecognized item "timeout" in "qSupported" response

--------------------------------------------------------------------------------
修改用户名,密码
----------------------------------------
1. 修改密码。
   a. 用root 登陆, passwd <用户名> 可以输入简单密码
   b. 当前用户登陆, passwd , 可以直接修改密码,但简单密码不被接受
2. 修改用户名。
   用 root 登陆。
   usermod -l <newuser> <olduser>
   不过还有手工修改 /etc/passwd, /etc/group, 把旧名都改成新名。
   有必要也对应改变一下用户家目录。
==========================================================================
ANSI 是什么意思
American National Standards Institute(ANSI——美国国家标准学会)

ANSI字符集称为窄字符,8位,C语言用unsigned char表示,不能存放世界上所有语言所有文字。
UNICODE字符集称为宽字符,16位,C语言用unsigned short表示,可以存放世界上所有语言所有文字

并口设备文件名: parport0, 从dmesg 中可以查看
========================================

grep 的或条件
grep -E "abc|xyz"
或者
egrep "abc|xyz"
========================================
find --help 有帮助,常用的还是要用熟。
find 的或条件
错误用法
root@hjj ~/software]# find romfs64 -name "*.c" -o "*.h"
正确用法
root@hjj ~/software]# find romfs64 -name "*.c" -o -name "*.h"

查找大于100M的文件  
find . -type f -size +100M

查找最近一小时修改的文件
find . -name -mmin -60

查找最近2天修改的文件

find . -name 'ifcfg*' -mtime -2

创建一个指定时间戳的文件。

touch -t <timestamp>

删除一切比指定文件旧的文件

find ./* ! -newer ref_file

========================================
tar 只打包某类文件
tar -czvf foo.tar.gz `find ...`
tar 打包目录,不包含莫类文件

tar -czvf foo.tar.gz --exclude=.svn --exclude=*.img

tar 解压到当前目录或指定目录
#tar -xzvf mysql.tar.gz -C /home/aaa

scp -r  /dir/*  DstIP:/mnt/
-p  保留原文件的修改时间,访问时间和访问权限。
    preserve modification time, access time and modes

file 查看文件类型


comm 是一个很好的比较2个文件内容的 命令行工具, 借助于sort, awk 可以进行抽取列比较
sed 返回值只表示命令是否执行,语法是否有错误。不代表是否找到或找不到。 也不代表替换是否找到并完成。
grep 命令返回值可以表示匹配是否找到


========================================

****************************************
linux 清理缓存命令
****************************************
1. 清理前最好先sync 一下,以防丢失数据
sync

2.清理前内存使用情况
free -m

3.开始清理  , 往伪文件中写个数就可以了。
To free pagecache:
echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
echo 3 > /proc/sys/vm/drop_caches

4.清理后内存使用情况
free -m

------------------------------------------------------------
sudo找不到命令:修改sudoers 的secure_path 路径
------------------------------------------------------------
首先,都要打开sudo的配置文件:sudo vim sudoers

看到如下配置:

Defaults    env_reset
Defaults    env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS"
Defaults    env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults    env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults    env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults    env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

我们知道, sudo 重设了环境变量, path 通过 secure_path 也被重设,
如果找不到命令,可以在这里重新设置路径。 例如添加上 /usr/local/bin 目录

---------------------------------------------------------

ls 列表某个目录慢的原因

---------------------------------------------------------

今天发现,ls 列表莫个目录特别的慢。 du 莫个目录也特别慢。决定探个究竟。
[hjj@hjj ~/temp1]$ ls
createfile*  createfile.cpp  Makefile

[hjj@hjj ~/temp1]$ du -a -b
1602    ./createfile.cpp
45  ./Makefile
55724   ./createfile
177094683   .               <--- 这是个问题, 文件不多,但. 目录很大,因而查看慢

一般正常的目录. 只占用4096 字节, 而这个占用169M. 这说明这个目录曾经存储过
大量的文件。(是啊,我创建的,又删除了),虽然删除了,但还是留下了痕迹。
ls 时, . 目录下所以inode 都会被扫描,虽然它们删除了。 因而第一次会很慢。
以后再用ls 速度正常,说明有缓存,第二次没有真正读磁盘。

解决这个问题的办法是。另见一个目录,把有用的文件copy 走, 再删掉旧目录。
[ ~/temp]$ du -a
4   .
[hjj@hjj ~/temp]$ cp ../temp1/* .
[hjj@hjj ~/temp]$ du -a -h
4.0K    ./createfile.cpp
4.0K    ./Makefile
56K ./createfile
68K .


我不知道对于一个全空的文件夹,这个. 目录都装了些什么。有空再研究。

-

----------------------------------------
查看机器资源的一些常用命令, 活用
----------------------------------------
查看机器装了几块硬盘, 硬盘的型号,大小.
在root 用户下运行
#cat /proc/scsi/scsi

dmesg |grep scsi 可以做个验证

lsblk  显示设备名称,大小
blkid   显示设备的ID, 文件系统
fdisk -l |grep disk 可以看设备名称和磁盘大小

查看已用未用空间
df
du
查看网卡千兆还是百兆
lspci
dmesg |grep -i eth0
ethtool <dev>   // 实现,创建一个socket, 向这个socket 发送ioctl 字取返回值

如何查询LINUX启动会开那些服务?
chkconfig --list
service --status-all
/etc/init.d/目录里面去看
查看一下/etc/services里面有端口对照表

w,who,是查看当前在线的用户
last是查看最近用户的登录记录
查看所有用户列表是cat /etc/passwd

机器性能监测。 nmon 是一个很好的图形化性能监视软件

----------------------------------------
创建文件,不仅需要数据空间,也需要inode 空间
----------------------------------------
touch -t 201308050000 <time-file>
编脚本创建旧文件,0大小
当我创建大量的小文件时,终于出现了
touch: cannot touch `time6999999': No space left on device
[hjj@hjj ~/temp1]$ df -h        # 看到磁盘还有空间
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                       50G   22G   26G  46% /
tmpfs                 930M  232K  930M   1% /dev/shm
/dev/sda1             485M  161M  299M  35% /boot
/dev/mapper/VolGroup-lv_home
                       94G   27G   63G  30% /home

[hjj@hjj ~/temp1]$ df -i        # inode 空间已经耗尽
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/mapper/VolGroup-lv_root
                     3276800  400528 2876272   13% /
tmpfs                 237900       7  237893    1% /dev/shm
/dev/sda1             128016      70  127946    1% /boot
/dev/mapper/VolGroup-lv_home
                     6201344 6201344       0  100% /home
linux 文件系统的结构,,
当你在 Linux 中进行 IO 操作的时候,需要的资源除了磁盘空间以外,还要有剩余的 Inode 才行。
缺省情况下, Linux 在系统安装过程中按照1个 Inode 对应 2k 磁盘空间来计算每个分区的最大 Inode 数。
一旦文件系统创建之后,每个分区可用 Inode 数就无法进行动态调整。

正常来说,一般不太会出现某个分区的 Inode 耗尽而磁盘空间尚余的情况,
除非是有太多的小文件(<2k), 例如像我创建的0大小的小文件。
但如果确实需要的话,
可以在创建文件系统(比如用mke2fs)的时候根据实际需要来调整这个参数,多创建一些Inode.

如何复制文件并保持创建日期不变 cp -a 即可


---------------------------------------

提示无法加载libxxxx.so共享库。路径问题的解决办法:
---------------------------------------
1. 在/lib 或 /usr/lib 下建立软链接

2. export LD_LIBRARY_PATH 添加共享库路径

3. 编辑/etc/ld.so.conf 增加共享库路径,执行ldconfig 生效