Shell常用命令與工具(一)

本章內容如下:

wKiom1jBA4ST3cJkAAAslw-XSVo756.png

11.1 ls

功能:列出目錄內容

常用選項:

-a  顯示所有文件,包括隱藏的

-l  長格式列出信息

-i  顯示文件inode號

-t  按修改時間排序

-r  按修改時間倒序排序

示例:

按修改時間排序:
# ls -t
按修改時間倒序排序:
# ls -rt
長格式列出:
# ls -l
查看文件inode:
# ls -i file

11.2 echo

功能:打印一行

常用選項:

-n  不加換行符

-e  解釋轉義符

示例:

解釋換行符:
# echo -e "1\n2\n3"
1
2
3

11.3 printf

功能:格式化打印數據。默認打印字符串不換行。

格式:printf format[arguments]

常用選項:

format:

%.ns  輸出字符串,n是輸出幾個字符

%ni  輸出整數,n是輸出幾個數字

%m.nf 輸出浮點數,m是輸出的整數位數,n是輸出的小數位數

%x   不帶正負號的十六進制值,使用a至f表示10至15

%X   不帶正負號的十六進制,使用A至F表示10至15

%%   輸出單個%

一些常用的空白符:

\n  換行

\r  回車

\t  水平製表符

對齊方式:

%-5s   對參數每個字段左對齊,寬度爲5

%-4.2f  左對齊,寬度爲4,保留兩位小數

不加橫線"-"表示右對齊。

示例:

輸出一個字符:
# printf "%.1s" abc
a
保留一個小數點:
# printf "%.1f" 1.333
1.3
輸出換行:
# printf "%.1f\n" 1.333 
1.3
格式化輸出:
# printf "user: %s\tpass: %d\n" abc 123
user: abc       pass: 1
左對齊寬度10:
# printf "%-10s %-10s %-10s\n" ID Name Number
ID         Name       Number   
右對齊寬度10:
# printf "%10s %10s %10s\n" ID Name Number   
        ID       Name     Number
每段對齊:
# printf "%10s\n" ID Name Number         
        ID
      Name
    Number
# printf "%-10s\n" ID Name Number
ID       
Name     
Number

11.4 cat

功能:連接文件和標準輸出打印

常用選項:

-A  查看所有內容

-b  顯示非空行行號

-n  顯示所有行行號

-T  顯示tab,用^I表示

-E  顯示以$結尾

示例:

連接兩個文件:
# cat a b
# cat << EOF
> 123
> abc
> EOF
123
abc
將eof標準輸入作爲cat標準輸出再寫到a.txt:
# cat > a.txt << eof
> 123
> abc
> eof

11.5 tac

功能:連接文件和倒序打印文件

常用選項:

示例:

倒序打印每一行:

# tac a.txt

11.6 rev

功能:反向打印文件的每一行

常用選項:

示例:

# echo "123" |rev
321

11.7 wc

功能:統計文件行數、字節、字符數

常用選項:

-c  打印文件字節數

-m  打印文件字符數

-l  打印多少行

示例:

統計文件多少行:
# wc -l a.txt

11.8 cp

功能:複製文件或目錄

常用選項:

-a  歸檔

-b  目標文件存在創建備份,備份文件是文件名跟~

-f  強制複製文件或目錄

-r  遞歸複製目錄

-p  保留原有文件或目錄屬性

-i  覆蓋文件之前先詢問用戶

-u  當源文件比目的文件修改時間新時才複製

-v  顯示覆制信息

示例:

複製目錄:
# cp -rf test /opt

11.9 mkdir

功能:創建目錄

常用選項:

-p   遞歸創建目錄

-v  顯示創建過程

示例:

創建多級目錄:
# mkdir /opt/test/abc
創建多個目錄:
# mkdir {install,tmp}
創建連續目錄:
# mkdir {a..c}

 

博客地址:http://lizhenliang.blog.51cto.com

