輕度Linux服務器維護人員經常使用的Shell腳本命令

文件操做java

  • 更改當前目錄 cdshell

  • 獲取當前目錄 pwd數據庫

  • 刪除文件/目錄 rm -f or rm -rf or rmdirexpress

  • 建立文件 touch or cat > xxxvim

  • 建立臨時文件 mktemp testing.XXXXXX, 文件名末尾加6個X數組

  • 建立臨時目錄 mktemp -d dir.XXXXXX, 目錄名末尾加6個Xbash

  • 建立目錄 mkdir服務器

  • 移動文件/文件重命名 mv網絡

  • 複製 cpapp

  • 硬連接/軟連接 ln or ln -s

  • 顯示文件列表 ls

  • 實際搜索硬盤查詢文件名稱 find

  • 別名 alias

  • 查看文件所在路徑 dirname

  • 查看文件名(過濾路徑) basename

  • 查看可執行文件的位置 which

  • 查看文件的位置 whereis

  • 配合數據庫查看文件位置 locate

文件查看

  • 文件內容查看 cat

  • 按頁查看文件內容 more or less

  • 查看文件前幾行 head

  • 查看文件後幾行 tail

  • 查看文件統計信息 stat

  • 查看文件類型 file

文本編輯

  • 字符流編輯器 sed

  • 模式匹配的程序設計語言 awk and gawk

  • 行編輯器 ed

  • 排序 sort

  • 編輯工具 vim or emacs

查詢/統計

  • 統計文件中數量 wc -c or wc -l or wc -w

  • 計算行號 nl

  • 搜索數據 grep

文件權限

  • 系統用戶 cat /etc/passwd or cat /etc/shadow

  • 添加用戶 useradd

  • 刪除用戶 userdel

  • 修改用戶 usermod or chsh or chfn or chage

  • 修改密碼 passwd or chpasswd

  • 系統用戶組 cat /etc/group

  • 添加用戶組 groupadd

  • 刪除用戶組 groupdel

  • 添加用戶到用戶組 usermod

  • 修改用戶組 groupmod

  • 設置建立文件默認權限 umask

  • 修改權限 chmod

  • 修改所屬關係 chown or chgrp

  • 執行root命令 sudo

  • 顯示用戶id和所屬組信息 id

壓縮/歸檔

  • 歸檔 tar

  • zip壓縮 zip or unzip or zipcloak or zipnote or zipsplit

  • bzip2壓縮 bzip2 or bunzip2 or bzcat

  • gzip壓縮 gzip or gunzip or gzcat

# 僅打包,不壓縮
tar -cvf /usr/local/test.tar /usr/local/test
# 解包
tar –xvf test.tar

# 打包後,用bzip2壓縮
tar -jcvf /usr/local/test.tar.bz2 /usr/local/test
# 解壓bzip2包
tar -jxvf /usr/local/test.tar.bz2

# 打包後,用gzip壓縮
tar -zcvf /usr/local/test.tar.gz /usr/local/test
# 解壓gzip包
tar -zxvf /usr/local/test.tar.gz

程序安裝

  • Debian & Ubuntu apt-get

  • Redhat & CentOS yum or rpm

  • 查詢rpm包是否安裝 rpm -q xxx

  • 列出全部被安裝的rpm包 rpm -qa

  • 安裝RPM包 rpm -ivh xxx

  • 查看yum安裝後,機器裏都裝了哪些東西 rpm -ql xxx

  • 手動安裝 ./configure then make -j & make install

  • 系統服務 chkconfig

# 列出全部服務
chkconfig --list
# 增長httpd服務
chkconfig --add httpd
# 刪除httpd服務
chkconfig --del httpd
  • 建立、刪除、修復、軟鏈接,還能顯示出已存在軟鏈接的信息 update-alternatives

# 列出系統中全部安裝java程序的路徑,並選擇默認程序
update-alternatives --config java

後臺運行

  • 控制檯下後臺模式運行腳本 command &

  • 非控制檯下後臺模式運行腳本 nohup command &

  • 查看shell當前處理的做業 jobs

  • 重啓中止的做業 bg

  • 計劃執行做業 at [-f filename] time

  • 列出等待的做業 atq

  • 刪除做業 atrm

  • 調整命令的調度優先級 nice and renice

  • 計劃按期執行腳本 cron min hour dayofmonth month dayofweek command

  • 列出當前用戶全部cron時間表 crontab -l

  • 列出cron目錄 ls /etc/cron.*ly

  • 運行服務器問題錯過的的計劃 anacron

  • 後臺新窗口 screen

  • 建立新shell後臺執行,完成後退出 sh -c "cd /home; ls"

