tr
tr可以对来自标准输入的内容进行字符替换,字符删除,重复字符压缩。tr只能通过stdin接受输入,调用格式为tr [options] set1 set2
tr将输入中的字符由大写转换成小写,以及字符映射
FIGHTING...echo "hello world" | tr 'a-z' 'A-Z'
HELLO WORLD
FIGHTING...echo "hello 123456 | tr '0-9' '9876543210'
876543
tr删除字符
FIGHTING...echo "hello 123 world " | tr -d '0-9'
hello world
字符组补集
FIGHTING...echo "hello 1 word 2 next 3" | tr -d -c '0-9 \n'
1 2 3
FIGHTING...echo "hello 1 word 2 next 3" | tr -c '0-9' ' '
1 2 3
字符压缩
FIGHTING...echo "hello world my tttt" |tr -s ' '
hello world my tttt
校验和与核实
校验和程序用来从文件中生成相对较小的唯一密钥,我们可以通过重新计算该密钥,来减产文件是否在发生改变
可以使用md5sum filename , md5sum是一个长度为32个字符的十六进制串,我们可以将其重定向到一个文件,然后再用来核实文件是否发生变化。当然也可以用于目录中。
FIGHTING...md5sum md5sum LOG.TXT > logmd5sum.md5
FIGHTING...md5sum -c logmd5sum.md5
LOG.TXT: OK
FIGHTING...
行排序
sort命令能够对文本文件和stdin进行排序,可以配合其他命令来生成所需要的输出。uniq经常与sort一同使用,提取不重复的行。
FIGHTING...sort test.txt test2.txt > test3.txt
FIGHTING...cat test3.txt
123
123
456
456
789
999
hello world
-name : liudong
toady is a fine day.
按照是数字排序(-n) 逆序排列 -r 按照月份排列 -M,合并已经排序过的文件 -m,
FIGHTING...sort -n test2.txt
123
123
456
456
789
999
找出已经排序文件中不重复的行:
FIGHTING...cat test2.txt
123
456
789
123
456
999
FIGHTING...sort test2.txt |uniq
123
456
789
999
FIGHTING...
按照列或者键来排序,-k指定排序所依据的字符,注意:按数字顺序排序和按字母表顺序排序所处理的方式不同,如果要采用按数字顺序排序,就应该明确给出-n选项。
FIGHTING...sort -nrk 1 test2.txt
999
789
456
456
123
123
uniq
uniq从给定输入中找出唯一的行,只能用作排序的数据,因此uniq通常与sort命令结合。
FIGHTING...sort test2.txt | uniq
123
456
789
999
FIGHTING...
分割文件和数据
split命名可以用来分割文件,命令接受文件名作为参数,然后创建一系列体积更小的文件,分割的内容依据字母顺序一次排序。
分割单位有K(KB),M(MB),G(GB),C(byte),W(word).新文件以xab,xac,xad...命令split默认使用字母后缀,如果想使用数字,可以使用-d
FIGHTING...split -b 10k output.session
FIGHTING...ls
3 xci xfe xia xkw xns xqo xtk xwg xzaac xzacy xzafu
helloworld.sh xcj xff xib xkx xnt xqp xtl xwh xzaad xzacz xzafv
iff.sh xck xfg xic xky xnu xqq xtm xwi xzaae xzada xzafw
ifs.sh xcl xfh xid xkz xnv xqr xtn xwj xzaaf xzadb xzafx
logmd5sum.md5 xcm xfi xie xla xnw xqs xto xwk xzaag xzadc xzafy
LOG.TXT xcn xfj xif xlb xnx xqt xtp xwl xzaah xzadd xzafz
output.session xco xfk xig xlc xny xqu xtq xwm xzaai xzade xzaga
std.sh xcp xfl xih xld xnz xqv xtr xwn xzaaj xzadf xzagb
test2.txt xcq xfm xii xle xoa xqw xts xwo xzaak xzadg xzagc
test3.txt xcr xfn xij xlf xob xqx xtt xwp xzaal xzadh xzagd
test.txt xcs xfo xik xlg xoc xqy xtu xwq xzaam xzadi xzage
TEST.TXT xct xfp xil xlh xod xqz xtv xwr xzaan xzadj xzagf
timing.log xcu xfq xim xli xoe xra xtw xws xzaao xzadk xzagg
typescript xcv xfr xin xlj xof xrb xtx xwt xzaap xzadl xzagh
xaa xcw xfs xio xlk xog xrc xty xwu xzaaq xzadm xzagi
xab xcx xft xip xll xoh xrd xtz xwv xzaar xzadn xzagj
xac xcy xfu xiq xlm xoi xre xua xww xzaas xzado xzagk
xad xcz xfv xir xln xoj xrf xub xwx xzaat xzadp xzagl
xae xda xfw xis xlo xok xrg xuc xwy xzaau xzadq xzagm
按照行分割,使用 -l number filename
dd
创建特定大小的文件,dd会克隆给定的输入内容,然后将一模一样的一份副本写入到输出。stdin,设备文件,普通文件都可作为输入,stdout,设备文件,普通文件也可作为输出。
创建一个内容全部为零的1MB大小的文件test.data./dev/zero是一个特殊的字符设备,它会返回0值字节。
FIGHTING...dd if=/dev/zero of=test.txt bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.0024947 s, 420 MB/s
comm
comm命令可以比较两个已经排序的文件,它可以显示出第一个文件和第二个文件所独有的行以及这两个文件所共有的行。
不带任何参数的comm,结果输出的第一列包含只在file1文件中出现,第二列包含只在file2文件中出现,第三列是包含file1,file2共有的行。
FIGHTING...comm test.txt test2.txt
123
345
666
dong
haha
hahha
liu
sdf
FIGHTING...
删除前两列,只打印第三列,-1选项可以删除第一列,-2选项可以删除第二列,最后留下第三列。同理删除第三列就可以打印两个互不相同的那些行。
FIGHTING...comm test.txt test2.txt -1 -2
123
666
FIGHTING...
chmod
chmod用于设置文件的权限。文件的权限有R,W,X对应的数字为4,2,1。同时一个文件有三个角色权限,一个是用户(u),即文件所属者,另一个是用户组(g),用于方便管理同一组用户,剩下一个是其他(o),即不是用户,也和用户不在一个组的其他角色。使用ls命令可以查看文件的所属者,以及用户组,其他角色的相应的权限。
FIGHTING...ls -al test.txt
-rw-rw-r--. 1 ld ld 21 Dec 10 06:29 test.txt
改变用户的权限(注意,即使给文件加了执行(x)权限,但是如果其内容不是可执行,也不会产生什么效果),增加权限使用+,减少权限使用-,同时可以数字来进行权限的赋值,通过3位数字来赋值,例如764,每一位表示不同的角色,第一位表示用户,第二位表示用户组,第三位表示其他,同时每位数字表示的是权限的总和,例如第一位改为读写权限,即W+R = 4+2 = 6,即用数字6即可。
FIGHTING...ll
total 8
-rw-rw-r--. 1 ld ld 23 Dec 10 06:29 test2.txt
-rw-rw-r--. 1 ld ld 21 Dec 10 06:29 test.txt
FIGHTING...chmod u+x test.txt
FIGHTING...ll
total 8
-rw-rw-r--. 1 ld ld 23 Dec 10 06:29 test2.txt
-rwxrw-r--. 1 ld ld 21 Dec 10 06:29 test.txt
-rwxrw-r--. 1 ld ld 21 Dec 10 06:29 test.txt
FIGHTING..../test.txt
./test.txt: line 1: 123: command not found
./test.txt: line 2: 345: command not found
./test.txt: line 3: 666: command not found
./test.txt: line 4: haha: command not found
./test.txt: line 5: sdf: command not found
chown
改变用户所属组:chown user:group filename
-rwxrw-r--. 1 ld ld 21 Dec 10 06:29 test.txt
FIGHTING...chown ld:mysql test.txt
FIGHTING...ll
total 8
-rw-rw-r--. 1 ld ld 23 Dec 10 06:29 test2.txt
-rwxrw-r--. 1 ld mysql 21 Dec 10 06:29 test.txt
chattr
将文件设置为不可修改
FIGHTING...sudo chattr +i test.txt
FIGHTING...ll
total 8
-rw-rw-r--. 1 ld ld 23 Dec 10 06:29 test2.txt
-rwxrw-r--. 1 ld mysql 21 Dec 10 06:29 test.txt
FIGHTING...rm -rf test.txt
rm: cannot remove ‘test.txt’: Operation not permitted
内容参考《Linux Shell脚本攻略》