QQ羣:323779636(Shell/Python運維開發羣)

11.10 mv

功能:移動文件或重命名

常用選項:

-b  目標文件存在創建備份,備份文件是文件名跟~

-u  當源文件比目的文件修改時間新時才移動

-v  顯示移動信息

示例:

 

移動文件:
# mv a.txt /opt
重命名文件:
# mv a.txt b.txt

11.11 rename

功能:重命名文件,支持通配符

常用選項:

示例:批量命名文件

將foo1-foo9替換爲foo01-foo09:
# rename foo foo0 foo?
將以.htm後綴的文件替換爲.html:
# rename .htm .html *.htm

11.12 dirname

功能:去除路徑的最後一個名字

常用選項:

示例:

# dirname /usr/bin/  
/usr
# dirname dir1/str
dir1 
dir2
# dirname stdio.h  
.

11.13 basename

功能:打印路徑的最後一個名字

常用選項:

-a  支持多個參數

-s  刪除後面的後綴

示例:

# basename /usr/bin/sort
sort         
# basename include/stdio.h .h     
stdio
# basename -s .h include/stdio.h  
stdio
# basename -a any/str1 any/str2   
str1
str2

11.14 du

功能:估算文件磁盤空間使用

常用選項:

-b  單位bytes顯示

-c  產生一個總大小

-h  易讀格式顯示(K,M,G)

-k  單位KB顯示

-m  單位MB顯示

-s  只顯示總大小

--max-depth=<目錄層數>,超過層數的目錄忽略

--exclude=file 排除文件或目錄

--time  顯示大小和創建時間

示例:

查看目錄大小:
# du -sh /opt
排除目錄某個文件:
# du -sh --exclude=test /opt

11.15 cut

功能:選取文件的每一行數據

常用選項:

-b  選中第幾個字符、

-c  選中多少個字符

-d  指定分隔符,默認是空格

-f  指定顯示選中字段

示例:

打印b字符:
# echo "abc" |cut -b "2"
b
截取abc字符:
# echo "abcdef" |cut -c 1-3
abc
已冒號分隔,顯示第二個字段:
# echo "a:b:c" |cut -d: -f2
b

11.16 tr

功能:替換或刪除字符

格式:Usage:tr [OPTION]... SET1 [SET2]

常用選項:

-c  替換SET1沒有SET2的字符

-d  刪除SET1中字符

-s  壓縮SET1中重複的字符

-t  將SET1用SET2轉換,默認

示例:

替換SET1沒有SET2的字符: 
# echo -n "aaabbbccc" | tr -c c 1
111111ccc
去重字符:
# echo aaacccddd | tr -s '[a-z]'
acd
刪除字符:
# echo aaabbbccc | tr -d bbb
aaaccc
替換字符:
# echo aaabbbccc | tr '[a-z]' '[A-Z]'
AAABBBCCC
刪除換行符:
# echo -e "a\nb\nc" | tr -d '\n'
abc

11.17 stat

功能:顯示文件或文件系統狀態

常用選項:

-Z   顯示selinux安全上下文

-f  顯示文件系統狀態

-c  指定格式輸出內容

-t  以簡潔的形式打印

示例:

顯示文件信息:
# stat file
只顯示文件修改時間:
# stat -c %y file

11.18 seq

功能:打印序列化數字

常用選項:

-f  使用printf樣式格式

-s  指定分隔符,默認換行符\n

-w  等寬,用0填充

示例:

數字序列:
# seq 3
1
2
3
帶0的數字序列:
# seq -w 03
01
02
03
範圍數字序列:
# seq 2 5
2
3
4
5
步長序列:
# seq 1 2 5   # 2是步長
1
3
5
以冒號分隔序列:
# seq -s "+" 5
1+2+3+4+5
等寬並在數字前面加字符串:
# seq -f "str%02g" 3  # %g是默認數字位數,02是數字不足2位時用0填充。
str01
str02
str03

