shell腳本(一)
1、常用命令
(1)系統管理
#useradd,添加新用戶時默認會創建一個與用戶名相同的用戶組
#創建用戶user1,並指定uid爲1111,所屬羣組爲2222(test),並且不建立家目錄
groupadd test -g 2222
grep test /etc/group
useradd user1 -g 2222 -u 1111 -M
id user1
#創建用戶user2,並指定uid爲1112,所屬羣組爲2222(test),並且建立家目錄
useradd user2 -g 2222 -u 1112
ls /home
id user2
#userdel,默認不會刪除家目錄
#刪除用戶user1和user3(但不會刪除家目錄),刪除user2並且刪除家目錄
userdel user1
userdel user3
userdel user2 -r
ls /home
#usermod,更改user4(1114)id爲2224,羣組test變爲root,家目錄變爲/home/test
useradd user4 -u 1114 -g test
usermod -g root -u 2224 -d /home/test user4
id user4
grep user4 /etc/passwd
ll /home
chown -R user4:root /home/test
ll /home
#groupadd,新增羣組test1,指定id=2223
groupadd test1 -g 2223
grep test1 /etc/group
#groupmod,重命名羣組test1爲test2,id=3333
groupmod test1 -n test2 -g 3333
grep test /etc/group
#groupdel,刪除羣組時必需確認羣組沒有其他成員
#刪除包含成員的羣組將會出錯
#刪除羣組test和test2,test羣組有成員刪除會出錯
groupdel test2
groupdel test
#passwd,更改密碼,鎖定/解鎖用戶,指定密碼最短/最長/警告更改時間
#更改user4密碼爲love,只有root用戶可以passwd 用戶名
passwd user4
輸入兩次密碼
#鎖定用戶user4和user5
passwd -l user4
#在/etc/shadow第2列前面加"!"表示用戶被鎖定
grep user4 /etc/shadow
#解鎖用戶user4
passwd -u user4
grep user4 /etc/shadow
#指定user4密碼最短更改時間2天,最長7天,到期前3天警告
passwd user4 -n 2 -x 7 -w 3
grep user4 /etc/shadow
#chgrp,更改文件或者目錄羣組,將mount.sh羣組由root改爲test
(2)文件目錄管理
#ls,-l以長格式顯示,1-7列分別爲:
#文件類型和權限、鏈接數、文件屬主、文件屬組、文件大小、最近修改時間、文件名
#ls,顯示指定目錄下所有文件,包含隱藏文件,大小以M爲單位,並以修改時間排序
ls alc block-size=m /home
#不足1M以1M算,不足1G以1G算
#與-A與-a區別在於,前者不顯示"."(當前目錄)和".."(上一級目錄)
ls Alc block-size=g /home
#ls默認以1行顯示所有文件和目錄,但不包含子目錄
ls /home
#前者1行顯示完,後者每一個文件或者目錄佔1行
ls -1 /home
#在目錄後加反斜槓
ls -p /home
ls -lp /home
#遞歸式顯示,UID和GID以數值代替,並按字母逆序排序
#-R:遞歸顯示,-n:uid,gid數值顯示,-r:按字母逆序排序
ls -R -n -r -al /home
#cp,默認不加參數無法複製目錄
#-a:保留鏈接、文件屬性,並遞歸複製目錄
#-d:保留鏈接,-f:覆蓋目標文件並且不提示,-p:附帶複製修改時間和訪問時間
#-r:遞歸複製目錄,目標必需爲目錄,-l:不復制文件,只是鏈接文件
#將/home複製到/tmp,附帶所有屬性,並且強制覆蓋目標文件
cp -apf /home /tmp
ls /tmp
#mv,-f:強制覆蓋目標文件並且不提示,新版本已經默認保留權限
#將/home/aaa文件移動到/tmp,並且保留權限,如目標文件存在同樣覆蓋
ls -kl /home/aaa
mv -f /home/aaa /tmp
ll /tmp/aaa
#兩者比較,目標文件被覆蓋,並且保留了權限
#rm,刪除文件或者目錄
#強制刪除文件或者目錄,如果目錄有子目錄一併刪除
rm -rf /tmp/home
ll /tmp
#mkdir,建立目錄,-p:如果路徑某些目錄不存在一併建立,-m:設定權限
#建立目錄/home/bbb/ccc,並指定權限爲777
mkdir -p -m 777 /home/bbb/ccc
#-m指定的是最深層目錄權限,而缺少的目錄權限是當前用戶默認權限
#此處需要注意的是root的umask爲0022,所以bbb權限爲755,而不是777
#rmdir,只能刪除空目錄,-p:遞歸刪除空目錄,如果父目錄爲空一併刪除
#加上-p後,如果父目錄不爲空,則提示錯誤,注意區別
mkdir -p bbb/ccc
mkdir -p bbb/ddd
rmdir -p bbb/ccc
ls bbb
rmdir -p bbb/ddd
ls
#stat,查看文件目錄access、modify和change時間
#access爲訪問時
#modify爲修改過內容時間,
#change爲修改過狀態時間,比如chmod、chown命令更改過權限等等
stat mount.sh
#touch,創建空文件,-a:只修改訪問時間,-m:只修改修改時間
#-t:使用指定日期,-r:將指定文件日期修改爲參考文件日期
#將訪問時間改爲20140102030405,修改時間改爲20150102030405
touch -a -t 201401020304.05 bbb
touch -m -t 201501020304.05 bbb
stat bbb
#再將bbb改爲參考文件ccc時間
stat ccc
touch -r ccc bbb
stat bbb
#file,測試文件類型,-b:不顯示文件或目錄名稱
file mount.sh
file -b mount.sh
file test
file -b test
#ln,-b:覆蓋目標文件前先備份,會在備份文件後面加字符串,-S:指定備份字符串
#-s:建立軟鏈接,-d:建立硬鏈接
#軟鏈接:相當於快捷方式,刪除對原文件不影響
#硬鏈接:相當於原文件的一個"特殊"副本,刪除對原文件不影響
#但修改內容同樣指向原文件
#爲bbb建立軟鏈接,並且覆蓋目標文件,指定備份字符串爲".bk"
ln -s -b -S .bk bbb lnb
#刪除軟鏈接:原文件不受影響,但如果寫入內容的話會寫入到原文件
cat bbb
echo "test">lnb
cat bbb
#爲bbb建立硬鏈接,可以看到ccc鏈接數值由1變爲2
ln -d ccc ccchard
ll ccc
#刪除硬鏈接:刪除之後對原文件不造成影響,只是原文件鏈接數值減1
ll ccc
echo "ccchard">ccchard
rm -f ccchard
ll ccc*
#刪除原文件,硬鏈接同樣可以用, hardccc鏈接數值由2變1