系統監控

  • 虛擬內存 cat /proc/meminfo

  • 共享內存 ipcs -m

  • 系統進程 ps aux or ps -ef

  • 實時監測進程 top

  • 結束進程 kill or killall

  • 掛載媒體 mount or umount

  • 查看磁盤使用狀況 df or du

  • 查看登陸用戶 who

  • 查看全部進程和登錄用戶 lsof

  • 捕捉信息 trap

  • 打印確切的系統信息 uname -a

  • 打印操做系統信息 cat /etc/redhat-release

日期/時間

  • 當前時間 date

  • 休息暫停 sleep

  • 打印出一條命令或一個程序的執行時間 time

打印/輸出

  • 打印 printf or echo

  • 輸出重定向(覆蓋) >

  • 輸出重定向(底部追加) >>

  • 輸入重定向 <

  • 內聯輸入重定向 <<

  • 管道 |

  • 標準鍵盤輸入 read

  • 退出狀態碼 echo $?

  • shell腳本結束設置退出狀態碼 exit return_number

  • 命令行參數數量 echo $#

  • 命令行最後一個參數 echo ${!#}

  • 命令行全部參數 $* or $@

  • 命令行參數位移 shift

# ./testing -a -b test1 -d
# Found the -a option
# Found the -b option. with parameter value test1
# -d is not an option
# extracting command line options and values

while [ -n "$1" ]
do
    case "$1" in
    -a) echo "Found the -a option";;
    -b) param="$2"
        echo "Found the -b option, with parameter value $param"
        shirt 2;;
    -c) echo "Found the -c option";;
    --) shift
        break;
    *) echo "$1 is not an option";;
    esac
    shift
done

count=1
for param in "$@"
do
    echo "Parameter #$count: $param"
    count=$[ $count + 1 ]
done
  • 命令行參數分析 getopt

  • 結果輸出到和標準錯誤同樣 command >&2

  • 重定向錯誤和數據 return_number>, 重定向全部輸出 &>

# 文件或路徑不存在的返回碼是2
ls -al badfile 2> testfile
cat testfile
# ls: cannot access badfile: No such file or directory

ls -al test test2 test3 badtest 2> testfile 1> testfile2
cat testfile
# ls: cannot access test: No such file or directory
# ls: cannot access badtest: No such file or directory
cat testfile2
# -rw-rw-r--.   1 rich rich 158 2010-10-16 11:32 test2
# -rw-rw-r--.   1 rich rich   0 2010-10-16 11:33 test3
  • 永久重定向 exec return_number> or exec return_number<

  • 阻止命令輸出 command > /dev/null

  • 清空文件 cat /dev/null > filename

  • 記錄消息到日誌文件 tee filename

date | tee testfile
# Sun Oct 17 18:56:21 EDT 2010
  • 清屏 clear

  • 建立腳本菜單 select

# smenu1
PS3="Enter option: "
select option in "Display disk space" "Display logged on users" "Display memory usage" "Exit program"
do
    case $option in
    "Exit program")
        break ;;
    "Display disk space")
        df -k ;;
    "Display logged on users")
        who ;;
    "Display memory usage")
        cat /proc/meminfo ;;
    *)
        clear
        echo "Sorry, wrong selection" ;;
    esac
done
clear
# ./smenu1
# 1) Display disk space       3) Display memory usage
# 2) Display logged on users  4) Exit program
# Enter option:

數學運算

  • 數學表達式 expr xxx

  • 方括號數學表達式 $[ xxx ]

  • bash計算器 bc

# 2個變量相除,結果爲4位小數
var1=100
var2=45
var3=`echo "scale=4; $var1 / $var2" | bc`
echo The answer for this is $var3
# The answer for this is 2.2222

運算符

  • 測試條件並返回退出狀態碼(經常使用在if裏) test condition or [ condition ]

  • 雙尖括號(針對數學表達式, 經常使用在if裏) (( expression ))

  • 雙方括號(針對字符串比較, 經常使用在if裏) [[ expression ]]

  • 數組 ( )