11.19 shuf

功能:生成隨機序列

常用選項:

-i  輸出數字範圍

-o  結果寫入文件

示例:

輸出範圍隨機數:

# seq 5 |shuf 
2
1
5
4
3
# shuf -i 5-10
8
10
7
9
6
5

11.20 sort

功能:排序文本

常用選項:

-f  忽略大小寫

-g  一般數字排序

-M  根據月份比較排序,比如JAN、DEC

-h  易讀的大小單位排序,比如2K、1G

-n  數字比較排序

-r  倒序排序

-k  n,m 根據關鍵字排序,從第n字段開始,m字段結束

-o  將結果寫入文件

-t  指定分隔符

-u  去重重複行

默認是對整列排序。

示例:

隨機數字排序:
# seq 5 |shuf |sort
隨機字母排序:
# printf "%c\n" {a..f} |shuf |sort
倒序排序:
# seq 5 |shuf |sort -r
分隔後的字段排序:
# cat /etc/passwd |sort -t : -k 3 -n
去重重複行:
# echo -e "1\n1\n2\n3\n3" |sort -u
大小單位排序:
# du -h |sort -k 1 -h -r
分隔後第一個字段的第二個字符排序:
# echo -e "fa:1\neb:2\ncc:3" |sort -t : -k 1.2
tab作爲分隔符:
# sort -t $"\t" 
file文件內容:
zhangsan 6 100
lisi 8 80
wangwu 7 90
zhaoliu 9 70
對file文件的第二列正序排序,再次基礎再對第三列倒序排序(多列排序):
# sort -k 2,2 -n -k 3,3 -nr file
zhaoliu 9 70
lisi 8 80
wangwu 7 90
zhangsan 6 100
對兩個文件同時排序:
# sort file1 file2

 

11.21 uniq

功能:去除重複行

常用選項:

-c  打印出現的次數,只能統計相鄰的

-d  只打印重複行

-u   只打印不重複行

-D  只打印重複行,並且把所有重複行打印出來

-f n 忽略第n個字段

-i  忽略大小寫

-s n 忽略前N個字符

-w   比較不超過前N個字符

示例:

測試文本如下:
# cat file 
abc
cde
xyz
cde
xyz
abd
去重複行:
# sort file |uniq 
abc 
abd
cde 
xyz
打印每行重複次數:
# sort file |uniq -c
      1 abc
1 abd        
      2 cde
      2 xyz
打印不重複行:
# sort file |uniq -u
abc
abd
打印重複行:
# sort file |uniq -d
cde
xyz
打印重複行並統計出現次數:
# sort file |uniq -d -c
      2 cde
      2 xyz
根據前幾個字符去重:
# sort file |uniq -w 2
abc 
cde 
xyz

11.22 tee

功能:從標準輸入讀取寫到標準輸出和文件

常用選項:

-a  追加到文件

示例:

打印並追加到文件:
# echo 123 |tee -a a.log

11.23 join

功能:連接兩個文件

常用選項:

-a <1或2> 除顯示原來輸出的內容外,還顯示指定文件中沒有相同的欄位,默認不顯示

-i  忽略大小寫

-o  按照指定文件欄位顯示

-t  使用字符作爲輸入和輸出字段分隔符

-1  連接文件1的指定欄位

-2  連接文件2的指定欄位

示例:

將兩個文件相同字段合併一行,其餘不輸出:
# join file1 file2
打印file1第一個列,第file2第二列:
# join -o 1.1 2.2 file1 file2
同時打印file1沒有的相同字段:
# join -a1 file1 file2

11.24 paste

功能:合併文件

常用選項:

-d  指定分隔符,默認是tab鍵

-s  將文件內容平行,tab鍵分隔

示例:

兩個文件合併,以tab鍵分隔:
# paste a.txt b.txt
兩個文件合併,+號分隔:
# paste a.txt b.txt -s -d "+"
文件內容平行顯示,tab鍵分隔:
# paste -s a.txt

