溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

RHEL6基礎(chǔ)之六RHEL6基本命令&bash常用快捷鍵&變量&環(huán)境變量&命令的返回值

發(fā)布時(shí)間:2020-07-12 17:25:00 來(lái)源:網(wǎng)絡(luò) 閱讀:4017 作者:justin_peng 欄目:移動(dòng)開(kāi)發(fā)

命令幫助信息獲取

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

RHEL6基礎(chǔ)之六RHEL6基本命令&bash常用快捷鍵&變量&環(huán)境變量&命令的返回值

用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?:該文件包含專用于你的shellbash信息,當(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)

連接

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI