一、快速查找命令行歷史記錄
在日常運維工作中,我們經常需要重複執行某個命令或者查找之前執行過的命令,這時就可以使用history命令來查看命令行歷史記錄。
$ history 1 ls 2 cd /var/log 3 tail -f messages 4 vi /etc/nginx/nginx.conf 5 systemctl restart nginx 6 history
上述命令表示我們執行了6個命令,我們可以使用!加上命令序號來執行某個命令:
$ !4
上述命令表示執行第4個命令,也就是編輯nginx配置文件。同時,我們也可以使用Ctrl+R來快速查找之前執行過的命令。
二、使用重定向來保存命令執行結果
在運維工作中,我們經常需要將命令執行的結果保存下來,例如將日誌輸出到文件,或者將命令行輸出以郵件方式發送等。這時就可以使用重定向來處理。
1、將命令執行結果輸出到文件:
$ ls > list.txt
上述命令表示將當前目錄下的文件列表輸出到list.txt文件中。
2、將日誌輸出到文件:
$ tail -f /var/log/messages > messages.log
上述命令表示將消息日誌輸出到messages.log文件中。
3、將命令行輸出以郵件方式發送:
$ uptime | mail -s "System Load" user@example.com
上述命令表示將系統負載輸出以郵件方式發送給user@example.com。
三、使用通配符來匹配文件名
在Linux系統中,通配符可以用來匹配文件名,讓我們可以快速地查找到符合條件的文件。
1、匹配單個字符:
?表示任意單個字符。
$ ls /var/log/messag?
上述命令表示查找/var/log目錄下的messages、message1、message2等文件。
2、匹配任意多個字符:
*表示任意多個字符(包括0個字符)。
$ ls /var/log/message*
上述命令表示查找/var/log目錄下的message、messages、message1、message2等文件。
3、使用中括號[]匹配指定範圍的字符:
[a-z]表示匹配a到z中的任意一個字符;
[0-9]表示匹配數字0到9中的任意一個字符。
$ ls /var/log/message[1-9]
上述命令表示查找/var/log目錄下的message1、message2、message3等文件,但不包括message文件。
四、使用管道來組合命令
在Linux系統中,我們可以使用管道(|)來將一個命令的標準輸出作為下一個命令的標準輸入,這使得我們可以將多個命令組合在一起,實現更為複雜的操作。
1、結合grep命令來查找指定文本:
$ cat /var/log/messages | grep "error"
上述命令表示查找messages文件中包含error的行。同樣,我們也可以結合其他命令來進行查找和處理。
2、結合awk命令來對文本進行處理:
$ ps -ef | awk '{print $1,$2,$8}'
上述命令表示查看進程信息,並且只輸出進程的用戶、PID和命令名。
3、結合sort命令來排序:
$ ls -l /var/log/ | sort -k 5
上述命令表示查看/var/log目錄下的文件,按文件大小進行排序。
五、使用cron定時執行任務
cron是Linux系統中的一個定時任務工具,可以幫助我們定期執行一些任務,例如備份數據、清理日誌等。
1、編輯cron定時任務:
$ crontab -e
上述命令表示編輯當前用戶的cron定時任務,編輯完成後保存退出即可。
2、cron定時任務格式說明:
* * * * * command
其中,星號*表示任意時間,分別對應分鐘、小時、日、月、星期幾,command表示要執行的命令。
3、添加cron定時任務:
# 清理30天前的日誌文件 0 0 * * * find /var/log -name "*.log" -mtime +30 | xargs rm -f
上述命令表示每天0點定時執行,清理30天前的日誌文件。
# 每周六備份數據庫 0 0 * * 6 mysqldump -u root -p123456 -h localhost testdb > /backup/testdb_$(date +%Y%m%d).sql
上述命令表示每周六0點定時執行,備份testdb數據庫。
六、使用變量來簡化命令
在Linux系統中,我們經常需要執行一些重複的、繁瑣的命令,例如某個目錄下的文件名列表、某個命令的輸出等,這時我們可以使用變量來簡化命令。
1、定義變量:
$ DIR=/var/log/
上述命令表示定義變量DIR為/var/log/。
2、查看變量的值:
$ echo $DIR
上述命令表示輸出變量DIR的值。
3、發送郵件時使用變量:
$ uptime | mail -s "System Load" $USER
上述命令表示將系統負載以郵件方式發送給當前用戶。
七、使用函數來複用代碼
在Linux系統中,我們可以使用函數來複用代碼,避免重複編寫相同的代碼。
1、定義函數:
$ hello() { echo "Hello, $1!" }
上述命令表示定義函數hello,接收一個參數,並輸出“Hello, 參數值!”。
2、調用函數:
$ hello world
上述命令表示調用函數hello,參數為world,輸出“Hello, world!”。
3、函數可以在shell腳本中復用:
#!/bin/bash hello() { echo "Hello, $1!" } hello world
上述命令表示定義一個shell腳本,在其中調用函數hello並傳遞參數world。
八、使用條件語句和循環語句來控制流程
在Linux系統中,我們可以使用條件語句和循環語句來控制程序流程,實現更複雜的操作。
1、if語句:
#!/bin/bash if [ $1 -gt 10 ] then echo "$1 is greater than 10" else echo "$1 is less than or equal to 10" fi
上述命令表示定義一個shell腳本,在其中使用if語句判斷參數是否大於10,並輸出結果。
2、for循環:
#!/bin/bash for i in {1..5} do echo "Count: $i" done
上述命令表示定義一個shell腳本,在其中使用for循環輸出數字1到5。
3、while循環:
#!/bin/bash i=1 while [ $i -le 5 ] do echo "Count: $i" i=$((i+1)) done
上述命令表示定義一個shell腳本,在其中使用while循環輸出數字1到5。
九、總結
本文介紹了Linux運維必須掌握的Shell-o技巧,包括快速查找命令行歷史記錄、使用重定向來保存命令執行結果、使用通配符來匹配文件名、使用管道來組合命令、使用cron定時執行任務、使用變量來簡化命令、使用函數來複用代碼以及使用條件語句和循環語句來控制流程。這些技巧都是運維工程師必備的工具,能夠幫助我們更快、更高效地完成工作。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/241022.html