11.25 head

功能:輸出文件的前幾行

常用選項:

-c  打印前多少K、bytes

-n  打印前多少行

示例:

打印文件前50行:
# head -n 50 file

11.26 tail

功能:輸出文件的後幾行

常用選項:

-c  打印前多少K、bytes

-f  實時讀文件,隨着文件輸出附加輸出

-n  輸出最後幾行

--pid  與-f一起使用,表示pid死掉後結束

-s  與-f一起使用,表示休眠多少秒輸出

示例:

打印文件後50行:
# tail -n 50 file 
實時輸出新增行:
# tail –f file

11.27 find

功能:搜索文件目錄層次結構

格式:find path -optionactions

常用選項:

-name  文件名,支持(‘*’, ‘?’, and ‘[]’)

-type  文件類型,d目錄,f常規文件等

-perm  符合權限的文件,比如755

-atime -/+n  在n天以內/過去n天被訪問過

-ctime -/+n  在n天以內/過去n天被修改過

-amin -/+n   在n天以內/過去n分鐘被訪問過

-cmin -/+n   在n天以內/過去n分鐘被修改過

-size -/+n   文件大小小於/大於,b、k、M、G

-maxdepth levels  目錄層次顯示的最大深度

-regex pattern    文件名匹配正則表達式模式

-inum     通過inode編號查找文件

動作:

-detele  刪除文件

-exec command {} \;  執行命令,花括號代表當前文件

-ls      列出當前文件,ls -dils格式

-print    完整的文件名並添加一個回車換行符

-print0  打印完整的文件名並不添加一個回車換行符

-printf format  打印格式

示例:

查找文件名:
# find / -name "*http*"
查找文件名並且文件類型:
# find /tmp -name core -type f -print
查找文件名並且文件類型刪除:
# find /tmp -depth -name core -type f -delete
查找當前目錄常規文件並查看文件類型:
# find . -type f -exec file '{}' \;
查找文件權限是664:
# find . -perm 664
查找大於1024k的文件:
# find . -size -1024k
查找3天內修改的文件:
# find /bin -ctime -3
排除多個類型的文件:
# find . ! -name "*.sql" ! -name "*.txt"
或條件查找多個類型的文件:
# find . -name '*.sh' -o -name '*.bak'
# find . -regex ".*\.sh|.*\.bak"
# find . -regex ".*\.\(sh\|bak\)"
並且條件查找文件:
# find . -name "*.sql" -a  -size +1024k 
只顯示第一級目錄:
# find /etc -type d -maxdepth 1
通過inode編號刪除文件:
# rm `find . -inum 671915`
# find . -inum 8651577 -exec rm -i {} \;

11.28 xargs

功能:從標準輸入執行命令

常用選項:

-a file  從指定文件讀取數據作爲標準輸入

-0  處理包含空格的文件名,print0

-d  delimiter  分隔符,默認是空格分隔顯示

-i  標準輸入的結果以{}代替

-I  標準輸入的結果以指定的名字代替

-t  顯示執行命令

-p  交互式提示是否執行命令

-n  最大命令行參數

--show-limits  查看系統命令行長度限制

示例:

刪除/tmp下名字是core的文件:
# find /tmp -name core -type f -print | xargs /bin/rm -f
# find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f
列轉行(去除換行符 ):
# cut -d: -f1 < /etc/passwd | sort | xargs echo
行轉列:
# echo "1 2 3 4 5" |xargs -n1
最長兩列顯示:
# echo "1 2 3 4 5" |xargs -n2
創建未來十天時間:
# seq 1 10 |xargs -i date -d "{} days " +%Y-%m-%d
複製多個目錄:
# echo dir1 dir2 |xargs -n1 cp a.txt
清空所有日誌:
# find ./ -name "*.log" |xargs -i tee {}   # echo ""> {} 這樣不行,>把命令中斷了
rm在刪除大量的文件時,會提示參數過長,那麼可以使用xargs刪除:
# ls |xargs rm –rf
或分配刪除 rm [a-n]* -rf   # getconf ARG_MAX 獲取系統最大參數限制

