您好,登錄后才能下訂單哦!
命令幫助信息獲取
sh 執(zhí)行腳本
-x選項(xiàng)來(lái)查看這個(gè)腳本執(zhí)行過(guò)程的
[root@localhost?~]#?sh?1.sh [root@localhost?~]#?sh?-x?1.sh? [root@localhost?~]#?./1.sh
-n 只讀取shell腳本,但不實(shí)際執(zhí)行
-x 進(jìn)入跟蹤方式,顯示所執(zhí)行的每一條命令
echo
將輸入的字符串送往標(biāo)準(zhǔn)輸出。
用echo命令輸出加引號(hào)的字符串時(shí),將字符串原樣輸出;用echo命令輸出不加引號(hào)的字符串時(shí),將字符串中的各個(gè)單詞作為字符串輸出,各字符串之間用一個(gè)空格分割。
參 數(shù):
-n 不要在最后自動(dòng)換行
-e 若字符串中出現(xiàn)以下字符,則特別加以處理,而不會(huì)將它當(dāng)成一般文字輸出: ??
????\a 發(fā)出警告聲; ??
????\b 刪除前一個(gè)字符; ??
????\c 最后不加上換行符號(hào); ??
????\f 換行但光標(biāo)仍舊停留在原來(lái)的位置; ??
????\n 換行且光標(biāo)移至行首;
[root@Zabbix?~]#?echo?-e?'aaa\nbbb' aaa bbb [root@Zabbix?~]#
?echo顯示帶顏色,需要使用參數(shù)-e
格式如下:
echo -e "\033[字背景顏色;文字顏色m字符串\033[0m"
例如:?
echo -e "\033[41;37m TonyZhang \033[0m"
其中41的位置代表底色, 37的位置是代表字的顏色
?注:
1、字背景顏色和文字顏色之間是英文的“""”
2、文字顏色后面有個(gè)m
3、字符串前后可以沒(méi)有空格,如果有的話,輸出也是同樣有空格
下面看幾個(gè)例子:
echo -e "\033[30m 黑色字 \033[0m"
echo -e "\033[31m 紅色字 \033[0m"
echo -e "\033[32m 綠色字 \033[0m"
echo -e "\033[33m ×××字 \033[0m"
echo -e "\033[34m 藍(lán)色字 \033[0m"
echo -e "\033[35m 紫色字 \033[0m"
echo -e "\033[36m 天藍(lán)字 \033[0m"
echo -e "\033[37m 白色字 \033[0m"
?
echo -e "\033[40;37m 黑底白字 \033[0m"
echo -e "\033[41;37m 紅底白字 \033[0m"
echo -e "\033[42;37m 綠底白字 \033[0m"
echo -e "\033[43;37m 黃底白字 \033[0m"
echo -e "\033[44;37m 藍(lán)底白字 \033[0m"
echo -e "\033[45;37m 紫底白字 \033[0m"
echo -e "\033[46;37m 天藍(lán)底白字 \033[0m"
echo -e "\033[47;30m 白底黑字 \033[0m"
控制選項(xiàng)說(shuō)明 :
\33[0m 關(guān)閉所有屬性?
\33[1m 設(shè)置高亮度?
\33[4m 下劃線?
\33[5m 閃爍?
\33[7m 反顯?
\33[8m 消隱?
\33[30m -- \33[37m 設(shè)置前景色?
\33[40m -- \33[47m 設(shè)置背景色?
\33[nA 光標(biāo)上移n行?
\33[nB 光標(biāo)下移n行?
\33[nC 光標(biāo)右移n行?
\33[nD 光標(biāo)左移n行?
\33[y;xH設(shè)置光標(biāo)位置?
\33[2J 清屏?
\33[K 清除從光標(biāo)到行尾的內(nèi)容?
\33[s 保存光標(biāo)位置?
\33[u 恢復(fù)光標(biāo)位置?
\33[?25l 隱藏光標(biāo)?
\33[?25h 顯示光標(biāo)?
??\r 光標(biāo)移至行首,但不換行; ??
????\t 插入tab;?
[root@Zabbix?~]#?echo?aaa\tbbb aaatbbb [root@Zabbix?~]#?echo?'aaa\tbbb' aaa\tbbb [root@Zabbix?~]#?echo?-e?aaa\tbbb aaatbbb [root@Zabbix?~]#?echo?-e?'aaa\tbbb' aaa bbb [root@Zabbix?~]#
????\v 與\f相同; ??
????\\ 插入\字符; ?
????\nnn 插入nnn(八進(jìn)制)所代表的ASCII字符;
``反引號(hào)的作用就是將反引號(hào)內(nèi)的Linux命令先執(zhí)行,然后將執(zhí)行結(jié)果賦予變量。
如果在命令行上把Linux命令放在反引號(hào)中,這個(gè)命令會(huì)首先被執(zhí)行,其結(jié)果會(huì)成為命令行的一個(gè)參數(shù)。類似的還有$( ),這里是括號(hào),不是花括號(hào),${ }就是取變量了,比如:echo ${PATH},{}是為了避免后面的影響到了,比如參數(shù)${a}a這樣連著使用。如果不用{},系統(tǒng)就會(huì)識(shí)別成$aa了
[root@localhost?~]#?echo?`df?-Th`?>?cat.txt? [root@localhost?~]#?cat?cat.txt? Filesystem?Type?Size?Used?Avail?Use%?Mounted?on?/dev/sda3?ext4?18G?3.0G?14G?18%?/?tmpfs?tmpfs?504M?76K?504M?1%?/dev/shm?/dev/sda1?ext4?194M?28M?157M?15%?/boot?/dev/sr0?iso9660?64M?64M?0?100%?/media/VMware?Tools [root@localhost?~]#
單引號(hào)和反引號(hào)之間的區(qū)別。單引號(hào)把Linux命令視為字符集合。反引號(hào)會(huì)強(qiáng)迫執(zhí)行Linux命令。
cd--change directory---切換工作目錄
[root@localhost?~]#?cd?/home [root@localhost?home]#?pwd /home [root@localhost?home]#?cd?/usr/local/src/ [root@localhost?src]#?pwd /usr/local/src [root@localhost?src]#
說(shuō)明:
1.目錄名稱省略,變換至使用者的 home directory (也就是剛 login 時(shí)所在的目錄)
2."~" 表示為 home directory 的意思
3."." 則是表示目前所在的目錄
4.".." 則表示目前目錄位置的上一層目錄
5.“-” 返回進(jìn)入當(dāng)前目錄前所在目錄
[root@localhost?src]#?cd [root@localhost?~]#?pwd /root [root@localhost?~]#?cd?- /usr/local/src [root@localhost?src]#?pwd /usr/local/src [root@localhost?src]#?cd?.. [root@localhost?local]#?pwd /usr/local [root@localhost?local]#?cd?. [root@localhost?local]#?pwd /usr/local [root@localhost?local]#?cd?~ [root@localhost?~]#?pwd /root [root@localhost?~]#
6."!$" 把上個(gè)命令最后的參數(shù)作為輸入
[root@localhost?src]#?mkdir?/usr/local/nagios [root@localhost?src]#?tar?zxvf?nagios-3.5.0.tar.gz?-C?/usr/local/nagios [root@localhost?src]#?cd?!$ cd?/usr/local/nagios [root@localhost?nagios]#
ifconfig----查看本機(jī)IP地址
[root@Git-Client?~]#?ifconfig [root@Project?~]#?ip?addr [root@Project?~]#?ip?addr?show?ens160
curl ifconfig.me查看本機(jī)公網(wǎng)IP
[root@Git-Client?~]#?curl?ifconfig.me
cp---復(fù)制文件或者目錄
[root@localhost?~]#?cp?/etc/sysconfig/network-scripts/ifcfg-eth0?/etc/sysconfig/network-scripts/ifcfg-eth0bak [root@localhost?test]#?ls test.txt [root@localhost?test]#?cp?test.txt{,bak} [root@localhost?test]#?ls test.txt??test.txtbak [root@localhost?test]#?cp?/etc/sysconfig/iptables{,`date?+%Y%m%d`bak}
-a 盡可能將檔案狀態(tài)、權(quán)限等資料都照原狀予以復(fù)制,其作用等于dpR選項(xiàng)的組合 ,
-r 若 source 中含有目錄名,則將目錄下檔案也依序拷貝至目的地,復(fù)制目錄時(shí)必須使用此選項(xiàng)
[root@localhost?local]#?cp?nagios/?/usr/local/src/ cp:?略過(guò)目錄"nagios/" [root@localhost?local]#?cd?nagios/ [root@localhost?nagios]#?ls nagios [root@localhost?nagios]#?cp?-r?nagios/?/usr/local/src/ [root@localhost?nagios]#?cp?-a??nagios/?/usr/local/src/nagios1
-f 若目的地已經(jīng)有相同檔名的檔案存在,則在復(fù)制前先予以刪除再行復(fù)制。
-u :若 destination 比 source 舊才更新 destination !或目的地文件 不存在時(shí)才進(jìn)行復(fù)制
-i :若目的檔(destination)已經(jīng)存在時(shí),在覆蓋時(shí)會(huì)先詢問(wèn)是繼續(xù)
? ? ?有時(shí)候使用-f參數(shù)也會(huì)提示是否覆蓋,linux系統(tǒng)中有時(shí)候給cp建了一個(gè)alias:
[root@localhost?~]#?alias|grep?cp alias?cp='cp?-i' [root@localhost?~]#
當(dāng)你執(zhí)行cp時(shí),其實(shí)執(zhí)行的是cp -i,如果不想每次詢問(wèn)可以直接注釋掉。重新打開(kāi)回話窗口不再提示
[root@localhost?~]#?cat?~/.bashrc?|grep?cp #alias?cp='cp?-i' [root@localhost?~]#
如果臨時(shí)取消掉,可以通過(guò)以下
[root@localhost?static]#?unalias?cp [root@localhost?static]#?cp?/usr/local/src/static/*?.?-a [root@localhost?static]#
-d:拷貝軟連接時(shí)需要加上該參數(shù),否則把軟連接的目標(biāo)文件拷貝過(guò)去,而加上后,其實(shí)只是拷貝了一個(gè)連接文件。
-p :連同檔案的屬性一起復(fù)制過(guò)去,而非使用預(yù)設(shè)屬性
拷貝目錄:
[root@localhost?dir]#?mkdir?dir?dir1 [root@localhost?dir]#?touch?dir/file{1..9} [root@localhost?dir]#?cp?-r?dir?dir1/ [root@localhost?dir1]#?ls dir [root@localhost?dir1]#
Tips:可以多個(gè)目錄一起拷貝 最后一個(gè)為目標(biāo)目錄
[root@justin?~]#?cp?/etc/rc.sysinit?/etc/inittab?/mnt/lv1/ [root@justin?~]#?ls?!$ ls?/mnt/lv1/ inittab??lost+found??rc.sysinit [root@justin?~]#
如果要排除/home/data目錄下面的a、b、c、三個(gè)目錄,同時(shí)拷貝其它所有目錄,執(zhí)行以下命令
yum?install?rsync???#安裝rsync rsync?-av?--exclude?data/a??--exclude?data/b??--exclude?data/c??data???/bak
注意:--exclude后面的路徑不能為絕對(duì)路徑,必須為相對(duì)路徑才可以,否則出錯(cuò)。且備份的目錄data不能寫成data/
-v, --verbose 詳細(xì)模式輸出?
-c, --checksum 打開(kāi)校驗(yàn)開(kāi)關(guān),強(qiáng)制對(duì)文件傳輸進(jìn)行校驗(yàn)?
-a, --archive 歸檔模式,表示以遞歸方式傳輸文件,并保持所有文件屬性,等于-rlptgoD?
-z, --compress 對(duì)備份的文件在傳輸時(shí)進(jìn)行壓縮處理
-r, --recursive 對(duì)子目錄以遞歸模式處理?
-R, --relative 使用相對(duì)路徑信息?
-b, --backup 創(chuàng)建備份,也就是對(duì)于目的已經(jīng)存在有同樣的文件名時(shí),將老的文件重新命名為~filename??梢允褂?-suffix選項(xiàng)來(lái)指定不同的備份文件前綴。?
--exclude=PATTERN 指定排除不需要傳輸?shù)奈募J?
--exclude=PATTERN 指定排除不需要傳輸?shù)奈募J?
--include=PATTERN 指定不排除而需要傳輸?shù)奈募J?
--exclude-from=FILE 排除FILE中指定模式的文件?
--include-from=FILE 不排除FILE指定模式匹配的文件?
scp
[root@localhost?app]#?scp?-r?ProxyServer?root@192.168.1.104:/app
-p 可以保持文件屬性不變
[root@localhost?~]#?scp?-rp?*?root@10.15.44.239:/var/log/remote/
獲得完整的文件路徑
[root@localhost?soft]#?readlink?-f?docker-check-config.sh? /app/soft/docker-check-config.sh [root@localhost?soft]#
登陸自動(dòng)指定目錄
在用戶的.bash_profile里添加cd 目錄
[root@localhost?~]#?pwd /root [root@localhost?~]#?vim?/root/.bash_profile? #?.bash_profile #?Get?the?aliases?and?functions if?[?-f?~/.bashrc?];?then ????????.?~/.bashrc fi cd?/sh #?User?specific?environment?and?startup?programs PATH=$PATH:$HOME/bin export?PATH
mv---移動(dòng)或重命名文件
[root@Zabbix_server?fonts]#?ls DejaVuSans.ttf??STXINGKA.TTF [root@Zabbix_server?fonts]#?mv?DejaVuSans.ttf{,bak} [root@Zabbix_server?fonts]#?ls DejaVuSans.ttfbak??STXINGKA.TTF [root@Zabbix_server?fonts]#
-b ? ? ? ? ? ? ? ?如果已存在相同文件名,則覆蓋前進(jìn)行備份
-f ? ? ? ? ? ? ? ? 如果已存在相同文件名,而用戶不具有寫的權(quán)限,則強(qiáng)制覆蓋
-i ? ? ? ? ? ? ? ? 如果已存在相同文件名,覆蓋前提示用戶進(jìn)行確認(rèn)
-u ? ? ? ? ? ? ? ?比較原文件與目標(biāo)文件修改時(shí)間,如果目標(biāo)文件較新則不覆蓋
-v ? ? ? ? ? ? ? ?列出所有被移動(dòng)或重命名的文件
-i 若目的地已有同名檔案,則先詢問(wèn)是否覆蓋舊檔
[root@localhost?~]#?cd?/home/ [root@localhost?home]#?touch?justinmv [root@localhost?home]#?ls justin??justinmv??lost+found??t [root@localhost?home]#?mv?justinmv?justin1 [root@localhost?home]#?ls justin??justin1??lost+found??t [root@justin?home]#?ls justin??lost+found??mv [root@justin?home]#?mv?mv{,bak} [root@justin?home]#?ls justin??lost+found??mvbak [root@localhost?home]#?mv?justin1?/usr/local/src/ [root@localhost?home]#?ls justin??lost+found??t [root@localhost?home]#?cd?/usr/local/src/?&&?ls justin1??nagios??nagios1??nagios2??nagios-3.5.0.tar.gz [root@localhost?home]#?touch?justin1 [root@localhost?home]#?mv?-i?justin1?/usr/local/src/ mv:是否覆蓋"/usr/local/src/justin1"??y [root@justin?touch]#?ls file1??file2??file3??file4??file5 [root@justin?touch]#?mv?file1?file2?../mv/ [root@justin?touch]#?mv?file{3..4}?../mv/ [root@justin?touch]#?ls?../mv/ file1??file2??file3??file4 [root@justin?touch]#
last---顯示當(dāng)前和過(guò)去用戶登陸的所有相關(guān)信息
last命令可以顯示指定賬戶或終端登錄用戶的相關(guān)信息。不帶參數(shù)的last命令顯示/var/log/wtmp文件中記錄的登錄用戶的清單。
[root@Zabbix_server?home]#?last justin???pts/1????????10.15.71.162?????Thu?Aug?28?13:44???still?logged?in??? justin???pts/1????????10.15.71.162?????Thu?Aug?28?13:31?-?13:44??(00:12)???? root?????pts/0????????10.15.71.162?????Tue?Aug?26?09:58???still?logged?in
當(dāng)?shù)顷懴到y(tǒng)用戶很多的時(shí)候,可以在W后面加上某個(gè)用戶名,則會(huì)查看該用戶執(zhí)行任務(wù)的情況:[root@localhost ~]# last justin
pts 表示遠(yuǎn)程連接的,tty表示console登陸的
-n<顯示行數(shù)>或-<顯示行數(shù)> ?設(shè)置列出名單的顯示行數(shù)。
-f file ?指定記錄文件,默認(rèn)情況下last命令讀取/var/log/wtmp文件。
-t YYYYMMDDHHMMSS ?顯示指定時(shí)間為止的所有登錄信息,日期格式為年月日時(shí)分秒
[root@Zabbix_server?home]#?last?-t?20140828134000 justin???pts/1????????10.15.71.162?????Thu?Aug?28?13:31????gone?-?no?logout? root?????pts/0????????10.15.71.162?????Tue?Aug?26?09:58???still?logged?in
-R 不顯示登錄系統(tǒng)的主機(jī)名或IP地址。
-a ?在最后一列顯示登錄系統(tǒng)主機(jī)的主機(jī)名或IP地址。
-o ?讀取老格式的wtmp文件。
-x ?顯示登錄登出的記錄
[root@Zabbix_server?home]#?last?-5xa justin???pts/1????????Thu?Aug?28?13:44???still?logged?in????10.15.71.162 justin???pts/1????????Thu?Aug?28?13:31?-?13:44??(00:12)?????10.15.71.162 root?????pts/0????????Tue?Aug?26?09:58???still?logged?in????10.15.71.162 root?????pts/0????????Tue?Aug?26?09:57?-?09:58??(00:00)?????:0.0 root?????tty1?????????Tue?Aug?26?09:57???still?logged?in????:0 wtmp?begins?Wed?Jul?16?01:45:27?2014 [root@Zabbix_server?home]#
注:顯示特定的終端,可以用數(shù)字表示,如:last 0 ?===> last tty0
[root@Zabbix_server?home]#?last?1?-3 root?????tty1?????????:0???????????????Tue?Aug?26?09:57???still?logged?in??? root?????tty1?????????:0???????????????Mon?Aug?25?22:55?-?down???(00:01)???? root?????tty1?????????:0???????????????Thu?Aug?21?10:42?-?down???(03:45)???? wtmp?begins?Wed?Jul?16?01:45:27?2014 [root@Zabbix_server?home]#
lastb---顯示登陸失敗的信息
選項(xiàng)和last一樣
[root@Zabbix_server?home]#?lastb?-3a justin???ssh:notty????Thu?Aug?28?13:44?-?13:44??(00:00)?????10.15.71.162 justin???ssh:notty????Thu?Aug?28?13:44?-?13:44??(00:00)?????10.15.71.162 justin???ssh:notty????Thu?Aug?28?13:44?-?13:44??(00:00)?????10.15.71.162 btmp?begins?Tue?Aug??5?13:51:27?2014 [root@Zabbix_server?home]#?lastb?|?awk?'{?print?$3}'?|?awk?'{++S[$NF]}?END?{for(a?in?S)?print?a,?S[a]}'?|?sort?-rk2?|head????查看嘗試惡意登陸的前十個(gè)IP [root@Zabbix_server?home]#?lastb?|?awk?'{?print?$3}'?|?sort?|?uniq?-c?|?sort?-n????????????????查看惡意IP嘗試登陸次數(shù)
/var/log/wtmp 用于記錄登錄成功的用戶的信息,是一個(gè)二進(jìn)制文件,只能通過(guò) last 命令來(lái)查看
/var/log/btmp 用于記錄登錄失敗的用戶的信息,是一個(gè)二進(jìn)制文件,只能通過(guò) lastb 命令來(lái)查看
/var/log/lastlog 用于記錄用戶的歷史登錄情況,是一個(gè)二進(jìn)制文件,只能通過(guò) lastlog 命令來(lái)查看
/var/run/utmp 用于記錄當(dāng)前登錄的用戶的信息,是一個(gè)二進(jìn)制文件,只能通過(guò) who 命令來(lái)查看
lastlog---顯示用戶最后登陸的相關(guān)信息
如果此用戶從來(lái)沒(méi)有登錄,則顯示:**Never?logged?in**
[root@Zabbix_server?home]#?lastlog? zabbix?????????????????????????????????????**Never?logged?in** justin???????????pts/1????10.15.71.162?????Thu?Aug?28?13:44:24?+0800?2014
-u 查詢指定uid的用戶登陸信息
[root@Zabbix_server?home]#?lastlog?-u?500 Username?????????Port?????From?????????????Latest zabbix?????????????????????????????????????**Never?logged?in** [root@Zabbix_server?home]#
whoami---顯示登陸名
[root@localhost?~]#?whoami root [root@localhost?~]#
users---只能列出當(dāng)前登錄的用戶名
[root@justin?~]#?users root [root@justin?~]#
who---可以列出用戶名、終端、登錄時(shí)間、來(lái)源地點(diǎn)等信息
[root@justin?~]#?who root?????pts/0????????2013-10-22?17:34?(10.15.72.73) [root@justin?~]#
who -b 查看最后一次系統(tǒng)啟動(dòng)的時(shí)間。
[root@localhost?~]#?who?-b ?????????system?boot??2016-03-17?10:11 [root@localhost?~]#
who -r 查看當(dāng)前系統(tǒng)運(yùn)行時(shí)間
[root@localhost?~]#?who?-r ?????????run-level?3??2016-05-24?08:41???????????????????last=S [root@localhost?~]#
last ?reboot ?可以看到Linux系統(tǒng)歷史啟動(dòng)的時(shí)間
[root@localhost?~]#?last?reboot reboot???system?boot??2.6.32-431.el6.x?Thu?Mar?17?10:11?-?10:22??(00:11)???? reboot???system?boot??2.6.32-431.el6.x?Wed?Mar?16?12:48?-?10:22??(21:34)???? reboot???system?boot??2.6.32-431.el6.x?Tue?Mar?15?17:31?-?20:39??(03:07)???? reboot???system?boot??2.6.32-431.el6.x?Thu?Mar??3?13:50?-?15:19?(9+01:29)??? reboot???system?boot??2.6.32-431.el6.x?Mon?Feb??1?14:30?-?14:55??(00:24)???? reboot???system?boot??2.6.32-431.el6.x?Fri?Jan?29?10:24?-?14:55?(3+04:30)??? reboot???system?boot??2.6.32-431.el6.x?Mon?Dec?28?06:48?-?14:37?(2+07:49)??? reboot???system?boot??2.6.32-431.el6.x?Sat?Oct?10?23:08?-?15:56??(-7:-12)??? wtmp?begins?Sat?Oct?10?23:08:49?2015 [root@localhost?~]#?last?reboot|head?-1 reboot???system?boot??2.6.32-431.el6.x?Thu?Mar?17?10:11?-?10:25??(00:14)???? [root@localhost?~]#
uptime---列出用戶名、終端、來(lái)源地點(diǎn)、登錄時(shí)間、執(zhí)行的命令等參數(shù)
[root@localhost?~]#?uptime? ?09:23:34?up?56?min,??2?users,??load?average:?0.00,?0.00,?0.00 [root@localhost?~]#
w---列出用戶名、終端、來(lái)源地點(diǎn)、登錄時(shí)間、執(zhí)行的命令等參數(shù)
[root@justin?~]#?w ?19:51:03?up??2:19,??1?user,??load?average:?0.08,?0.02,?0.01 USER?????TTY??????FROM??????????????LOGIN@???IDLE???JCPU???PCPU?WHAT root?????pts/0????10.15.72.73??????17:34????0.00s??0.22s??0.01s?w [root@justin?~]#
USER:顯示登陸用戶帳號(hào)名。用戶重復(fù)登陸,該帳號(hào)也會(huì)重復(fù)出現(xiàn)。
TTY:用戶登陸所用的終端。
FROM:顯示用戶在何處登陸系統(tǒng)。
LOGIN@:是LOGIN AT的意思,表示登陸進(jìn)入系統(tǒng)的時(shí)間。
IDLE:用戶空閑時(shí)間,從用戶上一次任務(wù)結(jié)束后,開(kāi)始記時(shí)。
JCPU:一終端代號(hào)來(lái)區(qū)分,表示在某段時(shí)間內(nèi),所有與該終端相關(guān)的進(jìn)程任務(wù)所耗費(fèi)的CPU時(shí)間。
PCPU:指WHAT域的任務(wù)執(zhí)行后耗費(fèi)的CPU時(shí)間。
WHAT:表示當(dāng)前執(zhí)行的任務(wù)
當(dāng)?shù)顷懴到y(tǒng)用戶很多的時(shí)候,可以在W后面加上某個(gè)用戶名,則會(huì)查看該用戶執(zhí)行任務(wù)的情況:[root@localhost ~]# w justin
想踢除justin這個(gè)用戶和他的所有開(kāi)啟的程序
pkill -u justin
安全的做法是先查看終端號(hào),然后查看該終端執(zhí)行的所有進(jìn)程,根據(jù)進(jìn)程號(hào)來(lái)停止服務(wù)
安全剔除用戶
ps -ef| grep pts/0
得到用戶登錄相應(yīng)的進(jìn)程號(hào)pid后執(zhí)行.
kill -9 pid
??!---執(zhí)行最近一次的命令
[root@localhost?~]#?!! whoami root [root@localhost?~]#
du---統(tǒng)計(jì)目錄(或文件)所占磁盤空間的大小
-c或--total 除了顯示目錄或文件的大小外,同時(shí)也顯示所有目錄或文件的總和。
-a:全部文件與目錄大小都列出來(lái)。如果不加任何選項(xiàng)和參數(shù)只列出目錄(包含子目錄)大小。
-c:最后加總
-b:列出的值以bytes為單位輸出,默認(rèn)是以Kbytes
-k:以KB為單位輸出
-m:以MB為單位輸出
-h或--human-readable 以K,M,G為單位,提高信息的可讀性。系統(tǒng)自動(dòng)調(diào)節(jié)單位,例如文件太小可能就幾K,那么就以K為單位顯示,如果大到幾G,則就以G為單位顯示
-k或--kilobytes 以1024 bytes為單位。
-m或--megabytes 以1MB為單位
-s或--summarize 僅顯示總計(jì),即當(dāng)前目錄的大小。
[root@justin?~]#?du?-c?/mnt/lv1 16??/mnt/lv1/lost+found 44??/mnt/lv1 44??total [root@justin?~]#?du?-sh?/mnt/lv1 44K?/mnt/lv1 [root@justin?~]#?du?-shm?/mnt/lv1 1???/mnt/lv1 [root@justin?~]#?du?-shk?/mnt/lv1 44??/mnt/lv1 [root@justin?~]#
df---檢查linux服務(wù)器的文件系統(tǒng)的磁盤空間占用情況
-h 方便閱讀方式顯示
-i 顯示inode信息
-T 文件系統(tǒng)類型
[root@justin?~]#?df?-Th Filesystem????Type????Size??Used?Avail?Use%?Mounted?on /dev/sda2?????ext4????9.9G??2.4G??7.0G??26%?/ tmpfs????????tmpfs????504M?????0??504M???0%?/dev/shm /dev/sda1?????ext4????194M???26M??158M??15%?/boot /dev/sda5?????ext4????7.7G??146M??7.2G???2%?/home /dev/mapper/sdcvg-sdclv ??????????????ext4????4.0G??137M??3.7G???4%?/mnt/lv1 /dev/mapper/sdcvg-sdclv1 ??????????????ext4????4.0G???72M??3.7G???2%?/mnt/lv2 [root@justin?~]#
id---顯示用戶的ID,以及所屬群組的ID
[root@localhost?~]#?id?justin uid=500(justin)?gid=500(justin)?組=500(justin)
說(shuō)明:id會(huì)顯示用戶以及所屬群組的實(shí)際與有效ID。若兩個(gè)ID相同,則僅顯示實(shí)際ID。若僅指定用戶名稱,則顯示目前用戶的ID。執(zhí)行id時(shí)不添加參數(shù)是查看當(dāng)前用戶的身份標(biāo)識(shí)信息;gid”:表示的是用戶的基本組;“組”:表示的是用戶所屬的所有組,其中“組”中的第1個(gè)組賬號(hào)為該用戶的基本組,其他組賬號(hào)為該用戶的附屬組
file---查看文件類型
[root@justin?2.6.32-279.el6.i686]#?file?extra/ extra/:?directory [root@justin?2.6.32-279.el6.i686]#?file?modules.dep modules.dep:?ASCII?text,?with?very?long?lines [root@justin?2.6.32-279.el6.i686]#
Linux中文件類型不是按后綴名來(lái)定義,而是根據(jù)文件內(nèi)容來(lái)判斷,即使后綴類似windows的.exe也可能只是文本文件
ln---為文件或目錄建立鏈接
-s---進(jìn)行軟鏈結(jié)(symbolic link)
#為網(wǎng)卡建立軟連接wk [root@localhost?~]#?ln?-s?/etc/sysconfig/network-scripts/ifcfg-eth0?/root/wk [root@localhost?~]#?ls?-lh?/root/wk lrwxrwxrwx.?1?root?root?41?9月??23?15:55?/root/wk?->?/etc/sysconfig/network-scripts/ifcfg-eth0
說(shuō)明:軟連接相當(dāng)于window快捷方式,可以在wk里修改文件,刪除鏈接時(shí),直接用rm命令:rm -f /root/wk
Linux/Unix 檔案系統(tǒng)中,有所謂的連結(jié)(link),我們可以將其視為檔案的別名,鏈接文件分為硬鏈接、軟鏈接兩種類型,主要區(qū)別是:不能對(duì)目錄創(chuàng)建硬鏈接,也不能跨越不同分區(qū)創(chuàng)建硬鏈接文件,而軟鏈接則沒(méi)有這些限制,所以平時(shí)使用的大都是軟鏈接。硬連結(jié)的意思是一個(gè)檔案可以有多個(gè)名稱,而軟連結(jié)的方式則是產(chǎn)生一個(gè)特殊的檔案,該檔案的內(nèi)容是指向另一個(gè)檔案的位置。硬連結(jié)是存在同一個(gè)檔案系統(tǒng)中,而軟連結(jié)卻可以跨越不同的檔案系統(tǒng)。不論是硬連結(jié)或軟鏈結(jié)都不會(huì)將原本的檔案復(fù)制一份,只會(huì)占用非常少量的磁碟空間。
alias---設(shè)置命令別名
說(shuō)明:命令別名通常是命令的縮寫,對(duì)于經(jīng)常使用的命令,通過(guò)設(shè)置別名可以簡(jiǎn)化操作,提高工作效率。
單獨(dú)執(zhí)行alias命令可以列出當(dāng)前系統(tǒng)中已經(jīng)存在的別名命令。在執(zhí)行這個(gè)命令時(shí)需要注意,“=”的兩邊不能有空格,在標(biāo)準(zhǔn)命令的兩端要使用單引號(hào)。
[root@localhost?~]#?alias?wk='/etc/sysconfig/network-scripts/ifcfg-eth0' [root@localhost?~]#?alias alias?cp='cp?-i' alias?l.='ls?-d?.*?--color=auto' alias?ll='ls?-l?--color=auto' alias?ls='ls?--color=auto' alias?mv='mv?-i' alias?rm='rm?-i' alias?which='alias?|?/usr/bin/which?--tty-only?--read-alias?--show-dot?--show-tilde' alias?wk='/etc/sysconfig/network-scripts/ifcfg-eth0' [root@localhost?~]#?unalias?wk [root@localhost?~]#?alias alias?cp='cp?-i' alias?l.='ls?-d?.*?--color=auto' alias?ll='ls?-l?--color=auto' alias?ls='ls?--color=auto' alias?mv='mv?-i' alias?rm='rm?-i' alias?which='alias?|?/usr/bin/which?--tty-only?--read-alias?--show-dot?--show-tilde' [root@localhost?~]#
設(shè)置別名也可以在文件/boot/.bashrc中設(shè)置
[root@localhost?~]#?vim?/root/.bashrc
用source命令在當(dāng)前bash環(huán)境下讀取并執(zhí)行bashrc中的命令,這樣我們自定義的命令就生效了
[root@localhost?~]#?source?.bashrc
date?
打印當(dāng)前系統(tǒng)的時(shí)間
[root@localhost?~]#?date? Thu?Nov?13?07:36:28?CST?2014 [root@localhost?~]#?date?"+%y%m%d" 141113 [root@localhost?~]#?date?"+%Y%m%d" 20141113 [root@localhost?~]#?date?"+%Y%m%d?%H:%M:%S" 20141113?07:37:04 [root@localhost?~]#?date?-d?"+1?day"?"+%Y%m%d?%H:%M:%S" 20141114?07:37:31 [root@localhost?~]#?date?-d?"-1?month"?"+%Y%m%d?%H:%M:%S" 20141013?07:37:45 [root@localhost?~]#?date?-d?"-1?year"?"+%Y%m%d?%H:%M:%S?%w" 20131113?07:38:22?3 [root@localhost?~]#?date?"+%Y年%m月%d日?%H:%M:%S?星期%w" 2014年11月20日?13:39:17?星期4 [root@localhost?~]#?date?-d?"-5?month"?"+%Y年%m月%d日?%H:%M:%S?星期%w" 2014年06月20日?13:41:12?星期5 [root@Monitor?~]#?date?-d?"yesterday"?+"%Y%m%d" 20150917 [root@Monitor?~]#?rm?-rf?`date?-d?"today"?+"%Y%m%d"` [root@Monitor?~]#?mkdir?`date?-d?"today"?+"%Y%m%d"` [root@localhost?home]#?touch?`date?+%Y%m%d` [root@localhost?home]#?touch?file`date?+%Y%m%d`
%Y表示年(注意%y和%Y的區(qū)別),%m表示月,%d表示日期,%H表示小時(shí),%M表示分鐘,%S表示秒,%w表示星期幾,-d?選項(xiàng)可以打印n天前或者n天后的日期,當(dāng)然也可以打印n個(gè)月/年前或者后的日期。
給定的格式FORMAT 控制著輸出
? %a ? ?當(dāng)前l(fā)ocale 的星期名縮寫(例如: 日,代表星期日)
? %A ? ?當(dāng)前l(fā)ocale 的星期名全稱 (如:星期日)
? %b ? ?當(dāng)前l(fā)ocale 的月名縮寫 (如:一,代表一月)
? %B ? ?當(dāng)前l(fā)ocale 的月名全稱 (如:一月)
? %c ? ?當(dāng)前l(fā)ocale 的日期和時(shí)間 (如:2005年3月3日 星期四 23:05:25)
? %C ? ?世紀(jì);比如 %Y,通常為省略當(dāng)前年份的后兩位數(shù)字(例如:20)
? %d ? ?按月計(jì)的日期(例如:01),不補(bǔ)0使用%-d
? %D ? ?按月計(jì)的日期;等于%m/%d/%y
? %e ? ?按月計(jì)的日期,添加空格,等于%_d
? %F ? ?完整日期格式,等價(jià)于 %Y-%m-%d
? %h ? ?等于%b
? %H ? ?小時(shí)(00-23)
? %I ? ?小時(shí)(00-12)
? %c ? ?按年計(jì)的日期(001-366)
? %k ? ?時(shí)(0-23)
? %l ? ?時(shí)(1-12)
? %m ? ?月份(01-12)
? %M ? ?分(00-59)
? %n ? ?換行
? %p ? ?當(dāng)前l(fā)ocale 下的"上午"或者"下午",未知時(shí)輸出為空
? %P ? ?與%p 類似,但是輸出小寫字母
? %r ? ?當(dāng)前l(fā)ocale 下的 12 小時(shí)時(shí)鐘時(shí)間 (如:11:11:04 下午)
? %R ? ?24 小時(shí)時(shí)間的時(shí)和分,等價(jià)于 %H:%M
? %s ? ?自UTC 時(shí)間 1970-01-01 00:00:00 以來(lái)所經(jīng)過(guò)的秒數(shù),時(shí)間戳
? %S ? ?秒(00-60)
? %t ? ?輸出制表符 Tab
? %T ? ?時(shí)間,等于%H:%M:%S
? %u ? ?星期,1 代表星期一
? %U ? ?一年中的第幾周,以周日為每星期第一天(00-53)
? %V ? ?ISO-8601 格式規(guī)范下的一年中第幾周,以周一為每星期第一天(01-53)
? %w ? ?一星期中的第幾日(0-6),0 代表周一
? %W ? ?一年中的第幾周,以周一為每星期第一天(00-53)
? %x ? ?當(dāng)前l(fā)ocale 下的日期描述 (如:12/31/99)
? %X ? ?當(dāng)前l(fā)ocale 下的時(shí)間描述 (如:23:13:48)
? %y ? ?年份最后兩位數(shù)位 (00-99)
? %Y ? ?年份
幾個(gè)日常比較常用的時(shí)間格式:
1. date +%A?? ??? ??? ?#顯示星期幾(英語(yǔ),如Sunday)
2. date +%B?? ??? ??? ?#顯示月份(英語(yǔ),如March)
3. date +%d?? ??? ??? ?#顯示目前是本月份第幾天
4. date +%F?? ??? ??? ?#顯示目前的年月日(格式如:2011-01-01)相當(dāng)于:date +%Y-%m-%d
5. date +%Y?? ??? ??? ?#顯示目前年
6. date +%m?? ??? ??? ?#顯示當(dāng)前是本年第幾個(gè)月
7. date +%H?? ??? ??? ?#示小時(shí)
8. date +%M?? ??? ??? ?#顯示分鐘
9.date? +%S?? ??? ??? ?#顯示秒數(shù)
10. date +%j?? ??? ?#本年第幾天(0-366)
11. date +%n?? ??? ?#換行
12. date +%t?? ??? ?#跳格
13. date +%T?? ??? ?#顯示24小時(shí)制時(shí)間,相當(dāng)于date +%H:%M:%S,所以要顯示標(biāo)準(zhǔn)日期和時(shí)間可以如此寫: date +%F%t%T
14. date +%Y-%m-%d --date="+1 day"?? 以" +%Y-%m-%d"格式顯示“本日+1天”以后的日期,可以推算年和月,如下:--date="-1 day"??? --date="-a year"?? --date="-1 month"
15. date +%Y-%m-%d --reference="/home/uncle_cat/shahuhu"?? 以"+%Y-%m-%d "的日期格式列出"/home/uncle_cat/shahuhu" 這個(gè)文件的最后修改日期。
16. date --set="2011-01-01 16:51:54" 設(shè)定目前的日期為"2011-01-01 16:51:54"? ----請(qǐng)注意,此權(quán)限只有root用戶才有,一般用戶沒(méi)有的
設(shè)定時(shí)間
date -s //設(shè)置當(dāng)前時(shí)間,只有root權(quán)限才能設(shè)置,其他只能查看。
date -s 20080523 //設(shè)置成20080523,這樣會(huì)把具體時(shí)間設(shè)置成空00:00:00
date -s 01:01:01 //設(shè)置具體時(shí)間,不會(huì)對(duì)日期做更改
date -s “01:01:01 2008-05-23″ //這樣可以設(shè)置全部時(shí)間
date -s “01:01:01 20080523″ //這樣可以設(shè)置全部時(shí)間
date -s “2008-05-23 01:01:01″ //這樣可以設(shè)置全部時(shí)間
date -s “20080523 01:01:01″ //這樣可以設(shè)置全部時(shí)間
加減
date +%Y%m%d???????? //顯示前天年月日
date +%Y%m%d --date="+1 day"? //顯示前一天的日期
date +%Y%m%d --date="-1 day"? //顯示后一天的日期
date +%Y%m%d --date="-1 month"? //顯示上一月的日期
date +%Y%m%d --date="+1 month"? //顯示下一月的日期
date +%Y%m%d --date="-1 year"? //顯示前一年的日期
date +%Y%m%d --date="+1 year"? //顯示下一年的日期
常用的日期獲取
date -d 'next monday' ?? ??? ?#下周一的日期
date -d? next-day +%Y%m%d?? ?#明天日期
date -d tomorrow +%Y%m%d ?? ?#明天日期
date -d last-day +%Y%m%d??? #昨天日期
date -d yesterday +%Y%m%d ?? ?#昨天日期
date -d last-month +%Y%m??? #上個(gè)月日期
date -d next-month +%Y%m??? #下個(gè)月日期
date -d next-year +%Y?????? #明年日期
date -d '2 weeks'?? ??? ??? ?#2周后
date -d '-2 weeks'?? ??? ??? ?#2周前
date -d "-1 weeks Nov 17, 2018"?? ??? ?#相對(duì)2018-11-17這個(gè)時(shí)間前一周的日期
時(shí)間戳轉(zhuǎn)換
[root@Super?~]#?date?-d?"2018-11-10"?+%s 1541779200 [root@Super?~]#
參數(shù)
-d<字符串>:顯示字符串所指的日期與時(shí)間。字符串前后必須加上雙引號(hào);?
-s<字符串>:根據(jù)字符串來(lái)設(shè)置日期與時(shí)間。字符串前后必須加上雙引號(hào);?
-u:顯示GMT;?
--help:在線幫助;?
--version:顯示版本信息。
[root@localhost?rename]#?date?-d?"1970-01-01?1234567890?seconds"?+"%Y-%m-%d?%H:%m:%S" 2009-02-13?23:02:30 [root@localhost?rename]#?date?-d?"2009-12-12"?+"%Y/%m/%d?%H:%M.%S" 2009/12/12?00:00.00 [root@localhost?rename]#?date?-d?"Dec?5,?2009?12:00:37?AM"?+"%Y-%m-%d?%H:%M.%S" 2009-12-05?00:00.37 [root@localhost?rename]#?date?-d?"Dec?5,?2009?12:00:37?AM?2?year?ago"?+"%Y-%m-%d?%H:%M.%S" 2007-12-05?00:00.37 [root@localhost?rename]#
設(shè)置系統(tǒng)所在的時(shí)區(qū)
[root@localhost?mpc-0.8.1]#?date?-R???#查看時(shí)區(qū) Sat,?22?Jul?2017?09:39:08?+0800 [root@localhost?mpc-0.8.1]#?more?/etc/sysconfig/clock?|grep?-v?"#"?#查看clock系統(tǒng)配置文件 ZONE="Asia/Shanghai" UTC=true ARC=false [root@localhost?mpc-0.8.1]#?tzselect? #復(fù)制相應(yīng)的時(shí)區(qū)文件,替換系統(tǒng)時(shí)區(qū)文件;或者創(chuàng)建鏈接文件 [root@localhost?mpc-0.8.1]#?cp?/usr/share/zoneinfo/Asia/Shanghai?/etc/localtime
tzselect命令只告訴你選擇的時(shí)區(qū)的寫法,并不會(huì)生效。所以現(xiàn)在它還不是東8區(qū)北京時(shí)間。你可以在.profile、.bash_profile或者/etc/profile中設(shè)置正確的TZ環(huán)境變量并導(dǎo)出。 例如在.bash_profile里面設(shè)置 TZ='Asia/Shanghai'; export TZ并使其生效。
[root@localhost?~]#?vim?/etc/profile TZ='Asia/Shanghai' export?TZ [root@localhost?~]#?source?/etc/profile
臨時(shí)修改系統(tǒng)時(shí)間
[root@localhost?remote]#?date Mon?Jan??2?12:34:11?CST?2017 [root@localhost?remote]#?date?-s?20161020 Thu?Oct?20?00:00:00?CST?2016 [root@localhost?remote]#?date?-s?10:23:14 Mon?Jan??2?10:23:14?CST?2017 [root@localhost?remote]#?date?-s?"20161020?10:23:14" Thu?Oct?20?10:23:14?CST?2016 [root@localhost?remote]#?date?-s?"10/21/2016?10:23:14" Fri?Oct?21?10:23:14?CST?2016 [root@localhost?remote]#
在系統(tǒng)啟動(dòng)時(shí),Linux操作系統(tǒng)將時(shí)間從CMOS中讀到系統(tǒng)時(shí)間變量中,以后修改時(shí)間通過(guò)修改系統(tǒng)時(shí)間實(shí)現(xiàn)。為了保持系統(tǒng)時(shí)間與CMOS時(shí)間的一致性,Linux每隔一段時(shí)間會(huì)將系統(tǒng)時(shí)間寫入CMOS。由于該同步是每隔一段時(shí)間(大約是11分鐘)進(jìn)行的,在我們執(zhí)行date -s后,如果馬上重起機(jī)器,修改時(shí)間就有可能沒(méi)有被寫入CMOS,這就是問(wèn)題的原因。
硬件時(shí)間的設(shè)置,可以用hwclock或者clock命令。其中,clock和hwclock用法相近,只用一個(gè)就行,只不過(guò)clock命令除了支持x86硬件體系外,還支持Alpha硬件體系。//查看硬件時(shí)間可以是用hwclock,hwclock --show 或者h(yuǎn)wclock -r
[root@localhost?remote]#?hwclock?--show Mon?02?Jan?2017?12:47:28?PM?CST??-0.232754?seconds [root@localhost?remote]#
系統(tǒng)時(shí)間和硬件時(shí)間的同步
以系統(tǒng)時(shí)間為基準(zhǔn),修改硬件時(shí)間
[root@localhost?remote]#?clock?-w
以硬件時(shí)間為基準(zhǔn),修改系統(tǒng)時(shí)間
[root@localhost?remote]#?hwclock?-s
hwclock參數(shù)可以通過(guò)--help獲取
[root@localhost?remote]#?hwclock?--help ??-r?|?--show?????????read?hardware?clock?and?print?result ???????--set??????????set?the?rtc?to?the?time?given?with?--date ??-s?|?--hctosys??????set?the?system?time?from?the?hardware?clock ??-w?|?--systohc??????set?the?hardware?clock?to?the?current?system?time ???????--systz????????set?the?system?time?based?on?the?current?timezone ???????--adjust???????adjust?the?rtc?to?account?for?systematic?drift?since ??????????????????????the?clock?was?last?set?or?adjusted
CST:中國(guó)標(biāo)準(zhǔn)時(shí)間(China Standard Time),這個(gè)解釋可能是針對(duì)RedHat Linux。
UTC:協(xié)調(diào)世界時(shí),又稱世界標(biāo)準(zhǔn)時(shí)間,簡(jiǎn)稱UTC,從英文國(guó)際時(shí)間/法文協(xié)調(diào)時(shí)間“Universal Time/Temps Cordonné”而來(lái)。
[root@localhost?~]#?cal ??????July?2017????? Su?Mo?Tu?We?Th?Fr?Sa ???????????????????1 ?2??3??4??5??6??7??8 ?9?10?11?12?13?14?15 16?17?18?19?20?21?22 23?24?25?26?27?28?29 30?31 [root@localhost?~]#
su、sudo命令
su命令是一個(gè)切換用戶的工具,將普通用戶切換到超級(jí)用戶下,也可以從超級(jí)用戶切換到普通用戶;
sudo被稱為受限制的su,也被稱為授權(quán)認(rèn)證的su。他是允許系統(tǒng)管理員分配給普通用戶一些合理的“權(quán)利”,并且不需要普通用戶知道超級(jí)用戶密碼,就能讓他們執(zhí)行一些只有超級(jí)用戶或其他特許用戶才能完成的任務(wù),sudo執(zhí)行命令的流程是:將當(dāng)前用戶切換到超級(jí)用戶下,或切換到指定的用戶下,然后以超級(jí)用戶或其指定切換到的用戶身份執(zhí)行命令,執(zhí)行完成后,直接退回到當(dāng)前用戶,而這一切的完成要通過(guò)sudo的配置文件/etc/sudoers來(lái)進(jìn)行授權(quán)。sudo都提供了一個(gè)編輯該文件的命令:visudo來(lái)對(duì)該文件進(jìn)行修改。強(qiáng)烈推薦使用該命令修改sudoers。因?yàn)樗鼤?huì)幫你校驗(yàn)文件配置是否正確,如果不正確,在保存退出時(shí)就會(huì)提示你哪段配置出錯(cuò)的。?
例如:普通用戶justin對(duì)/etc/shadow沒(méi)有訪問(wèn)權(quán)限
[justin@localhost?~]$?cat?/etc/shadow cat:?/etc/shadow:?權(quán)限不夠 [justin@localhost?~]$?who?am?i justin???pts/1????????2014-11-18?04:41?(10.15.24.142) [justin@localhost?~]$
執(zhí)行visudo之后,可以看見(jiàn)缺省只有一條root的配置,我們?cè)谄鹣旅婕右粭ljutsin對(duì)/etc/shadow有訪問(wèn)的權(quán)限:
[root@localhost?root]#?visudo? ?97?##?Allow?root?to?run?any?commands?anywhere ?98?root????ALL=(ALL)???????ALL ?99?justin??ALL=?/bin/cat?/etc/shadow? ?[root@localhost?root]#?su?-?justin [justin@localhost?~]$?sudo?cat?/etc/shadow [sudo]?password?for?justin:
執(zhí)行這個(gè)命令后,需要輸入justin用戶的密碼,然后就可訪問(wèn)文件內(nèi)容了。在這里sudo使用時(shí)間戳文件來(lái)完成類似“檢票”的系統(tǒng),當(dāng)用戶輸入密碼后就獲得了一張默認(rèn)存活期為5分鐘的“入場(chǎng)券”(默認(rèn)值可以在編譯的時(shí)候改變)。超時(shí)以后,用戶必須重新輸入密碼才能查看文件內(nèi)容。
如果每次都需要輸入密碼,那么某些自動(dòng)調(diào)用超級(jí)權(quán)限的程序就會(huì)出現(xiàn)問(wèn)題,此時(shí)可以通過(guò)下面的設(shè)置,讓普通用戶無(wú)需輸入密碼即可執(zhí)行具有超級(jí)權(quán)限的程序。
justin??ALL=?NOPASSWD:?/bin/cat?/etc/shadow
如果要讓一個(gè)普通用戶justin具有超級(jí)用戶的所有權(quán)限,而又不想輸入超級(jí)用戶的密碼:
#justin??ALL=?NOPASSWD:?/bin/cat?/etc/shadow justin??ALL=(ALL)?NOPASSWD:?ALL
history---查看歷史記錄
在Linux下可通過(guò)history命令查看用戶所有的歷史操作記錄,同時(shí)shell命令操作記錄默認(rèn)保存在用戶目錄下的.bash_history文件中,通過(guò)這個(gè)文件可以查詢shell命令的執(zhí)行歷史,
#列出最近執(zhí)行過(guò)的3條歷史命令 [root@localhost?~]#?history?3 15?wc?/etc/resolv.conf 16?wc?-l?/etc/passwd 17?history?3
在每一個(gè)執(zhí)行過(guò)的shell命令行前均有一個(gè)編號(hào),代表其在歷史列表中的序號(hào)。如果想重新執(zhí)行其中某一條命令,可以采用“!序號(hào)”的格式。如“!16”就表示把第16條歷史命令重新執(zhí)行一遍。!!?(連續(xù)兩個(gè)”!”),表示執(zhí)行上一條指令;!字符串(字符串大于等于1),例如!ta,表示執(zhí)行命令歷史中最近一次以ta為開(kāi)頭的指令。
[root@localhost?~]#?!16 wc?-l?/etc/passwd 35?/etc/passwd
默認(rèn)的history命令只能查看用戶歷史操作記錄,并不能區(qū)分每個(gè)用戶操作命令的時(shí)間,通過(guò)在/etc/bashrc文末加入以下四行內(nèi)容讓history命令自動(dòng)記錄所有shell命令的執(zhí)行時(shí)間:
[root@localhost?~]#?history|tail?-5 ???89??history?|tail? ???90??history?|tail?-5 ???91??exit ???92??date ???93??history|tail?-5 [root@localhost?~]#?vim?/etc/bashrc? ?89?#HISTSIZE定義了history命令輸出的記錄總數(shù) ?90?export?HISTSIZE=4000 ?91?#HISTTIMEFORMAT定義時(shí)間顯示格式,這里的格式與date命令后的“+"%F?%T"”是一致的的,HISTTIMEFORMA????作為history的時(shí)間變量將值傳遞給history命令 ?92?export?HISTTIMEFORMAT='%F?%T?`whoami`' :set?nu?? [root@localhost?~]#?source?/etc/bashrc? [root@localhost?~]#?history|tail?-5 ???94??2014-11-18?04:16:11vim?/etc/bashrc? ???95??2014-11-18?04:21:48history|tail?-5 ???96??2014-11-18?04:22:03source?/etc/bash ???97??2014-11-18?04:22:06source?/etc/bashrc? ???98??2014-11-18?04:22:10history|tail?-5 [root@localhost?~]#?date 2014年?11月?18日?星期二?04:22:17?CST [root@localhost?~]#
為了確保服務(wù)器的安全,可以實(shí)現(xiàn)詳細(xì)記錄登錄過(guò)系統(tǒng)的用戶、IP地址、shell命令以及詳細(xì)操作時(shí)間等,并將這些信息以文件的形式保存在一個(gè)安全的地方
將下面這段代碼添加到/etc/profile文件末尾中,即可實(shí)現(xiàn)上述功能
[root@localhost?~]#?vim?/etc/profile 79?#history ?80?USER_IP=`who?-u?am?i?2>/dev/null|?awk?'{print?$NF}'|sed?-e?'s/[()]//g'` ?81?HISTDIR=/usr/share/.history ?82?if?[?-z?$USER_IP?] ?83?then ?84?USER_IP=`hostname` ?85?fi ?86?if?[?!?-d?$HISTDIR?] ?87?then ?88?mkdir?-p?$HISTDIR ?89?chmod?777?$HISTDIR ?90?fi ?91?if?[?!?-d?$HISTDIR/${LOGNAME}?] ?92?then ?93?mkdir?-p?$HISTDIR/${LOGNAME} ?94?chmod?300?$HISTDIR/${LOGNAME} ?95?fi ?96?export?HISTSIZE=4000 ?97?DT=`date?+%Y%m%d_%H%M%S` ?98?export?HISTFILE="$HISTDIR/${LOGNAME}/${USER_IP}.history.$DT" ?99?export?HISTTIMEFORMAT="[%Y.%m.%d?%H:%M:%S]" 100?chmod?600?$HISTDIR/${LOGNAME}/*.history*?2>/dev/null :wq? [root@localhost?~]#?source?/etc/profile [root@host16?~]#?tail?-3?/etc/bashrc? #?vim:ts=4:sw=4 export?HISTSIZE=4000 export?HISTTIMEFORMAT="%F?%T?`whoami`?`who?-u?am?i|awk?'{print?$NF}'|sed?'s/[()]//g'`?" [root@host16?~]#
這段代碼將每個(gè)用戶的shell命令執(zhí)行歷史以文件的形式保存在/usr/share/.history目錄中,每個(gè)用戶一個(gè)文件夾,并且文件夾下的每個(gè)文件以IP地址加shell命令操作時(shí)間的格式命名。下面是user01用戶執(zhí)行shell命令的歷史記錄文件,保存歷史命令的文件夾目錄要盡量隱蔽,避免被***發(fā)現(xiàn)后刪除。基本效果如下:
[root@localhost?~]#?cd?/usr/share/.history/ [root@localhost?.history]#?ll 總用量?8 d-wx------?2?justin?justin?4096?11月?18?04:36?justin d-wx------?2?root???root???4096?11月?18?04:36?root [root@localhost?.history]#?cd?justin/ [root@localhost?justin]#?ls?-la 總用量?12 d-wx------?2?justin?justin?4096?11月?18?04:36?. drwxrwxrwx?4?root???root???4096?11月?18?04:33?.. -rw-------?1?justin?justin???79?11月?18?04:36?10.15.24.142.history.20141118_043321 [root@localhost?justin]#?cat?10.15.24.142.history.20141118_043321? #1416256413 echo?$LANG #1416256445 cat?/proc/cpuinfo?|grep?ml|grep?flags|wc?-l [root@localhost?justin]#?cd?../root/ [root@localhost?root]#?ls?-al 總用量?12 d-wx------?2?root?root?4096?11月?18?04:36?. drwxrwxrwx?4?root?root?4096?11月?18?04:33?.. -rw-------?1?root?root??577?11月?18?04:36?10.15.24.142.history.20141118_043037 [root@localhost?root]#?cat?10.15.24.142.history.20141118_043037? #1416255336 date #1416255351 history|tail?-5 #1416255371 vim?/etc/bashrc? #1416255708 history|tail?-5 #1416255723 source?/etc/bash
shutdown---關(guān)閉或重啟系統(tǒng)
-r : 關(guān)機(jī)后重新開(kāi)機(jī)
-h : 關(guān)機(jī)后停機(jī)
-t seconds : 設(shè)定在幾秒鐘之后進(jìn)行關(guān)機(jī)程序
-c : 取消目前已經(jīng)進(jìn)行中的關(guān)機(jī)動(dòng)作
-f : 關(guān)機(jī)時(shí),不做 fcsk 動(dòng)作(檢查 Linux 檔系統(tǒng))
-F : 關(guān)機(jī)時(shí),強(qiáng)迫進(jìn)行 fsck 動(dòng)作
#使用shutdown命令馬上重啟系統(tǒng) [root@localhost?~]#?shutdown?–r?now??????????????????????????????? #使用shutdown命令馬上關(guān)閉系統(tǒng) [root@localhost?~]#?shutdown?–h?now??????????????????????????????? #使用shutdown命令設(shè)置在15分鐘以后自動(dòng)重啟系統(tǒng) [root@localhost?~]#?shutdown?–r?+15
說(shuō)明:
halt:馬上關(guān)閉系統(tǒng)
reboot:馬上重啟系統(tǒng)。
“init 0”:關(guān)閉系統(tǒng)
“init 6”:重啟系統(tǒng)
重定向
說(shuō)明:Linux系統(tǒng)中標(biāo)準(zhǔn)的輸入設(shè)備為鍵盤,標(biāo)準(zhǔn)輸出設(shè)備為屏幕,但在某些情況下,我們希望能從鍵盤以外的其他輸入設(shè)備讀取數(shù)據(jù),或者將數(shù)據(jù)送到屏幕外的其他輸出設(shè)備,這種情況稱為重定向。Shell中輸入輸出重定向主要依靠重定向符號(hào)來(lái)實(shí)現(xiàn),重定向的目標(biāo)通常是一個(gè)文件。
輸入重定向:輸入重定向就是將命令中接收輸入的途徑由默認(rèn)的鍵盤重定向?yàn)橹付ǖ奈募?,需要使用?lt;”重定向操作符。如命令“wc < f1”就表示將f1文件的信息作為wc命令的輸入。
輸出重定向:輸出重定向是將命令的輸出結(jié)果重定向到一個(gè)文件中,而不是顯示在屏幕上。輸出重定向使用“>”或“>>”操作符,分別用于覆蓋、追加文件。“>”重定向符后面指定的文件如果不存在,在命令執(zhí)行中將建立該文件,并保存命令結(jié)果到文件中?!?gt;”重定向符后面指定的文件如果存在,命令執(zhí)行時(shí)將清空文件的內(nèi)容并保存命令結(jié)果到文件中。
#查看/etc/passwd文件的內(nèi)容,并將輸出結(jié)果保存到pass.txt文件中。 [root@localhost?~]#?cat?/etc/passwd?>?pass.txt
執(zhí)行該命令后,會(huì)在當(dāng)前目錄下生成一個(gè)名為pass.txt的文件,文件中的內(nèi)容就是“cat /etc/passwd”命令執(zhí)行的結(jié)果。
“>>”重定向操作符可以將命令執(zhí)行的結(jié)果重定向并追加到指定文件的末尾保存,而不覆蓋文件中原有的內(nèi)容。
#查看/etc/shadow文件的后3行內(nèi)容,并將輸出結(jié)果追加保存到pass.txt文件中。 [root@localhost?~]#?tail?-3?/etc/shadow?>>?pass.txt
使用重定向就不會(huì)輸出到屏幕,如果想同時(shí)輸出到屏幕和重定向到指定文件可以使用tee命令,
[root@localhost?test]#?tail?-5?/etc/passwd|tee?tee.txt rpcuser:x:29:29:RPC?Service?User:/var/lib/nfs:/sbin/nologin nfsnobody:x:65534:65534:Anonymous?NFS?User:/var/lib/nfs:/sbin/nologin gdm:x:42:42::/var/lib/gdm:/sbin/nologin sshd:x:74:74:Privilege-separated?SSH:/var/empty/sshd:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin? [root@localhost?test]#?cat?tee.txt? rpcuser:x:29:29:RPC?Service?User:/var/lib/nfs:/sbin/nologin nfsnobody:x:65534:65534:Anonymous?NFS?User:/var/lib/nfs:/sbin/nologin gdm:x:42:42::/var/lib/gdm:/sbin/nologin sshd:x:74:74:Privilege-separated?SSH:/var/empty/sshd:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin [root@localhost?test]#
tee--重定向到文件并打印到屏幕
[root@localhost?dir1]#?cat?/proc/cpuinfo?|grep?flags|grep?lm|wc?-l|tee?-a?cpuinfo.txt 2 [root@localhost?dir1]#?cat?cpuinfo.txt? 2 [root@localhost?dir1]#
默認(rèn)tee為疊加,參數(shù)-a為追加
tr?:
替換字符,常用來(lái)處理文檔中出現(xiàn)的特殊符號(hào),如DOS文檔中出現(xiàn)的^M符號(hào)。常用的選項(xiàng)有兩個(gè):
-d?:刪除某個(gè)字符,-d?后面跟要?jiǎng)h除的字符
-s?:把重復(fù)的字符去掉
[root@localhost?test]#?cat?/etc/passwd|grep?^root root:x:0:0:root:/root:/bin/bash [root@localhost?test]#?cat?/etc/passwd|grep?^root|tr?'[a-z]'?'[A-Z]' ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH [root@localhost?test]#
wget
-O –output-document=FILE下載文件保存為別的文件名
[root@localhost?~]#?wget?-O?rinetd1.tar.gz?http://www.boutell.com/rinetd/http/rinetd.tar.gz
-c 斷點(diǎn)續(xù)傳
[root@localhost?~]#?wget?-cO?rinetd1.tar.gz
–limit -rate限速下載?
[root@localhost?~]#?wget?–limit-rate=300k?http://cn.wordpress.org/wordpress-3.1-zh_CN.zip
-b后臺(tái)下載?
–spider測(cè)試下載鏈接?
如果下載鏈接正確,將會(huì)顯示?
wget?–spider?URL? Spider?mode?enabled.?Check?if?remote?file?exists.? HTTP?request?sent,?awaiting?response…?200?OK? Length:?unspecified?[text/html]? Remote?file?exists?and?could?contain?further?links,? but?recursion?is?disabled?—?not?retrieving.
但當(dāng)你給錯(cuò)了一個(gè)鏈接,將會(huì)顯示如下錯(cuò)誤?
wget?–spider?url? Spider?mode?enabled.?Check?if?remote?file?exists.? HTTP?request?sent,?awaiting?response…?404?Not?Found? Remote?file?does?not?exist?—?broken?link!!!
使用spider參數(shù)可以
定時(shí)下載之前進(jìn)行檢查?
間隔檢測(cè)網(wǎng)站是否可用?
檢查網(wǎng)站頁(yè)面的死鏈接?
–tries增加重試次數(shù)?
wget –tries=40 URL?
-i下載多個(gè)文件?
[root@localhost?~]#?cat?>?filelist.txt? url1? url2? url3? url4? [root@localhost?~]#?wget?-i?filelist.txt? [root@localhost?~]#
–mirror鏡像網(wǎng)站?
wget –mirror -p –convert-links -P ./LOCAL URL?
–miror:開(kāi)戶鏡像下載?
-p:下載所有為了html頁(yè)面顯示正常的文件?
–convert-links:下載后,轉(zhuǎn)換成本地的鏈接?
-P ./LOCAL:保存所有文件和目錄到本地指定目錄?
–reject過(guò)濾指定格式下載?
wget –reject=gif url?
-o把下載信息存入日志文件?
wget -o download.log URL?
-Q限制總下載文件大小?
wget -Q5m -i filelist.txt ? 下載的文件超過(guò)5M而退出下載
這個(gè)參數(shù)對(duì)單個(gè)文件下載不起作用,只能遞歸下載時(shí)才有效
-r -A下載指定格式文件?
wget -r -A.pdf url ??載一個(gè)網(wǎng)站的所有PDF文件?
?
FTP下載?
wget –ftp-user=USERNAME –ftp-password=PASSWORD url
啟動(dòng)參數(shù):
-V, –version 顯示wget的版本后退出
-h, –help 打印語(yǔ)法幫助
-b, –background 啟動(dòng)后轉(zhuǎn)入后臺(tái)執(zhí)行
-e, –execute=COMMAND 執(zhí)行`.wgetrc’格式的命令,wgetrc格式參見(jiàn)/etc/wgetrc或~/.wgetrc
記錄和輸入文件參數(shù):
-o, –output-file=FILE 把記錄寫到FILE文件中
-a, –append-output=FILE 把記錄追加到FILE文件中
-d, –debug 打印調(diào)試輸出
-q, –quiet 安靜模式(沒(méi)有輸出)
-v, –verbose 冗長(zhǎng)模式(這是缺省設(shè)置)
-nv, –non-verbose 關(guān)掉冗長(zhǎng)模式,但不是安靜模式
-i, –input-file=FILE 下載在FILE文件中出現(xiàn)的URLs
-F, –force-html 把輸入文件當(dāng)作HTML格式文件對(duì)待
-B, –base=URL 將URL作為在-F -i參數(shù)指定的文件中出現(xiàn)的相對(duì)鏈接的前綴
–sslcertfile=FILE 可選客戶端證書(shū)
–sslcertkey=KEYFILE 可選客戶端證書(shū)的KEYFILE
–egd-file=FILE 指定EGD socket的文件名
下載參數(shù):
–bind-address=ADDRESS 指定本地使用地址(主機(jī)名或IP,當(dāng)本地有多個(gè)IP或名字時(shí)使用)
-t, –tries=NUMBER 設(shè)定最大嘗試鏈接次數(shù)(0 表示無(wú)限制).
-O –output-document=FILE 把文檔寫到FILE文件中
-nc, –no-clobber 不要覆蓋存在的文件或使用.#前綴
-c, –continue 接著下載沒(méi)下載完的文件
–progress=TYPE 設(shè)定進(jìn)程條標(biāo)記
-N, –timestamping 不要重新下載文件除非比本地文件新
-S, –server-response 打印服務(wù)器的回應(yīng)
–spider 不下載任何東西
-T, –timeout=SECONDS 設(shè)定響應(yīng)超時(shí)的秒數(shù)
-w, –wait=SECONDS 兩次嘗試之間間隔SECONDS秒
–waitretry=SECONDS 在重新鏈接之間等待1…SECONDS秒
–random-wait 在下載之間等待0…2*WAIT秒
-Y, –proxy=on/off 打開(kāi)或關(guān)閉代理
-Q, –quota=NUMBER 設(shè)置下載的容量限制
–limit-rate=RATE 限定下載輸率
目錄參數(shù):
-nd –no-directories 不創(chuàng)建目錄
-x, –force-directories 強(qiáng)制創(chuàng)建目錄
-nH, –no-host-directories 不創(chuàng)建主機(jī)目錄
-P, –directory-prefix=PREFIX 將文件保存到目錄 PREFIX/…
–cut-dirs=NUMBER 忽略 NUMBER層遠(yuǎn)程目錄
HTTP 選項(xiàng)參數(shù):
–http-user=USER 設(shè)定HTTP用戶名為 USER.
–http-passwd=PASS 設(shè)定http密碼為 PASS
-C, –cache=on/off 允許/不允許服務(wù)器端的數(shù)據(jù)緩存 (一般情況下允許)
-E, –html-extension 將所有text/html文檔以.html擴(kuò)展名保存
–ignore-length 忽略 `Content-Length’頭域
–header=STRING 在headers中插入字符串 STRING
–proxy-user=USER 設(shè)定代理的用戶名為 USER
–proxy-passwd=PASS 設(shè)定代理的密碼為 PASS
–referer=URL 在HTTP請(qǐng)求中包含 `Referer: URL’頭
-s, –save-headers 保存HTTP頭到文件
-U, –user-agent=AGENT 設(shè)定代理的名稱為 AGENT而不是 Wget/VERSION
–no-http-keep-alive 關(guān)閉 HTTP活動(dòng)鏈接 (永遠(yuǎn)鏈接)
–cookies=off 不使用 cookies
–load-cookies=FILE 在開(kāi)始會(huì)話前從文件 FILE中加載cookie
–save-cookies=FILE 在會(huì)話結(jié)束后將 cookies保存到 FILE文件中
FTP 選項(xiàng)參數(shù):
-nr, –dont-remove-listing 不移走 `.listing’文件
-g, –glob=on/off 打開(kāi)或關(guān)閉文件名的 globbing機(jī)制
–passive-ftp 使用被動(dòng)傳輸模式 (缺省值).
–active-ftp 使用主動(dòng)傳輸模式
–retr-symlinks 在遞歸的時(shí)候,將鏈接指向文件(而不是目錄)
遞歸下載參數(shù):
-r, –recursive 遞歸下載--慎用!
-l, –level=NUMBER 最大遞歸深度 (inf 或 0 代表無(wú)窮)
–delete-after 在現(xiàn)在完畢后局部刪除文件
-k, –convert-links 轉(zhuǎn)換非相對(duì)鏈接為相對(duì)鏈接
-K, –backup-converted 在轉(zhuǎn)換文件X之前,將之備份為 X.orig
-m, –mirror 等價(jià)于 -r -N -l inf -nr
-p, –page-requisites 下載顯示HTML文件的所有圖片
遞歸下載中的包含和不包含(accept/reject):
-A, –accept=LIST 分號(hào)分隔的被接受擴(kuò)展名的列表
-R, –reject=LIST 分號(hào)分隔的不被接受的擴(kuò)展名的列表
-D, –domains=LIST 分號(hào)分隔的被接受域的列表
–exclude-domains=LIST 分號(hào)分隔的不被接受的域的列表
–follow-ftp 跟蹤HTML文檔中的FTP鏈接
–follow-tags=LIST 分號(hào)分隔的被跟蹤的HTML標(biāo)簽的列表
-G, –ignore-tags=LIST 分號(hào)分隔的被忽略的HTML標(biāo)簽的列表
-H, –span-hosts 當(dāng)遞歸時(shí)轉(zhuǎn)到外部主機(jī)
-L, –relative 僅僅跟蹤相對(duì)鏈接
-I, –include-directories=LIST 允許目錄的列表
-X, –exclude-directories=LIST 不被包含目錄的列表
-np, –no-parent 不要追溯到父目錄
wget -S –spider url 不下載只顯示過(guò)程
| ? ? 管道
說(shuō)明:管道符“|”用于連接左右兩個(gè)命令,將“|”左邊命令的執(zhí)行結(jié)果作為“|”右邊命令的輸入,這樣“|”就像一根管道一樣連接著左右兩條命令,并在管道中實(shí)現(xiàn)數(shù)據(jù)從左至右的傳輸。默認(rèn)從管道傳來(lái)的值是放在最后的
#分頁(yè)顯示/etc目錄下所有文件和子目錄的詳細(xì)信息。 [root@localhost?~]#?ls?-lh?/etc?|?more #顯示/etc目錄下包含有“net”關(guān)鍵字的所有文件和子目錄的詳細(xì)信息。 [root@localhost?~]#?ls?-lh?/etc?|?grep?net ?-rwxr-xr-x.?1?root?root?1.3K?4月?10?2012?auto.net ?-rw-r--r--.?1?root?root???74?5月?31?2012?issue.net ?-rw-r--r--.?1?root?root?767?11月?30?2009?netconfig ?-rw-r--r--.?1?root?root???58?5月?23?2012?networks ?drwxr-xr-x.?2?root?root?4.0K?1月???8?19:14?xinetd.d #統(tǒng)計(jì)一下/etc目錄下所有以“.conf”結(jié)尾的文件的個(gè)數(shù)。 [root@localhost?~]#?ls?-l?/etc/*.conf?|?wc?–l ?44???????????? #查看/etc/httpd/conf/httpd.conf文件中除了以“#”開(kāi)頭的行和空行以外的內(nèi)容。 [root@localhost?~]#?grep?-v?“^#”?/etc/httpd/conf/httpd.conf?|?gerp?–v?“^$”
&&
&&前面的命令成功執(zhí)行后才能執(zhí)行后面的命令,前面命令失敗則停止
[root@localhost?~]#?date?&&?printf?"The?date?command?was?succussful" 2013年?09月?23日?星期一?16:53:54?CST The?date?command?was?succussful [root@localhost?~]#?data?&&?printf?"The?date?command?was?succussful" -bash:?data:?command?not?found [root@localhost?~]#
||
有命令成功執(zhí)行則停止執(zhí)行后續(xù)命令,即使后續(xù)命令正確
[root@localhost?~]#?date?||?ls?-l 2013年?09月?23日?星期一?16:59:44?CST [root@localhost?~]#?date?&&?ls?-l 2013年?09月?23日?星期一?16:59:50?CST 總用量?96 -rw-------.?1?root?root??1357?9月??18?15:58?anaconda-ks.cfg -rw-r--r--.?1?root?root?43294?9月??18?15:58?install.log -rw-r--r--.?1?root?root?10151?9月??18?15:55?install.log.syslog lrwxrwxrwx.?1?root?root????41?9月??23?15:55?wk?->?/etc/sysconfig/network-scripts/ifcfg-eth0 drwxr-xr-x.?2?root?root??4096?9月??22?14:22?公共的 drwxr-xr-x.?2?root?root??4096?9月??22?14:22?模板 drwxr-xr-x.?2?root?root??4096?9月??22?14:22?視頻 drwxr-xr-x.?2?root?root??4096?9月??22?14:22?圖片 drwxr-xr-x.?2?root?root??4096?9月??22?14:22?文檔 drwxr-xr-x.?2?root?root??4096?9月??22?14:22?下載 drwxr-xr-x.?2?root?root??4096?9月??22?14:22?音樂(lè) drwxr-xr-x.?2?root?root??4096?9月??22?14:22?桌面 [root@localhost?~]#
;??分號(hào)
平時(shí)我們都是在一行中敲一個(gè)命令,然后回車就運(yùn)行了,那么想在一行中運(yùn)行兩個(gè)或兩個(gè)以上的命令如何呢?則需要在命令之間加一個(gè)”;”了。
[root@localhost?test]#?echo?3444?>?1.txt?;cat?1.txt;ll?1.txt? 3444 -rw-r--r--?1?root?root?5?Nov??6?09:17?1.txt [root@localhost?test]#
& ?命令掛起;
把一條命令放到后臺(tái)執(zhí)行的話,則需要加上這個(gè)符號(hào)。通常用于命令運(yùn)行時(shí)間非常長(zhǎng)的情況。使用jobs可以查看當(dāng)前shell中后臺(tái)執(zhí)行的任務(wù)。用fg可以調(diào)到前臺(tái)執(zhí)行。這里的sleep命令就是休眠的意思,后面跟數(shù)字,單位為秒,想要把任務(wù)調(diào)到前臺(tái)執(zhí)行的話,fg后面跟任務(wù)號(hào),任務(wù)號(hào)可以使用jobs命令得到。
[root@localhost?test]#?sleep?100?& [1]?15556 [root@localhost?test]#?jobs [1]+??Running?????????????????sleep?100?& [root@localhost?test]#?fg?1 sleep?100
后臺(tái)作業(yè)管理
[root@localhost?rsync_server]#?jobs????#查看后臺(tái)作業(yè) [1]-??Running?????????????????nohup?/bin/sh?/app/inotify/rsync.sh?>?/app/inotify/nohup.out?2>&1?& [2]+??Running?????????????????nohup?/bin/sh?/app/inotify/rsync.sh?& [root@localhost?rsync_server]#?fg?2????#將后臺(tái)作業(yè)2跳到前臺(tái) nohup?/bin/sh?/app/inotify/rsync.sh ^Z????????????????????????????????????????#ctrl+z?將當(dāng)前作業(yè)放到后臺(tái)“暫?!?[2]+??Stopped?????????????????nohup?/bin/sh?/app/inotify/rsync.sh [root@localhost?rsync_server]#?jobs [1]-??Running?????????????????nohup?/bin/sh?/app/inotify/rsync.sh?>?/app/inotify/nohup.out?2>&1?& [2]+??Stopped?????????????????nohup?/bin/sh?/app/inotify/rsync.sh [root@localhost?rsync_server]#?jobs?-l????#列出作業(yè)PID [1]-?17938?Running?????????????????nohup?/bin/sh?/app/inotify/rsync.sh?>?/app/inotify/nohup.out?2>&1?& [2]+?18231?Stopped?????????????????nohup?/bin/sh?/app/inotify/rsync.sh [root@localhost?rsync_server]#?jobs?-r????#列出僅在后臺(tái)運(yùn)行(run)的作業(yè) [1]-??Running?????????????????nohup?/bin/sh?/app/inotify/rsync.sh?>?/app/inotify/nohup.out?2>&1?& [root@localhost?rsync_server]#?jobs?-s????#列出僅在后臺(tái)暫停的作業(yè) [2]+??Stopped?????????????????nohup?/bin/sh?/app/inotify/rsync.sh [root@localhost?rsync_server]#?bg?2?#ctrl+z讓當(dāng)前作業(yè)到后臺(tái)去暫停,bg?作業(yè)號(hào)就可以在后臺(tái)run [2]+?nohup?/bin/sh?/app/inotify/rsync.sh?& [root@localhost?rsync_server]#?jobs?-l [1]-?17938?Running?????????????????nohup?/bin/sh?/app/inotify/rsync.sh?>?/app/inotify/nohup.out?2>&1?& [2]+?18231?Running?????????????????nohup?/bin/sh?/app/inotify/rsync.sh?& [root@localhost?rsync_server]#?kill?-9?%2 [root@localhost?rsync_server]#?jobs?-l [1]-?17938?Running?????????????????nohup?/bin/sh?/app/inotify/rsync.sh?>?/app/inotify/nohup.out?2>&1?& [2]+?18231?Killed??????????????????nohup?/bin/sh?/app/inotify/rsync.sh [root@localhost?rsync_server]#
sleep: ??將目前動(dòng)作延遲一段時(shí)間
sleep [--help] [--version] number[smhd]
其中 s 為秒,m 為 分鐘,h 為小時(shí),d 為日數(shù),默認(rèn)是秒
顯示目前時(shí)間后延遲 1 分鐘,之后再次顯示時(shí)間 :?
[root@localhost?~]#?date;sleep?10;date Wed?Nov?12?01:43:47?CST?2014 Wed?Nov?12?01:43:57?CST?2014 [root@localhost?~]#
nohup?不掛斷地運(yùn)行命令
Unix/Linux下多程序并不象mysqld一樣做成守護(hù)進(jìn)程,可能我們的程序只是普通程序而已,一般這種程序使用& 結(jié)尾,但是如果終端關(guān)閉,那么程序也會(huì)被關(guān)閉。但是為了能夠后臺(tái)運(yùn)行,那么我們就可以使用nohup和&命令,
語(yǔ)法:
????nohup Command [ Arg ... ] [ & ]
? ?eg、nohup ./filetransserver64 1>/dev/null 2>&1 &
提示:
[~]$ appending output to nohup.out
證明運(yùn)行成功,同時(shí)把程序運(yùn)行的輸出信息放到當(dāng)前目錄的nohup.out 文件中去。
描述:
????nohup 命令運(yùn)行由Command 參數(shù)和任何相關(guān)的Arg 參數(shù)指定的命令,忽略所有掛斷(SIGHUP)信號(hào)。在注銷后使用nohup 命令運(yùn)行后臺(tái)中的程序。要運(yùn)行后臺(tái)中的nohup 命令,添加& ( 表示“and”的符號(hào))到命令的尾部。
注意:
????在當(dāng)shell中提示了nohup成功后,還需要按終端上鍵盤任意鍵退回到shell輸入命令窗口,然后通過(guò)在shell中輸入exit來(lái)退出終端;如果在nohup執(zhí)行成功后直接點(diǎn)關(guān)閉程序按鈕關(guān)閉終端的話,這時(shí)候會(huì)斷掉該命令所對(duì)應(yīng)的session,導(dǎo)致nohup對(duì)應(yīng)的進(jìn)程被通知需要一起shutdown,起不到關(guān)掉終端后調(diào)用程序繼續(xù)后臺(tái)運(yùn)行的作用。
1>/dev/null 2>&1的含義
shell中經(jīng)常會(huì)用到這個(gè)命令。
1>/dev/null 首先表示標(biāo)準(zhǔn)輸出重定向到空設(shè)備文件,也就是不輸出任何信息到終端,說(shuō)白了就是不顯示任何信息。
2>&1 接著,標(biāo)準(zhǔn)錯(cuò)誤輸出重定向等同于 標(biāo)準(zhǔn)輸出,因?yàn)橹皹?biāo)準(zhǔn)輸出已經(jīng)重定向到了空設(shè)備文件,所以標(biāo)準(zhǔn)錯(cuò)誤輸出也重定向到空設(shè)備文件。
/dev/null 代表空設(shè)備文件
> 代表重定向到哪里
在shell中,每個(gè)進(jìn)程都和三個(gè)系統(tǒng)文件 相關(guān)聯(lián):標(biāo)準(zhǔn)輸入stdin,標(biāo)準(zhǔn)輸出stdout、標(biāo)準(zhǔn)錯(cuò)誤stderr,三個(gè)系統(tǒng)文件的文件描述符分別為0,1、2。
1 表示stdout標(biāo)準(zhǔn)輸出,系統(tǒng)默認(rèn)值是1,所以">/dev/null"等同于"1>/dev/null"
2 表示stderr標(biāo)準(zhǔn)錯(cuò)誤
0 是標(biāo)準(zhǔn)輸入,一般是鍵盤
& 表示等同于的意思,2>&1,表示2的輸出重定向等同于1
nohup ./filetransserver64 1>/dev/null 2>&1 & ?與?nohup ./filetransserver64 1>/dev/null 2>/dev/null &區(qū)別
nohup ./filetransserver64 1>/dev/null 2>&1 &?只使用了一個(gè)管道FD1,但已經(jīng)包括了stdout和stderr。
nohup ./filetransserver64 1>/dev/null 2>/dev/null?相當(dāng)于使用了FD1、FD2兩個(gè)互相競(jìng)爭(zhēng)使用文件 /dev/null 的管道
從IO效率上來(lái)講nohup ./filetransserver64 1>/dev/null 2>&1 &的效率更高。為何2>&1要寫在后面?2>&1 標(biāo)準(zhǔn)錯(cuò)誤拷貝了標(biāo)準(zhǔn)輸出的行為,但此時(shí)標(biāo)準(zhǔn)輸出還是在終端。>file 后輸出才被重定向到file,但標(biāo)準(zhǔn)錯(cuò)誤仍然保持在終端。
bash ?的常用快捷鍵
刪除
ctrl + d ? ? ?刪除光標(biāo)所在位置上的字符,相當(dāng)于VIM里x或者dl
ctrl + h ? ? ?刪除光標(biāo)所在位置前的一個(gè)字符,相當(dāng)于VIM里hx或者dh
ctrl + k ? ? ?刪除光標(biāo)后面所有字符,相當(dāng)于VIM里d shift+$
ctrl + u ? ? ?刪除光標(biāo)前面所有字符,相當(dāng)于VIM里d shift+^
ctrl + w ? ? ?刪除光標(biāo)前一個(gè)單詞,相當(dāng)于VIM里db
ctrl + y ? ? ?恢復(fù)ctrl+u上次執(zhí)行時(shí)刪除的字符
ctrl + ? ? ? ?撤消前一次輸入
移動(dòng)
ctrl + a ? ? ?將光標(biāo)移動(dòng)到命令行開(kāi)頭,相當(dāng)于VIM里shift+^
ctrl + e ? ? ?將光標(biāo)移動(dòng)到命令行結(jié)尾處,相當(dāng)于VIM里shift+$
ctrl + f ? ? ?光標(biāo)向后移動(dòng)一個(gè)字符,相當(dāng)于VIM里l
ctrl + b ? ? ?光標(biāo)向前移動(dòng)一個(gè)字符,相當(dāng)于VIM里h
ctrl + 方向鍵左鍵 ? ?光標(biāo)移動(dòng)到前一個(gè)單詞開(kāi)頭
ctrl + 方向鍵右鍵 ? ?光標(biāo)移動(dòng)到后一個(gè)單詞結(jié)尾
ctrl + x ? ? ? 在上次光標(biāo)所在字符和當(dāng)前光標(biāo)所在字符之間跳轉(zhuǎn)
alt ?+ f ? ? ?跳到光標(biāo)所在位置單詞尾部
替換
ctrl + t ? ? ? 將光標(biāo)當(dāng)前字符與前面一個(gè)字符替換
alt ?+ t ? ? 交換兩個(gè)光標(biāo)當(dāng)前所處位置單詞和光標(biāo)前一個(gè)單詞
alt ?+ u ? ? 把光標(biāo)當(dāng)前位置單詞變?yōu)榇髮?/p>
alt ?+ l ? ? ?把光標(biāo)當(dāng)前位置單詞變?yōu)樾?/p>
alt ?+ c ? ? ?把光標(biāo)當(dāng)前位置單詞頭一個(gè)字母變?yōu)榇髮?/p>
^oldstr^newstr ? ?替換前一次命令中字符串 ??
歷史命令編輯
ctrl + p ? 返回上一次輸入命令字符
ctrl + r ? ? ? 輸入單詞搜索歷史命令
alt ?+ p ? ? 輸入字符查找與字符相接近的歷史命令
alt ?+ > ? ? 返回上一次執(zhí)行命令
其它
ctrl + s ? ? ?鎖住終端
ctrl + q ? ? ?解鎖終端
ctrl + l ? ? ? ?清屏相當(dāng)于命令clear
ctrl + c ? ? ? 另起一行
ctrl + i ? ? ? 類似TAB健補(bǔ)全功能
ctrl + o ? ? ?重復(fù)執(zhí)行命令
alt ?+ 數(shù)字鍵 ?操作的次數(shù)
EOF?
在shell編程中,”EOF“通常與”<<“結(jié)合使用,“<<EOF“表示后續(xù)的輸入作為子命令或子shell的輸入,直到遇到”EOF“,再次返回到主調(diào)shell,形式如下:
交互式程序(命令)<<EOF command1 command2 ... EOF
? ?”EOF“中間的內(nèi)容將以標(biāo)準(zhǔn)輸入的形式輸入到”交互式程序“,當(dāng)shell看到”<<“知道其后面輸入的分界符,當(dāng)shell再次看到分界符時(shí),兩個(gè)分界符中間的部分將作為標(biāo)準(zhǔn)輸入。"EOF"一般常和cat命令連用。注意,最后的”EOF“必須單獨(dú)占一行。
#!/bin/bash su?-?oracle?<<?EOF salplus?/?as?sysdba startup exit EOF
變量
變量,說(shuō)簡(jiǎn)單點(diǎn)就是使用一個(gè)較簡(jiǎn)單的字符串來(lái)替代某些具有特殊意義的設(shè)定以及數(shù)據(jù)。通常shell預(yù)設(shè)的變量都是大寫的。
使用env命令可全部列出系統(tǒng)預(yù)設(shè)的全部環(huán)境變量,可以使用set命令把系統(tǒng)預(yù)設(shè)的全部變量都顯示出來(lái)。常見(jiàn)的環(huán)境變量:
PATH 決定了shell將到哪些目錄中尋找命令或程序
HOME 當(dāng)前用戶主目錄
HISTSIZE 歷史記錄數(shù)
LOGNAME 當(dāng)前用戶的登錄名
HOSTNAME 指主機(jī)的名稱
SHELL 前用戶Shell類型
LANG 語(yǔ)言相關(guān)的環(huán)境變量,多語(yǔ)言可以修改此環(huán)境變量
MAIL 當(dāng)前用戶的郵件存放目錄
PWD 當(dāng)前目錄
使用bash命令即可再打開(kāi)一個(gè)新的shell。用戶自定義的變量要被其他用戶使用或者新shell中使用需要添加到配置文件/etc/profile或$HOME/.bashrc文件最后一行加入自定義變量,然后運(yùn)行”source /etc/profile”將當(dāng)前的配置刷新。
在linux下設(shè)置自定義變量規(guī)則:
a.?設(shè)定變量的格式為”a=b”,其中a為變量名,b為變量的內(nèi)容,等號(hào)兩邊不能有空格;
b.?變量名只能由英、數(shù)字以及下劃線組成,而且不能以數(shù)字開(kāi)頭;
c.?當(dāng)變量?jī)?nèi)容帶有特殊字符(如空格)時(shí),需要加上單引號(hào);如果變量?jī)?nèi)容中本身帶有單引號(hào),這就需要用到雙引號(hào)了。
[root@localhost?~]#?myname=a?long bash:?long:?command?not?found [root@localhost?~]#?myname='a?long' [root@localhost?~]#?echo?$myname a?long [root@localhost?~]#?myname1="a'long" [root@localhost?~]#?echo?$myname1 a'long [root@localhost?~]#
d.?如果變量?jī)?nèi)容中需要用到其他命令運(yùn)行結(jié)果則可以使用反引號(hào)(鍵盤上Tab鍵上面);
[root@localhost?~]#?currentpath=`pwd` [root@localhost?~]#?echo?$currentpath /root [root@localhost?~]#
e.?變量?jī)?nèi)容可以累加其他變量的內(nèi)容,需要加雙引號(hào);
[root@localhost?~]#?s1=`pwd` [root@localhost?~]#?echo?$s1 /root [root@localhost?~]#?s2="$s1"ss [root@localhost?~]#?echo?$s2 /rootss [root@localhost?~]#?a1="$MAIL"root [root@localhost?~]#?echo?$a1 /var/spool/mail/rootroot [root@localhost?~]#
用雙引號(hào)時(shí)不會(huì)取消掉里面出現(xiàn)的特殊字符的本身作用(這里的$),而使用單引號(hào)則里面的特殊字符全部失去它本身的作用。
如果在當(dāng)前shell中運(yùn)行bash指令后,則會(huì)進(jìn)入一個(gè)新的shell,這個(gè)shell就是原來(lái)shell的子shell,在父shell中設(shè)定一個(gè)變量后,進(jìn)入子shell后該變量是不會(huì)生效的,如果想讓這個(gè)變量在子shell中生效則要用到export指令,如果export后面不加任何變量名,則它會(huì)聲明所有的變量。
f.取消已設(shè)變量
[root@localhost?~]#?s2="$s1"ss [root@localhost?~]#?echo?$s2 /rootss [root@localhost?~]#?unset?s2 [root@localhost?~]#?echo?$s2 [root@localhost?~]#
擴(kuò)展:
調(diào)用命令執(zhí)行結(jié)果做為參數(shù)使用反引號(hào)(tab鍵上面鍵)
[root@localhost?redis-3.0.0]#?cd [root@localhost?~]#?pwd /root [root@localhost?~]#?cd?`find?/usr/local/src/?-name?"redis*"?-type?d` [root@localhost?redis-3.0.0]#?pwd /usr/local/src/redis-3.0.0 [root@localhost?redis-3.0.0]#
basename????返回一個(gè)字符串參數(shù)的基本文件名稱。
basename String [ Suffix ]
basename 命令讀取 String 參數(shù),刪除以 /(斜杠) 結(jié)尾的前綴以及任何指定的 Suffix 參數(shù),并將剩余的基本文件名稱寫至標(biāo)準(zhǔn)輸出。
dirname,它與basename相反,是取得目錄部分
[root@localhost?usr]#?dirname?/usr/local/src /usr/local [root@localhost?usr]#?dirname?/usr/local/src/ /usr/local [root@localhost?usr]#?basename?/usr/local/src/ src [root@localhost?usr]#?basename?/usr/local/src src [root@localhost?usr]#
系統(tǒng)環(huán)境變量與個(gè)人環(huán)境變量的配置文件
全局變量配置文件
/etc/profile?:這個(gè)文件預(yù)設(shè)了幾個(gè)重要的變量,例如PATH, USER, LOGNAME, MAIL, INPUTRC, HOSTNAME, HISTSIZE, umas等等。
/etc/bashrc?:這個(gè)文件主要預(yù)設(shè)umask以及PS1。這個(gè)PS1就是我們?cè)谇妹顣r(shí),前面那串字符了,例如筆者的linux系統(tǒng)PS1就是?[root@localhost ~]#?,你不妨看一下PS1的值:echo $PS1。
局部變量配置文件
.bash_profile?:定義了用戶的個(gè)人化路徑與環(huán)境變量的文件名稱。每個(gè)用戶都可使用該文件輸入專用于自己使用的shell信息,當(dāng)用戶登錄時(shí),該文件僅僅執(zhí)行一次。
.bashrc?:該文件包含專用于你的shell的bash信息,當(dāng)?shù)卿洉r(shí)以及每次打開(kāi)新的shell時(shí),該該文件被讀取。例如你可以將用戶自定義的alias或者自定義變量寫到這個(gè)文件中。
.bash_history?:記錄命令歷史用的。
.bash_logout?:當(dāng)退出shell時(shí),會(huì)執(zhí)行該文件。可以把一些清理的工作放到這個(gè)文件中。
Linux系統(tǒng)變量PATH在系統(tǒng)中的主要作用是,提供命令的搜索路徑
查看PATH變量:
[root@Zabbix_server?~]#?echo?$PATH /usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin [root@Zabbix_server?~]#
這就是系統(tǒng)命令搜索的所有路徑,如果哪天自己寫了一些shell腳本,那怎么才能把自己的腳本路徑放進(jìn)PATH變量中的?假定腳本在”/home/script.sh?/home/script/script1.sh”,使該腳本能在其他目錄下也能執(zhí)行
直接用export命令添加到PATH變量中---只對(duì)當(dāng)前shell有效:
[root@Zabbix_server?script]#?export?PATH=/home/:$PATH [root@Zabbix_server?script]#?export?PATH=$PATH:/home/script [root@Zabbix_server?script]#?echo?$PATH /home/:/usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/home/script [root@Zabbix_server?script]#?cd? [root@Zabbix_server?~]#?script.sh? /home/script.sh?all|none [root@Zabbix_server?~]#?script1.sh?all none [root@Zabbix_server?~]#
兩種添加方式后的位置不通,同時(shí)設(shè)置多個(gè)目錄用冒號(hào)隔開(kāi),這樣就可以在任意位置使用腳本
修改.bash文件添加到PATH變量中---重啟不丟失
[root@Zabbix_server?~]#?vim?/root/.bashrc? #?.bashrc #?User?specific?aliases?and?functions alias?rm='rm?-i' alias?cp='cp?-i' alias?mv='mv?-i' #?Source?global?definitions if?[?-f?/etc/bashrc?];?then ????????.?/etc/bashrc fi export?PATH="$PATH:/home" export?PATH="/home/script:$PATH" [root@Zabbix_server?~]#?source?/root/.bashrc
不建議修改/etc/profile,因?yàn)檫@樣的設(shè)置將對(duì)所有用戶的shell都生效,對(duì)系統(tǒng)安全會(huì)產(chǎn)生影響。
~/.bash_profile ?或者 ?~./bashrc ?對(duì)當(dāng)前用戶有用
Linux命令的返回值
?????????????$? 是顯示最后命令的退出狀態(tài),0表示沒(méi)有錯(cuò)誤,其他表示有錯(cuò)誤
在 Linux 下,不管你是啟動(dòng)一個(gè)桌面程序也好,還是在控制臺(tái)下運(yùn)行命令,所有的程序在結(jié)束時(shí),都會(huì)返回一個(gè)數(shù)字值,這個(gè)值叫做返回值,或者稱為錯(cuò)誤號(hào) ( Error Number )。在控制臺(tái)下,環(huán)境變量 $?保存著前一個(gè)程序的返回值.
[root@localhost?~]#?ll?111 -rw-r--r--?1?root?root?10?Jan?30?11:23?111 [root@localhost?~]#?echo?$? 0 [root@localhost?~]#?ll?222 ls:?cannot?access?222:?No?such?file?or?directory [root@localhost?~]#?echo?$? 2 [root@localhost?~]#
只要返回值是 0,就代表程序執(zhí)行成功了,如果 $? 變量的值不是 0 的話,就表示上一個(gè)命令在執(zhí)行的過(guò)程中出錯(cuò)了。
如果要每次執(zhí)行完都顯示該值,執(zhí)行export PS1="[\$?]${PS1}",這個(gè)命令把 $? 的值放在的提示符的最前面
[root@localhost?~]#?export?PS1="[\$?]${PS1}" [0][root@localhost?~]#?ll?111 -rw-r--r--?1?root?root?10?Jan?30?11:23?111 [0][root@localhost?~]#?ll?222 ls:?cannot?access?222:?No?such?file?or?directory [2][root@localhost?~]#
那么如果返回的值不是 0,可以用 perror 這個(gè)程序來(lái)查看錯(cuò)誤的信息,perror命令是MySQL數(shù)據(jù)庫(kù)系統(tǒng)中的一個(gè)工具程序,在沒(méi)有安裝MySQL的機(jī)器上就無(wú)法執(zhí)行
[2][root@localhost?~]#?perror?2 -bash:?perror:?command?not?found [127][root@localhost?~]#?yum?-y?install?mysql?mysql-server [0][root@localhost?~]#?perror?2 OS?error?code???2:??No?such?file?or?directory [0][root@localhost?~]#?perror?127 OS?error?code?127:??Key?has?expired MySQL?error?code?127:?Record?file?is?crashed [0][root@localhost?~]#
$$ Shell本身的PID(ProcessID)
$! Shell最后運(yùn)行的后臺(tái)Process的PID
$- 使用Set命令設(shè)定的Flag一覽
$# 是傳給腳本的參數(shù)個(gè)數(shù)
$0 是腳本本身的名字
$1 是傳遞給該shell腳本的第一個(gè)參數(shù)
$2 是傳遞給該shell腳本的第二個(gè)參數(shù)
$$ 是腳本運(yùn)行的當(dāng)前進(jìn)程ID號(hào)
$@ 是傳給腳本的所有參數(shù)的列表
$* 是以一個(gè)單字符串顯示所有向腳本傳遞的參數(shù),與位置變量不同,參數(shù)可超過(guò)9個(gè)
[root@localhost?~]#?cat?test.sh? #!/bin/bash echo?"參數(shù)個(gè)數(shù)\$#:$#" echo?"腳本本身的名字\$0:$0" echo?"腳本的第一個(gè)參數(shù)\$1:$1" echo?"腳本的第二個(gè)參數(shù)\$2:$2" echo?"傳給腳本的所有參數(shù)的列表\$@:$@" echo?"字符串顯示所有向腳本傳遞的參數(shù)\$*:$*" echo?"腳本運(yùn)行的當(dāng)前進(jìn)程ID號(hào)\$$:$$" echo?"退出狀態(tài),0表示沒(méi)有錯(cuò)誤,其他表示有錯(cuò)誤\$?:$??" [root@localhost?~]#?./test.sh?1?2?3?4?5?6?7?8?9?10?11?12 參數(shù)個(gè)數(shù)$#:12 腳本本身的名字$0:./test.sh 腳本的第一個(gè)參數(shù)$1:1 腳本的第二個(gè)參數(shù)$2:2 傳給腳本的所有參數(shù)的列表$@:1?2?3?4?5?6?7?8?9?10?11?12 字符串顯示所有向腳本傳遞的參數(shù)$*:1?2?3?4?5?6?7?8?9?10?11?12 腳本運(yùn)行的當(dāng)前進(jìn)程ID號(hào)$$:3933 退出狀態(tài),0表示沒(méi)有錯(cuò)誤,其他表示有錯(cuò)誤$?:0? [root@localhost?~]#
區(qū)別:$@和$*
相同點(diǎn):都是引用所有參數(shù)
不同點(diǎn):只有在雙引號(hào)中體現(xiàn)出來(lái)。假設(shè)在腳本運(yùn)行時(shí)寫了三個(gè)參數(shù)(分別存儲(chǔ)在112 3)則"3)則"*" 等價(jià)于 “112 3"(傳遞了一個(gè)參數(shù));而“3"(傳遞了一個(gè)參數(shù));而“@" 等價(jià)于 "1""1""2" "$3"(傳遞了三個(gè)參數(shù))
BashShell的extglob選項(xiàng)
連接
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。