# 數組遍歷
array_name=(value0 value1 value2 value3 value4)
for value in ${array_name[@]}; do
    echo value
done

網絡通訊

  • 輸出郵件發送 mail

  • 輸出網絡接口配置 ifconfig or ip addr

  • 顯示網絡接口信息 netstat or ss

  • 文件下載 wget

  • http請求 curl, 此命令也包含文件下載功能

  • 驗證服務器是否連通 ping

  • 跟蹤網絡訪問路由 tracepath or traceroute

  • 結合pingtracepath功能的工具 mtr

  • DNS查詢 host

  • 查詢指定站點的whois記錄 whois

  • 網線是否插到在網絡接口上 ifplugstatus

  • 網卡禁用和開啓 ifdown and ifup

  • 釋放IP地址並從DHCP服務器上得到一個新的 dhclient -r

## 經常使用ss命令
ss -l #顯示本地打開的全部端口
ss -pl #顯示每一個進程具體打開的socket
ss -t -a #顯示全部tcp socket
ss -u -a #顯示全部的UDP Socekt
ss -o state established '( dport = :smtp or sport = :smtp )' #顯示全部已創建的SMTP鏈接
ss -o state established '( dport = :http or sport = :http )' #顯示全部已創建的HTTP鏈接
ss -x src /tmp/.X11-unix/* #找出全部鏈接X服務器的進程
ss -s #列出當前socket詳細信息

結構化命令

  • 條件判斷 if-then-else

if command1
then
    commands
elif command2
then
    more commands
else
    more commands
fi
# or
if command1; then
    commands
elif command2; then
    more commands
else
    more commands
fi
  • 條件分支 case

case variable in
pattern1 | pattern2)
    commands1;;
pattern3)
    commands2;;
*)
    default commands;;
esac
  • 循環 for

for var in list
do
    commands
done
# or
for var in list; do
    commands
done
# or
for (( variable assignment ; condition ; iteration process )); do
    commands
done
  • 循環 while

while test command
do
    commands
done
# or
while test command; do
    commands
done
# or 讀取文件
while read line; do
    echo "$line"
done
  • 循環 until 與while條件判斷恰好相反,command返回非0才執行commands

until test command
do
    commands
done
# or
until test command; do
    commands
done
  • 控制循環 break and continue

函數

  • 基本腳本函數

function name {
    commands
}
# or
name() {
    commands
}
  • 退出函數並返回退出狀態碼 return,範圍0~255

  • 函數返回真實數據

function db1 {
    read -p "Enter a value: " value
    echo $[ $value * 2 ]
}
result=`db1`
echo "The new value is $result"
  • 函數參數 func value1 value2

  • 函數內局部變量 local

  • 腳本中調用另外一個腳本 . ./myfuncs

環境變量

  • 顯示全局環境變量 printenv

  • 顯示環境變量(局部+全局) set

  • 設置全局環境變量 export xxx

  • 刪除環境變量 unset xxx

附錄:默認shell環境變量

變量 描述
CDPATH 冒號分隔的目錄列表,做爲cd命令的搜索路徑
HOME 當前用戶的主目錄
IFS shell用來分隔文本字符串的一列字符
MAIL 當前用戶收件箱的文件名;bash shell會檢查這個文件來看有沒有新郵件
MAILPATH 冒號分隔的當前用戶收件箱的文件名列表;bash shell會檢查列表中的每一個文件來看有沒有新郵件
OPTARG getopts命令處理的最後一個選項參數值
OPTIND getopts命令處理的最後一個選項參數的索引號
PATH 冒號分隔的shell查找命令的目錄列表
PS1 shell命令行界面的主提示符
PS2 shell命令行界面的次提示符

附錄:Linux本地開機文件位置

發行版 文件位置
debian /etc/init.d/rc.local
Fedora /etc/rc.d/rc.local
Mandriva /etc/rc.local
openSuse /etc/init.d/boot.local
Ubuntu /etc/rc.local

附錄:登陸shell文件處理順序

編號 交互式login shell 交互式non-login shell
1) 系統全局環境變量 /etc/profile /etc/bashrc
2) 私有環境變量 $HOME/.bash_profile -
3) 私有環境變量 $HOME/.bash_login -
4) 私有環境變量 $HOME/.profile $HOME/.bashrc

附錄:expr命令操做符

操做符 描述
ARG1 | ARG2 若是沒有參數是null或零值,返回ARG1;不然返回ARG2
ARG1 & ARG2 若是沒有參數是null或零值,返回ARG1;不然返回0
ARG1 < ARG2 若是ARG1小於ARG2,返回1;不然返回0
ARG1 <= ARG2 若是ARG1小於或等於ARG2,返回1;不然返回0
ARG1 = ARG2 若是ARG1等於ARG2,返回1;不然返回0
ARG1 != ARG2 若是ARG1不等於ARG2,返回1;不然返回0
ARG1 >= ARG2 若是ARG1大於或等於ARG2,返回1;不然返回0
ARG1 > ARG2 若是ARG1大於ARG2,返回1;不然返回0
ARG1 + ARG2 返回ARG1和ARG2的算術運算和
ARG1 - ARG2 返回ARG1和ARG2的算術運算差
ARG1 * ARG2 返回ARG1和ARG2的算術運算乘積
ARG1 / ARG2 返回ARG1被ARG2除的運算商
ARG1 % ARG2 返回ARG1被ARG2除的算術餘數
STRING : REGEXP 若是REGEXP匹配到了STRING中的某個模式,返回該模式匹配
match STRING REGEXP 若是REGEXP匹配到了STRING中的某個模式,返回該模式匹配
substr STRING POS LENGTH 返回起始位置爲POS(從1開始計數)、長度爲LENGTH個字符的子字符串
index STRING CHARS 返回在STRING中找到CHARS字符串的位置;不然,返回0
length STRING 返回字符串STRING的數值長度
+ TOKEN 將TOKEN解釋成字符串,即便是個關鍵字
(EXPRESSION)) 返回EXPRESSION的值

附錄:Linux退出狀態碼

狀態碼 描述
0 命令成功結束
1 通用未知錯誤
2 誤用shell命令
126 命令不可執行
127 沒找到命令
128 無效退出參數
128+x Linux信號x的嚴重錯誤
130 命令經過Ctrl+C終止
255 退出狀態碼越界

附錄:test命令的數值比較功能

比較 描述
n1 -eq n2 檢查n1是否與n2相等
n1 -ge n2 檢查n1是否大於或等於n2
n1 -gt n2 檢查n1是否大於n2
n1 -le n2 檢查n1是否小於或等於n2
n1 -lt n2 檢查n1是否小於n2
n1 -ne n2 檢查n1是否不等於n2

附錄:test命令的字符串比較功能

比較 描述
str1 = str2 檢查str1是否和str2相同
str1 != str2 檢查str1是否和str2不一樣
str1 < str2 檢查str1是否比str2小
str1 > str2 檢查str1是否比str2大
-n str1 檢查str1的長度是否非0
-z str1 檢查str1的長度是否爲0

附錄:test命令的文件比較功能

比較 描述
-d file 檢查file是否存在並是一個目錄
-e file 檢查file是否存在
-f file 檢查file是否存在並是一個文件
-r file 檢查file是否存在並可讀
-s file 檢查file是否存在並不是空
-w file 檢查file是否存在並可寫
-x file 檢查file是否存在並可執行
-O file 檢查file是否存在並並屬當前用戶全部
-G file 檢查file是否存在而且默認組與當前用戶相同
file1 -nt file2 檢查file1是否比file2新
file1 -ot file2 檢查file1是否比file2舊

附錄:通用的Linux命令選項

選項 描述
-a 顯示全部對象
-c 生成一個計數
-d 指定一個目錄
-e 擴展一個對象
-f 指定讀入數據的文件
-h 顯示命令的幫助信息
-i 忽略文本大小寫
-l 產生輸出的長格式版本
-n 使用非交互模式(批量)
-o 指定將全部輸出重定向到輸出文件
-q 以安靜模式運行
-r 遞歸地處理目錄和文件
-s 以安靜模式運行
-v 生成詳細輸出
-x 排除某個對象
-y 對全部問題回答yes

附錄:Linux信號

信號 描述
1 SIGHUP 掛起進程
2 SIGINT 終止進程
3 SIGQUIT 中止進程
9 SIGKILL 無條件終止進程
15 SIGTERM 可能的話終止進程
17 SIGSTOP 無條件中止進程,但不是終止進程
18 SIGTSTP 中止或者暫停進程,但不終止進程
19 SIGCONT 繼續運行中止的進程
相關文章
相關標籤/搜索