11.29 nl

功能:打印文件行號

常用選項:

-b <a|t>       指定行號顯示方式,a表示所有行都打印行號,b表示空行不顯示行號,默認是a

-n <ln|rn|rz>  行號顯示方法,ln左對齊,rn右對齊,rz右邊顯示,左邊空白用0填充。

-w             行號欄位在左邊佔用的寬度

示例:

打印行號,空行不顯示:
# nl a.txt
左對齊打印行號:
# nl -n ln a.txt
行號右移動五個空格: 
# nl -w 5 a.txt

11.30 date

功能:打印或設置系統日期和時間

常用選項:

-d string  顯示時間所描述的字符串

-f datefile  讀取文件的每一行

-I  輸出ISO 8601格式的日期和時間

-r  顯示文件的最後修改時間

-R  輸出RFC 2822格式的日期和時間

-s string  設置時間所描述的字符串

-u  打印或設置UTC時間

控制輸出格式:

%n : 下一行

%t : 跳格

%H : 小時(00..23)

%I : 小時(01..12)

%k : 小時(0..23)

%l : 小時(1..12)

%M : 分鐘(00..59)

%p : 顯示本地 AM 或 PM

%r : 直接顯示時間 (12 小時制,格式爲 hh:mm:ss [AP]M)

%s : 從 1970 年 1 月 1 日 00:00:00 UTC 到目前爲止的秒數

%S : 秒(00..61)

%T : 直接顯示時間 (24 小時制)

%X : 相當於 %H:%M:%S

%Z : 顯示時區 %a : 星期幾 (Sun..Sat)

%A : 星期幾 (Sunday..Saturday)

%b : 月份 (Jan..Dec)

%B : 月份 (January..December)

%c : 直接顯示日期與時間

%d : 日 (01..31)

%D : 直接顯示日期 (mm/dd/yy)

%h : 同 %b

%j : 一年中的第幾天 (001..366)

%m : 月份 (01..12)

%U : 一年中的第幾周 (00..53) (以Sunday爲一週的第一天的情形)

%w : 一週中的第幾天 (0..6)

%W : 一年中的第幾周 (00..53) (以Monday爲一週的第一天的情形)

%x : 直接顯示日期 (mm/dd/yy)

%y : 年份的最後兩位數字 (00.99)

%Y : 完整年份 (0000..9999)

示例:

設置系統日期和時間:
# date -s "2016-12-15 00:00:00"
查看當前系統時間戳:
# date +%s
查看當前系統時間:
# date +'%F %T'
把日期和時間轉換成時間戳:
# date -d "2016-12-15 18:00:00" +%s
把時間戳轉成時間:
# date -d '@1481842800' '+%F %T'
時間加減:
顯示前一分鐘:date -d '-1 minute' +'%F %T'
顯示上一週:date -d '-1 week' +'%F %T'
顯示前一天日期:date +%F -d '+1 day'
顯示後一天日期:date +%F -d '-1 day'
顯示上一個月日期:date +%F -d '+1 month'
顯示下一個月日期:date +%F -d '-1 month'
顯示上一年日期:date +%F -d '+1 year'
顯示下一年日期:date +%F -d '-1 year'
或
顯示前一天日期:date -d yesterday +%F
顯示後一天日期:date -d tomorrow +%F
天爲單位,顯示前一天現在時間:date -d '1 day ago' +'%F %T'
秒爲單位,顯示一小時前現在時間:date -d '3600 second ago' +'%F %T'
時間比較:
NOW_DATE=$(date +'%F %T')
AGO_DATE=$(date -d "2016-12-15 18:00:00" +%s)
[ $NOW_DATE -gt $AGO_DATE ] && echo yes || echo no
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章