常用命令 續(xù)
- linux發(fā)行版的工具
- Ubuntu 包管理器 apt
- CentOS包管理器 yum
- OpenSUSE包管理器zypper
- 包管理器使用
# 在線安裝
zypper install sqlite3-devel
# 查詢
zypper packages | grep -iE "tk-devel"
# 下載rpm
zypper download tk-devel=1.13
- rpm軟件包的安裝
# 查詢已安裝
rpm -qa | grep -iE "libxcb-devel"
# 安裝
rpm -ivh xxxx.rpm
# 升級安裝
rpm -Uvh xxxx.rpm
# 卸載
rpm -ev xxx.rpm
-
路徑切換管理
- 兩個目錄間來回切換使用cd -;
- 多個目錄來回切換,pushd入棧;
- pushd dir1;
- pushd dir2;
- pushd +0; 切到棧頂目錄 ;
- pushd +1; 從棧頂依次向下走一步;
- popd 出棧;
-
查看文件差異 diff;
- diff -u version1 version2 > v.patch 查看差異
- patch -p1 version1 < v.patch 修補(bǔ)版本1 ;需要安裝patch包
?
-
定時任務(wù)
- 通過文本編輯cron任務(wù),實現(xiàn)定時操作
- 分 小時 天 月 星期 絕對路徑sh or cmd
- * 表示每個xxx,如每個小時
- 每小時的第三分鐘執(zhí)行cmd-> 03 * * * * /home/lauf/scraw.sh
- 每天的第5、8個小時執(zhí)行-> 00 5,8 * * * cmd
- 周日的每小時執(zhí)行-> 00 */12 * * 0 cmd
- 每天凌晨 -> 00 02 * * * cmd
- 將任務(wù)寫入 task.cron 文件中。
- 執(zhí)行定時任務(wù) crontab task.cron
- 或者 crontab <<EOF; xxxx; EOF
- crontab -e 直接編輯定時任務(wù)
- crontab -l 查看定時任務(wù)
- crontab -r 直接移除所有任務(wù)
- crontab -u 操作某用戶的任務(wù)
- 案例
- 01 * * * * ls -l /home/laufing > log.txt
- 通過文本編輯cron任務(wù),實現(xiàn)定時操作
-
查看信息
- hostname,查看主機(jī)名信息;編輯主機(jī)名vim /etc/hostname
- cat /etc/hosts 查看本地地址映射;
- uname -a,查看內(nèi)核信息
- cat /proc/cpuinfo cpu信息
- cat /proc/meminfo 內(nèi)存
- cat /proc/partitions 分區(qū)
- cat /proc/version 發(fā)行版
- /proc 在內(nèi)存中存儲進(jìn)程信息,每個數(shù)字目錄為一個進(jìn)程;
- which cmd 可執(zhí)行文件的路徑;同whereis,搜索PATH
- whatis cmd 查看功能信息
- who 當(dāng)前登錄的用戶;whoami 當(dāng)前終端用戶;users; last 上次登錄信息; uptime系統(tǒng)已運(yùn)行時間;
?
-
進(jìn)程管理
- ps 查看進(jìn)程信息;
- ps -ef ; every process所有用戶的進(jìn)程 , f 字段格式
- ps -axf; 所有進(jìn)程(所有用戶)
- ps -axu 所有進(jìn)程
- ps -ef --sort ppid 查看所有進(jìn)程,并根據(jù)ppid排序;
- ps -ef -o pcpu -o pmem -o comm -o user; 只輸出指定列
- ps -C xxx ; 根據(jù)進(jìn)程名稱獲取信息
- ps -C mysqld; 獲取mysql 服務(wù)進(jìn)程信息
- ps -C postgres;
- pidof postgres;根據(jù)進(jìn)程名稱,獲取所有的進(jìn)程id;
- pgrep postgres; 根據(jù)進(jìn)程名稱,獲取所有的進(jìn)程id;
- ps -ef | cut -f 2 -d " " | xargs kill -9 獲取進(jìn)程id,并殺掉進(jìn)程;
- pidof postgres | xargs kill -9
- ps -efL ; -L同時輸出線程信息,LWP為線程id
- top 查看進(jìn)程的系統(tǒng)資源占用情況
- top -o %CPU 按CPU降序;
- top -o %MEM 按內(nèi)存降序
- linux進(jìn)程間通信,使用
信號
,kill
向進(jìn)程傳遞信號- kill -l 查看所有的信號
[laufing@centos ~]$ kill -l
- SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR111) SIGSEGV12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+338) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+843) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+1348) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-1253) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-758) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-461) SIGRTMAX-3 62) SIGRTMAX-263) SIGRTMAX-1 64) SIGRTMAX
- kill -s SIGKILL pid; 通過向進(jìn)程傳遞SIGKILL信號 終止進(jìn)程
- kill -9 pid ;強(qiáng)制殺死進(jìn)程
- killall 類似pkill,根據(jù)進(jìn)程名稱殺死進(jìn)程
- Ctrl + C 向進(jìn)程發(fā)送SIGINT信號;
- 案例,編寫一個腳本,使進(jìn)程一直運(yùn)行(事件循環(huán)), 關(guān)聯(lián)處理函數(shù)與SIGINT信號,每次按Ctrl + C 打印輸出。
- kill -l 查看所有的信號
#!/bin/bash
#handle function
handler(){
echo "ctrl + c pressed."
}
#associate
trap "handler" SIGINT
while true;do
echo running... > log.txt
done
- 查看文件內(nèi)容cat、head、tail
- cat a.txt
- cat a.txt b.txt > c.txt 查看并拼接內(nèi)容
- head -n 20 /etc/profile 查看前20行;
- head -n -10 /etc/profile; -10表示后10行之前的內(nèi)容;
- tail -n 10 /etc/profile; 查看后10行
- tail -n +10 /etc/profile; 查看前10行之后的內(nèi)容
- tail -f /etc/profile; 追蹤新寫入的內(nèi)容;
- tail --pid 123 與寫入的進(jìn)程同步;
?
-
wc 統(tǒng)計
- wc -l test.sh ; 統(tǒng)計行數(shù)
- wc -w test.sh;統(tǒng)計單詞數(shù)
- echo my name is jack | wc -w
- wc -c test.sh 統(tǒng)計字符數(shù)
- wc -L test.sh ;最長行的長度
-
tree 目錄樹
- tree -h 查看文件樹,并展示文件大小;
- tree -h -o result.txt;-o 結(jié)果輸出到文件中
- tree -h -P test.sh ;-P 匹配文件
- du -ah 磁盤文件的使用情況;
- du -sh *;
- df -h 磁盤的可用情況;
?
- 正則匹配grep
- grep 正則匹配,默認(rèn)使用通配符模式,返回匹配到的行
- -i 忽略大小寫
- -E 正則匹配模式 ,相當(dāng)于egrep
- -o 返回匹配的內(nèi)容,默認(rèn)返回匹配到的行
- -v 匹配到的行以外的內(nèi)容;
- -c 統(tǒng)計匹配到的行數(shù)
- -n 顯示匹配到的行號
- –color=auto/always 標(biāo)注匹配內(nèi)容顏色
- -l 返回匹配到的文件列表;-L 返回未匹配到的文件列表
- -e 指定多個匹配模式; -r 遞歸; -q 靜默,匹配成功 $?為0,否則為1;
- -Z 以0作為定界符;
- 連帶內(nèi)容 -A 3 匹配的行 連帶后三行; -B 2 匹配的行 連帶前兩行;-C 2 連帶前、后兩行
# 匹配文件內(nèi)容
grep -iE -l "^while" *.sh
test.sh
# 標(biāo)準(zhǔn)輸入 中的匹配
echo laufing | grep -i -e 'au' -e ng
laufing
# 遞歸搜素指定的文件
grep -rn --include='*.sh' --include='*.txt' -e 'while' . # 指定目錄
./test.sh:10:while true
# --exclude=*.sh 排除指定文件
# --exclude-from
# 遞歸匹配
grep -Rn 'xxx' .
?
- cut 過濾字段
- cut -f 3 result.txt ;獲取文件中的第三列;
- -d 指定定界符,默認(rèn)為\t;
- -f 指定第幾列,從1開始;
- -f 1 --complement ;第一列以外的列;
- -c 1-5 ; 字符范圍 作為列
查看8010端口的進(jìn)程,并根據(jù)pid殺掉所有進(jìn)程
# netstat -tnp
lsof -i:8010 | cut -f 2 -d " " | xargs kill -9
?
- 磁盤使用情況
- df -h;可以空間 kb單位
- du -h; 文件大小
- -a 遞歸
- -h 可讀性
- -c 統(tǒng)計
- -s 總結(jié)
- -b 以byte為單位
- 找出指定的目錄中,最大的十個文件,并降序輸出
# 總結(jié)
du -sh /home/laufing/* | sort -nrk 1 | head
簡單案例
- 編寫shell腳本,輸出當(dāng)前用戶是否為root用戶。
#!/bin/bash
# 開啟調(diào)試
set -x
# 數(shù)值比較 測試
if [ $UID -eq 0 ]; then
echo "you are root."
else
echo "you are common user."
fi
添加可執(zhí)行權(quán)限:chmod u+x lauf.sh
- 編寫shell腳本,接收命令行參數(shù) m 、 n,輸出 m n {m^n} mn
#!/bin/bash
# 變量直接賦值,一切值均為字符串
m=$1
n=$2
echo $m $n
echo -e "calc result:\n" # -e 有轉(zhuǎn)義字符
echo "${m}^${n}" | bc
- 編寫shell腳本,創(chuàng)建一個普通數(shù)組(‘tom’ ‘jack’ ‘lucy’),使用for循環(huán)遍歷出每個元素。
#!/bin/bash
#!/bin/bash
arr=('tom' 'jack' 'lucy')
for((i=0; i < ${#arr[*]}; i++)){ # 數(shù)組長度
echo ${arr[i]} # 普通數(shù)組,索引訪問 arr[@] / arr[*] 獲取所有的元素
echo ${#arr[i]} # 每個元素的長度
}
- 編寫shell腳本,存儲水果的價格,apple: 3.4,pear: 2.3,banana: 2.8;命令行傳參一個水果的名字,輸出它的價格。
#!/bin/bash
# 聲明關(guān)聯(lián)數(shù)組,支持字符串索引,相當(dāng)于python字典
declare -A price
price['apple']=3.4
price['pear']=2.3
price['banana']=2.8
echo "${price[$1]}"
# 命令行執(zhí)行
$ ./lauf.sh apple
?
5. 編寫shell腳本,查看當(dāng)前目錄下占用磁盤空間最大的5個文件,并自定義一個命令,名為lauf,命令行下執(zhí)行l(wèi)auf命令即可執(zhí)行腳本。
- du -ah 查看磁盤使用情況
- alias 定義命令別名,防止輸入過長。命令行下臨時生效,配置文件中永久生效
- 開啟調(diào)試模式
- sh -x lauf.sh
- #!/bin/bash -xv
- set -x 寫在腳本語句中 set +x 關(guān)閉調(diào)試
#!/bin/bash
du -ah | sort -nrk 1 | head -n 5
# sort
# -n 數(shù)值排序
# -k 指定列
# -r 逆序排序
6. 編寫shell腳本,要求用戶輸入用戶名、密碼,其中輸入密碼時不允許顯示,最后打印用戶名及密碼,并統(tǒng)計程序執(zhí)行的時間。
- read 獲取用戶的輸入,如 read password, 讀取內(nèi)容并存入password變量;
read -p “提示:”,
read -s 靜默輸入,不顯示,
read -n 讀取指定數(shù)量的字符 - stty -echo 不允許顯示; stty echo 允許顯示;
- date 獲取日期時間,date? +%s 獲取時間戳, date +%a星期, date +%d日期,date +%b月份, date +%y/Y年,date +%H小時,date +%M分鐘,date +%S秒
#!/bin/bash
# 計算開始時間
start=$(date +%s) # (xxx) 子shell , 即子進(jìn)程; $() 相當(dāng)于``
# 輸入用戶名
read -p "input your name:" username
# 不顯示
stty -echo
read -p "input your password:" password
# 顯示
stty echo
# 輸出
echo "your name: $username"
echo "your password: $password"
# 計算結(jié)束時間
end=$(date +%s)
# 計算差值
let delta=end-start
echo "total time: $delta s."
?
7. 編寫shell,循環(huán)10次,每次延遲5s,計算程序執(zhí)行總時間。文章來源:http://www.zghlxwxcb.cn/news/detail-733313.html
#!/bin/bash
start=$(date +%s)
for i in {1..10}; do
sleep 5 # 休眠 命令行參數(shù)傳入時間
echo $i
done
end=$(date +%s)
delta=$[end-start]
echo "total time: $delta s."
?
?
上一篇: linux shell操作- 01 基礎(chǔ)必備
下一篇:linux shell操作- 03 用戶切換及shell案例文章來源地址http://www.zghlxwxcb.cn/news/detail-733313.html
到了這里,關(guān)于linux shell操作- 02 常用命令及案例的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!