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