Shell-2-命令之樂
1.cat
(1)基本用法
[[email protected] tmp]# cat 1.txt 2.txt this is a test1 this is a test 2
(2)cat -s file(刪除額外空白行)
[[email protected] tmp]# cat 3.txt a b c d [[email protected] tmp]# cat -s 3.txt a b c d
(3)cat -n lines.txt (顯示行號)
[[email protected]tmp]# cat -s -n 3.txt 1 a 2 3 b 4 5 c 6 7 d
2.錄制並回放終端回話(script/scriptreplay)
(1)[[email protected] tmp]# script -t 2>timing.log -a output.session(錄制) Script started, file is output.session (2)[[email protected] tmp]# scriptreplay timing.log output.session (回放)
3.文件查找與文件列表(find)
(1)find base_path(順著目錄,向下查找)
[[email protected] tmp]# find /tmp/ /tmp/ /tmp/.ICE-unix /tmp/output.session /tmp/Aegis-<Guid(5A2C30A2-A87D-490A-9281-6765EDAD7CBA)> /tmp/1.txt /tmp/2.txt /tmp/3.txt /tmp/test.txt
(2)find . -iname "*.txt" -print(忽略要查找內容大小寫)
[[email protected] tmp]# find. \( -name "*.txt" -o -name "*.log" \) ./1.txt ./2.txt ./3.txt ./test.txt
(3)find / -path "*/cairui/*"
[[email protected] tmp]# find / -path "*/cairui/*" /home/cairui/tools /home/cairui/tools/nginx-1.12.0.tar.gz /home/cairui/tools/mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz /home/cairui/tools/nginx-1.12.0 /home/cairui/tools/nginx-1.12.0/Makefile /home/cairui/tools/nginx-1.12.0/man /home/cairui/tools/nginx-1.12.0/man/nginx.8
(4)否定參數(!)
[[email protected] tmp]# ls 1.txt Aegis-<Guid(5A2C30A2-A87D-490A-9281-6765EDAD7CBA)> test3.txt 2.txt output.session timing.log [[email protected] tmp]# find . ! -name "*.txt"(打印出不是以.txt結尾的文件) . ./.ICE-unix ./timing.log ./output.session ./Aegis-<Guid(5A2C30A2-A87D-490A-9281-6765EDAD7CBA)>
(5)基於目錄深度的搜索(maxdepth)
find . -maxdepth 1 -name “f*” -print [[email protected] tmp]# find / -maxdepth 3 -path "*/cairui/*" /home/cairui/tools /home/cairui/.bash_profile /home/cairui/.bash_logout /home/cairui/.bashrc
(6)根據文件類型搜索
[[email protected] tmp]# find . -type d -print(只列出所有的目錄) . ./.ICE-unix [[email protected] tmp]# find . -type f (只列出文件) ./timing.log ./output.session ./test3.txt ./1.txt ./2.txt
文件類型 |
參數類型 |
普通文件 |
f |
符號鏈接 |
l |
目錄 |
d |
字符設備 |
c |
塊設備 |
b |
套接字 |
s |
FIFO |
p |
(7)根據文件時間進行搜索
訪問時間(-atime):用戶最近一次訪問文件的時間。
修改時間(-mtime):文件內容最後一次被修改的時間。
變化時間(-ctime):文件元數據(例如權限和所有權)最後一次改變的時間。
[[email protected] tmp]# find . -type f -atime -7 (打印出最近7天內訪問過的所有文件) ./timing.log ./output.session ./test3.txt ./1.txt ./2.txt [[email protected] tmp]# find . -type f -atime 7 (正好在7天前那天訪問的文件) [[email protected] tmp]# find . -type f -atime +7 (訪問時間超過7天的所有文件)
上面是按照天計算的,同樣有按分鐘計算的
-amin(訪問時間)
-mmin(修改時間)
-cmin(變化時間)
(8)基於文件大小的搜索
find . -type f -size +2k(大於2K的文件)
find . -type f -size -2k(小於2k的文件)
find . -type f -size 2k(等於2k的文件)
除了k,還有其他的
b---塊(512字節)
c---字節
w---字(2字節)
k---1024字節
M---1024k字節
G---1024M字節
(9)刪除匹配的文件(-delete)
find . type f -name “*.txt” -delete
(10)利用find執行命令或動作(-exec)
find .type f -user root -exec chown slynux {} \;
find . type f -name “*.c” -exec cat {} \;>all_c_files.txt
4.玩轉xargs
擅長將標準輸入數據轉換成命令行參數。
(1)將多行輸入轉換成單行輸出
[[email protected] tmp]# cat ex.txt 123456 789 00 [[email protected] tmp]# cat ex.txt |xargs 123456 789 00
(2)將單行輸入轉換為多行輸出
[[email protected] tmp]# cat ex.txt |xargs -n 2 123456 789 00
(3)
[[email protected] tmp]# cat ex.txt splitXsplitXsplitX [[email protected] tmp]# cat ex.txt |xargs -d X(用自己的分隔符來分割參數) split split split
5.用tr進行轉換
tr [option] test1 test2 (1)[[email protected] tmp]# echo "HELLO WORLD" |tr ‘A-Z‘ ‘a-z’ (2)[[email protected] tmp]# echo 12345|tr ‘0-9‘ ‘9876543210‘(加密) 87654 [[email protected] tmp]# echo 87654|tr ‘9876543210‘ ‘0-9‘(解密) 12345 (3)刪除字符(tr -d) [[email protected] tmp]# echo "hello 122 world 55"|tr -d ‘0-9‘ hello world (4)用tr壓縮字符(tr -s) [[email protected] ~]# echo "cairui is so handsome " | tr -s ‘ ‘ cairui is so handsome [[email protected] tmp]# cat test.txt 1 2 3 4 5 [[email protected] tmp]# cat test.txt | echo $[ $(tr ‘\n‘ ‘+‘ ) 0 ] 15
6.檢驗與核實
(1)
[[email protected] tmp]# md5sum test.txt
a7b1ac3a2b072f71a8e0d463bf4eb822 test.txt
如上所示,md5sum是一個32個字符的十六進制串
將輸出的檢驗和重定向到一個文件,然後用md5文件核實數據的完整性
(2)
[[email protected] tmp]# md5sum -c test_sum.md5
test.txt: 確定(檢驗是否匹配)
7.加密工具與散列
(1)
crypt crypt <input_file >output_file ENTER passphrase
(2)gpg [[email protected] tmp]# gpg -c test.txt(加密,保證在傳輸過程中無法讀取) [[email protected] tmp]# gpg test.txt(解密)
8.排序、唯一與重復
(1) [[email protected] tmp]# sort 1.txt 2.txt > sorted.txt [[email protected] tmp]# cat sorted.txt 123 33444 566 dfzcx dq kdfi [[email protected] tmp]# cat 1.txt 123 33444 566 [[email protected] tmp]# cat 2.txt kdfi dfzcx dq
(2)按照數字順序進行排序
[[email protected] tmp]# sort -n 1.txt 111 123 566 777 33444
(3)按照逆序進行排序
[[email protected] tmp]# sort -r 1.txt 777 566 33444 123 111
(4)按照月份進行排序(依照一月、二月、三月、、、、)
sort -M months.txt
(5)按照兩個已排序過的文件
sort -m sorted1 sorted2
(6)找出已排序文件中不重復的行
sort file.txt file2.txt |uniq
(7)檢查文件是否已經排序過
#!/bin/bash #function:paixu sort -C filename; if [ $? eq 0 ]; then echo sorted; else echo unsorted; fi
9.分割文件和數據
split -b 10k data.file ls data.file xaa xab xac.......
10.根據擴展名切分文件名
#!/bin/bash #function:根據擴展名切分文件名 file_jpg="sample.jpg" name=${file_jpg%.*} (name=${file_jpg#*.}) echo file name is:$name [[email protected] shell]# sh sample.sh file name is:sample
11.批量重命名和移動
#!/bin/bash #用途:重命名.jpg和.png文件 count=1; for img in ‘find . -iname ‘*.png’ -o -iname ‘*.jpg’ -type f -maxdepth 1’ do new=image-$count.${img##*.} echo “renaming $img to $new” mv “$img” “$new” let count++ done
12.交互輸入自動化
#!/bin/bash read -p "enter number:" no; read -p "enter name:" name echo you have entered $no,$name [[email protected] shell]# echo -e "1\nhello\n" | ./interactive.sh you have entered 1,hello
Shell-2-命令之樂