Sunday, January 30, 2011

【总结】笔/面试中常考到的一些linux脚本/管理命令

From:  http://hi.baidu.com/zengjianyuan/blog/item/426209f41f027ce57709d71e.html


awk #对字段的处理是sed,grep不能实现的。
awk -F , 'NR==1,NR==2 {print $1 $2}' file, 打印第一行到第二行中,以‘,’为分隔符,每行第一,二个字段的值。
print可以改为printf,不过后者不输出换行符。NR:已经读出的记录数,NF:当前记录中的字段个数。
awk '/main/' file or awk '/sun/{print}' filename #显示文件中包含main的行。ps -ef | grep "httpd" | awk '{print $2}'#找出某个进程,然后显示其进程ID。
sed #替换s,删除d,插入i(a),修改c,截取显示: sed -n '2,6p' file
#echo "a b c a" | sed 's/a/d/g' ,注意有没有g的差别。
#sed -n '2,3p' file,只显示第2,3行,去掉-n试试,sed 默认将来自源文件的每一行显示到屏幕上。-n就是用来覆盖这个操作的。
#sed '/main/ d' file #从文件中删除包含main的行。sed '1,3 d' file,删除前三行。
#sed '1i shit' file, sed '1a shit' file,前者是插入在第i行,后者是在第i行后插入。
#sed -i "s/name/zjy/g" `grep name -rl input` #将input目录下的所有文件中的name都换成zjy。
#http://hi.baidu.com/leowang715/blog/item/3c66f04fabc45dc1d0c86a31.html
tr #删除空行:tr -s ["\n"] < file,小写转大写:tr ["a-z"] ["A-Z"] < file,删除字符‘a’:tr -d ["a"] < file
grep #grep -r "shit" ./      当前目录下递归查找"shit"
sort #sort -t: +1 -2 b (-r倒序输出) (-u输出唯一行),-t: 表示用:作为分隔符,+1,-2:指定字段作为key,从0开始.
find
#find path -name filename;
# find path -type x;
-type x 查找类型为 x 的文件,x 为下列字符之一:
b 块设备文件
c 字符设备文件
d 目录文件
p 命名管道(FIFO)
f 普通文件
l 符号链接文件(symbolic links)
s socket文件
-xtype x 与 -type 基本相同,但只查找符号链接文件。
# find ./code -type f -exec ls -il {} \;
#exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{ },一个空格和一个\,最后是一个分号。
#在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现 溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。
find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取 的一部分文件,然后是下一批,并如此继续下去。
#find ./code -type f -print | xargs file
wc#wc -lcw filename, l:统计行数,c:统计字节数,w:统计字数
uniq #对相邻行操作;-d 仅显示重复行;-u 仅显示不重复的行;因为它只能处理相邻行,所以一般跟sort配合。
cut #从一个文本文件或者文本流提取数据.
cut -f 1-2 -d: filename #编号从1开始
-d: 以:作为分隔符,默认是tab.
-b ,-c ,-f:字节byte,字符character,字段filed.
1-2,表示范围.N:只有第N项;N-:从第N项一直到行尾;N-M:第N项到第M项(包括M);-M:从第一项到第M项;-:所有项;
cat/tac #cat与tac显示顺序相反
tee #cmd1 | tee file1...N | cmd2, 命令1的输出送给tee,tee 的输出送给file1...N,并且作为命令2的输入。
tail/head #head -3 file,tail -3 file,显示前三行,后三行
eval#eval cmd[;cmd;cmd],把参数作为命令去执行
expr #expr args,比如,a=`expr $b+1`
let #let express-list, 比如,let "a=b+c"
xargs #将输入输出给xargs后面的命令,作为那个命令的参数。
正则表达式
colrm #命令从文件中除去选定的列。colrm [开始行数编号<结束行数编号>]。colrm 2 5 < filename
rev #把字符串反序。
[sword@localhost ~]$ temp=/home/sword
[sword@localhost ~]$ basename $temp
sword
[sword@localhost ~]$ dirname $temp
/home
[sword@localhost ~]$ basename /home/sword.c .c
sword
ls
join
du#(disk   usage):显示目录或文件的大小。
mail # mail -s "标题" filwsyl@gmail.com < 文件名。
tar/gzip #归档和压缩。我一度认为它俩是一个意思。
#tar cvf ***.tar 等待打包的文件。 tar xvf ***.tar,恢复文件。c(create) 产生归档文件,x恢复归档文件。
tar xvzf ***.tgz -C /tmp;解压缩到/tmp这个文件夹下面。
date
useradd/userdel/usermod
groupadd/groupdel
echo
sleep
crontab/crond

fg %n     #使n号作业成为前台作业。 apue p.223
bg
stty tostop #禁止后台作业输出到控制终端 apue p224
file #判断一个文件是二进制文件,c/c++文件,普通文件等。
lpr,lpq,lprm #印机文件
whereis #查询系统上是否存在特定的一个命令,如果有相应的帮助文档,也会相应地输出。
which #如果系统中一个命令有多个版本,它告诉你当输入某个命令执行时,shell到底调用了哪个版本的命令。
history/fc#显示或操作历史命令列表。
变量声明:
declare/typeset #声明,初始化变量,设置变量属性,查询相关变量。
local -a array_name #local命令只能在函数中声明变量。
readonly -a array_name #带-a选项的readonly命令用来声明只读数组变量。
declare -a array_name
[sword@localhost ~]$ moves=("shit" "fuck" [20]="mother fucking")
[sword@localhost ~]$ echo ${moves[0]}
shit
[sword@localhost ~]$ echo ${moves[1]}
fuck
[sword@localhost ~]$ echo ${moves[2]}
[sword@localhost ~]$ echo ${moves[20]}
mother fucking
ln #ln -s pathOfSourceFile pathOfObjectFile
ps#显示进程的状态,ps -aux | grep "XXX"
kill #kill -l 返回所有信号的号码以及对应的名字。
pstree #用图的形式显示当前系统中执行进程的进程树,勾勒出进程间的父子关系。
ifconfig #修改网卡地址 service network restart
hostname #显示主机名
whoami #我是哪个账户?
uname #显示系统信息,uname -r 显示内核版本
source #使得刚修改过的系统配置文件生效
read    #从标准输入设备读入
shift #shit [N],把命令行参数向左移动N个位置,默认移动一个位置。
set # set $(date),$1~$9被设置为输出。
here文件 #bash的here文件特性可以将脚本中命令的标准输入重定向到脚本中的数据,这个特性主要用来显示菜单。
trap #trap ['命令列表'] [信号列表],bash 中断处理的命令。
exec #1.执行命令or程序取代当前进程。2.打开or关闭文件描述符,与重定向符号一起使用时,允许读写文件。
bash -xv debug_file #脚本调试
top #实时显示正在运行的进程

No comments:

Post a Comment