/etc/passwd:
用户名:密码:UID:GID:注释:家目录:默认SHELL
/etc/group:
组名:密码:GID:以此组为其附加组的用户列表
/etc/shadow:
用户名:密码:最近一次修改密码的时间:最短使用期限:最长使用期限:警告时间:非活动时间:过期时间:
用户管理:
useradd, userdel, usermod, passwd, chsh, chfn, finger, id, chage
创建用户:
useradd [options] USERNAME
-u UID:手动给用户指定UID,默认用户ID是不可重复的,所以这里指定的UID一定是其他用户尚未使用的ID号,而且要大于等于500
-g GID(基本组):无论是添加基本组还是附加组这个组必须得事先存在,才能指定和使用的,指定用户基本组可以是组名或者GID都可以
-G GID,... (附加组):无论是添加基本组还是附加组这个组必须得事先存在,才能指定和使用的,指定用户附加组可以是组名或者GID都可以,附加组可以是多个,指定多个附加组可以使用逗号隔开
-c "COMMENT":指定注释信息,如果中间有空格可以用引号引起来
-d /path/to/directory:为用户指定家目录,如果不指定默认在/home目录下创建一个与用户名相同的目录作为用户的家目录
-s SHELL(/bin/bash):指定用户使用shell,指定shell的路径,这个shell的路径最好是出现在/etc/shells文件中的shell,这个文件指定了当前系统可用的安全shell
-m -k:如果用户家目录不存在就创建,强行给用户创建家目录,-k一般要跟-m一起使用,不使用-k也行,-k是把SKEL DIR(/etc/skel)中的所有文件,在创建家目录以后,把这些文件复制到用户的家目录中,SKEL DIR是环境设置文件,是一些bash配置文件,也有可能是其他shell配置文件,如果没有这些配置文件,在创建用户以后在登录用户的时候,这些用户的环境是不健全的不完整的,bash_logout .bash_profile .bashrc这三个文件都是bash用于用户个人的环境配置文件,所以每创建一个用户的时候,就算-m -k没指定,它也会自动将这些文件复制过去的,只不过有时候可以强行指定必须得创建家目录,而且给它复制skel文件
-M:不给用户创建家目录,就算/etc/login.defs设定用户应该有家目录,也不给他创建。
-r: 添加系统用户,系统用户是不会有家目录,最好也不让登录,可以和选项-s一块用指定shell为/sbin/nologin
环境变量:
PATH:命令路径
HISTSIZE:历史命令缓存保存多少条
SHELL:用于保存用户的默认shell
/etc/login.defs:
/etc/shells:指定了当前系统可用的安全shell
在创建用户的时候如果没有为其指定组,将会创建一个跟用户同名的基本组,而且一般UID和GID是保持一致的,如果出现特殊情况不保持一致,因为刚好跟这个用户ID号刚好相同的GID已经被其他用户占用了,可能就不会保持一致,但一般情况下对系统来说,为了系统安全通常要求用户和他的私有组ID号一般要跟用户相同,不同的话被视为特殊用户了,这种用户它的用户名和组名或UID和GID不一致会在权限的设定上会有所不同
[root@Smoke ~]# useradd -u 1000 user1(创建用户user1并指定UID为1000) [root@Smoke ~]# tail -n 1 /etc/passwd(显示/etc/passwd文件最后一行,查看指定的user1用户UID,-n指定只显示文件最后一行,默认显示10行) user1:x:1000:1000::/home/user1:/bin/bash [root@Smoke ~]# useradd -g hellosa user2(添加用户user2并指定用户基本组为hellosa,由于hellosa组不存在,无法添加) useradd: group 'hellosa' does not exist [root@Smoke ~]# useradd -g mygroup user2(添加用户user2并指定基本组为mygroup,-g指定基本组) [root@Smoke ~]# tail -n 1 /etc/passwd(显示/etc/passwd文件最后一行,-n指定显示1行,默认显示10行) user2:x:1001:515::/home/user2:/bin/bash [root@Smoke ~]# useradd -G mygroup user3(创建用户user3并添加附加组为mygroup) [root@Smoke ~]# tail -1 /etc/passwd(显示passwd文件最后一行,-1显示文件最后一行,默认显示10行) user3:x:1002:1002::/home/user3:/bin/bash [root@Smoke ~]# tail /etc/group(显示/group文件最后10行) hadoop:x:502: nfstest:x:510: nagios:x:511: puppet:x:493: student:x:512: vistor:x:513: tom:x:514: mygroup:x:515:user3(以此组为附加组的用户) user1:x:1000: user3:x:1002: [root@Smoke ~]# useradd -c "Tony Blare" -d /home/blare user4(创建用户user4,-c指定用户的全名为Tony Blare,-d指定用户的家目录为/home/blare) [root@Smoke ~]# tail -1 /etc/passwd(显示passwd文件最后一行,-1显示最后一行,默认显示10行) user4:x:1003:1003:Tony Blare(指定的注释):/home/blare(指定的家目录):/bin/bash [root@Smoke ~]# useradd -s /sbin/nologin user5(添加用户user5,并指定使用shell为/sbnin/nologin,不让登录的shell) [root@Smoke ~]# su - user5(切换到user5用户无法登录) This account is currently not available.(当前用户不可用) [root@Smoke ~]# cat /etc/shells(查看系统可用的安全shell文件) /bin/sh /bin/bash /sbin/nologin /bin/dash /bin/tcsh /bin/csh [root@Smoke ~]# useradd -s /bin/tcsh user6(添加用户user6并添加用户使用shell为tcsh) [root@Smoke ~]# su - user6(切换user6用户) [user6@Smoke ~]$ echo $SHELL(显示当前shell为tcsh) /bin/tcsh [root@Smoke ~]# tail -1 /etc/passwd(线程passwd文件最后一行,-1显示最后一行,默认显示10行) user6:x:1005:1005::/home/user6:/bin/tcsh(user6用户的默认shell是tcsh) [root@Smoke ~]# ls -a /etc/skel/(查看/etc/skel目录文件及子目录,.bash_logout .bash_profile .bashrc这三个 文件都是bash用于用户个人的环境配置文件,所以每创建一个用户的时候,会自动将这些文件复制过去的) . .. .bash_logout .bash_profile .bashrc .gnome2 .mozilla [root@Smoke ~]# cat /etc/login.defs(查看login.defs文件,里面定义了用户和组的一些默认配置参数) PASS_MAX_DAYS 99999 PASS_MIN_DAYS 0(密码最短使用期限) PASS_MIN_LEN 5(最短长度) PASS_WARN_AGE 7(警告时长) UID_MIN 500(用户的ID号最小) UID_MAX 60000(用户的ID号最大) GID_MIN 500(组ID号最小) GID_MAX 60000(组ID号最大) CREATE_HOME yes(默认创建用户要不要给它创建家目录) UMASK 077(用户家目录权限) USERGROUPS_ENAB yes(删除用户是否删除它的私有组) ENCRYPT_METHOD SHA512(用户密码使用什么方式加密) [root@Smoke ~]# useradd -M user7(创建user7,-M不创建家目录) [root@Smoke ~]# su - user7(切换到user7用户,提示用户没有家目录) su: warning: cannot change directory to /home/user7: No such file or directory(给他指了家目录,但是这个家目录并不存在) -bash-4.1$ pwd(没有家目录无法提供环境设定,所以命令提示符这样) /root [root@Smoke ~]# useradd -r sysuser(添加sysuer为系统用户,-r系统用户) [root@Smoke ~]# tail -1 /etc/passwd(查看passwd文件最后一行,-1显示最后一行,默认显示10行) sysuser:x:495:492::/home/sysuser:/bin/bash [root@Smoke ~]# ls /home/(sysuser系统用户不会有家目录) blare hadoop nagios nfstest Smoke student tom user1 user3 user5 user6 vistor [root@Smoke ~]# useradd -r sysuser2 -s /sbin/nologin(添加sysuser2并不允许登录,-r系统用户,-s指定shell为/sbin/nologin) [root@Smoke ~]# tail -n 1 /etc/passwd(查看passwd文件最后一行) sysuser2:x:494:491::/home/sysuser2:/sbin/nologin
删除用户:
userdel:
userdel [option] USERNAME:如果在删除用户时候没有指定任何选项,删除用户以后用户的家目录是不会被删除的。
-r: 同时删除用户的家目录
id:查看用户的帐号属性信息
id USER:显示指定用户的帐号属性信息,不指定显示当前用户的帐号属性信息。
-u:只看UID
-g:只看基本组GID
-G:显示所有组GID
-n:name,显示为名称,不显示ID号
finger: 查看用户帐号信息
finger USERNAME:检索用户信息的程序,还可以检索远程主机的用户帐号信息
[root@Smoke ~]# id(查看当前用户的帐号属性信息) uid=0(root) gid=0(root) groups=0(root) [root@Smoke ~]# id user1(显示user1帐号相关信息) uid=1000(user1) gid=1000(user1) groups=1000(user1) [root@Smoke ~]# id -g user1(查看有效阻GID) 1000 [root@Smoke ~]# id -G user1(查看所有组GID) 1000 [root@Smoke ~]# id -G(查看当前用户所有组GID,包括附加组和基本组) 0 [root@Smoke ~]# id -u -n user1(显示user1用户的UID为名称,-u显示UID,-n显示为名称) user1 [root@Smoke ~]# id -g -n user1(显示用户user1基本组的组名,-g显示用户基本组GID,-n显示为名称) user1 [root@Smoke ~]# finger user1(检索user1用户帐号信息) Login: user1(登录名称) Name:(完整名称) Directory: /home/user1(家目录) Shell: /bin/bash(默认shell) Never logged in.(什么时候曾经登录过) No mail.(邮箱) No Plan.(自动任务计划) [root@Smoke ~]# userdel user1(删除用户user1) [root@Smoke ~]# ls /home/(显示/home目录文件及子目录,user1的家目录默认没有被删除) blare hadoop nagios nfstest Smoke student tom user1 user2 user3 user5 user6 vistor [root@Smoke ~]# userdel -r user2(删除user2用户,-r删除用户家目录) [root@Smoke ~]# ls /home/(user2的家目录被删除) blare hadoop nagios nfstest Smoke student tom user1 user3 user5 user6 vistor
修改用户帐号属性:
usermod
-u UID:修改用户的UID
-g GID:修改用户基本组,改的组应该是事先存在的组
-a -G GID:不使用-a选项,会覆盖此前的附加组;使用-a为用户追加附加组
-c:指定注释信息
-d -m:为用户指定新的家目录,如果此前创建的用户已经登录过,而且曾经在里面创建过很多文件,就意味着它的家目录有新文件,而给它指定新的家目录,它原来的家目录下的文件,这个用户就无法访问了,要想让用户仍然能访问它此前创建的文件,通过-d指定新的家目录一并使用-m选项,会把用户家目录的文件移动到新的家目录
-s:更改用户的shell
-l:更改用户的登录名
-e:定义用户的过期时间,什么时候禁用,格式YYYY-MM-DD(年月日)
-f:指定非活动时间,密码过期了,帐号还没有禁用那段时间
-L:锁定帐号
-U:解锁帐号
[root@Smoke ~]# id user3(查看user3帐号属性信息) uid=1002(user3) gid=1002(user3) groups=1002(user3),515(mygroup) [root@Smoke ~]# usermod -u 2002 user3(更改user3用户的UID为2002) [root@Smoke ~]# id user3(查看user3帐号属性信息,uid已更改为2002) uid=2002(user3) gid=1002(user3) groups=1002(user3),515(mygroup) chsh: 修改用户的默认shell chfn:修改finger注释信息 [root@Smoke ~]# finger user3(查看用户user3用户帐号信息,默认shell为bash) Login: user3 Name: Directory: /home/user3 Shell: /bin/bash Never logged in. No mail. No Plan. [root@Smoke ~]# chsh user3(更改用户user3默认shell) Changing shell for user3. New shell [/bin/bash]: /bin/tcsh(更改为tcsh) Shell changed. [root@Smoke ~]# finger user3(查看用户user3用户帐号信息,默认shell被改为tcsh) Login: user3 Name: Directory: /home/user3 Shell: /bin/tcsh Never logged in. No mail. No Plan. [root@Smoke ~]# chfn user3(更改user3的注释信息) Changing finger information for user3. Name []: User3(完整名字) Office []: Beijing(办公室地址) Office Phone []: 110(办公室电话) Home Phone []: 119(家电话) Finger information changed. [root@Smoke ~]# finger user3(查看user3的帐号信息) Login: user3 Name: User3 Directory: /home/user3 Shell: /bin/tcsh Office: Beijing, 110 Home Phone: 119 Never logged in. No mail. No Plan. [root@Smoke ~]# tail -n 1 /etc/passwd(显示passwd文件最后一行,-n指定显示行数,默认10行,查看用户的注释信息) user3:x:2002:1002:User3,Beijing,110,119:/home/user3:/bin/tcsh
密码管理:
passwd [USERNAME]:普通用户只能通过passwd来改自己的密码,管理员可以更改指定用户的密码
--stdin:从标准输入读取密码,标准输入键盘
-l:锁定用户
-u:解锁用户
-n:密码最短使用期限
-x:密码最长使用期限
-w:警告时间
-i:非活动时间
-d: 删除用户密码
pwck:检查用户帐号完整性
[root@Smoke ~]# passwd user3(修改user3用户密码) Changing password for user user3. New password: BAD PASSWORD: it is based on a dictionary word Retype new password: passwd: all authentication tokens updated successfully. [root@Smoke ~]# echo "smoke520" | passwd --stdin user3(把smoke520字符串当作密码传递过去,--stdin通过标准输入来接收字符串用于用户密码) Changing password for user user3. passwd: all authentication tokens updated successfully. [root@Smoke ~]# tail /etc/shadow(显示shadow文件组后10行) nagios:!!:16211:0:99999:7::: puppet:!!:16218:::::: student:$6$IwqC8.BE$8y8zjWuOWbfYxjqAEVfNmaOwVikAvXo4ww6oOGiZ.chfG/nzD.j8nEoteMN5RKc3HMDR3H2RLkSRxzgd1F1FT0:16221:0:99999:7::: vistor:$6$wBAiXxmQ$2GR2UAQPjCDJt.c8qAY9tttLm/Rs0saFVTZssIhKd8V2U0WTHf2d/CwUm4QgnTKg5auk6UYtKroDtoQ8f7f5A0:16221:0:99999:7::: tom:$6$cakI4EDz$ff/s0OG.dv5EOrqkYr4Mzwo8nj0bKhf1yjXM7XQsj6uNxeS3I0NRiIH7sfZeH5ymZ.IgOAh5pV5nwfr.t2/ri0:16227:0:99999:7::: user3:$6$0WBAWiJG$OD1eupZlj3YR6EFP..O7kWt6L7p1Y1/CO7S0pnYLEO.52wzvv9p45YzCQK2Kywfzzaqg4Tq7hQpzaitnlLHI./:16228:0:99999:7::: user4:!!:16228:0:99999:7::: user5:!!:16228:0:99999:7::: user6:!!:16228:0:99999:7::: user7:!!:16228:0:99999:7::: [root@Smoke ~]# passwd -d user3(删除user3用户密码) Removing password for user user3. passwd: Success [root@Smoke ~]# tail /etc/shadow(显示shadow文件最后10行,user3密码被清空) nagios:!!:16211:0:99999:7::: puppet:!!:16218:::::: student:$6$IwqC8.BE$8y8zjWuOWbfYxjqAEVfNmaOwVikAvXo4ww6oOGiZ.chfG/nzD.j8nEoteMN5RKc3HMDR3H2RLkSRxzgd1F1FT0:16221:0:99999:7::: vistor:$6$wBAiXxmQ$2GR2UAQPjCDJt.c8qAY9tttLm/Rs0saFVTZssIhKd8V2U0WTHf2d/CwUm4QgnTKg5auk6UYtKroDtoQ8f7f5A0:16221:0:99999:7::: tom:$6$cakI4EDz$ff/s0OG.dv5EOrqkYr4Mzwo8nj0bKhf1yjXM7XQsj6uNxeS3I0NRiIH7sfZeH5ymZ.IgOAh5pV5nwfr.t2/ri0:16227:0:99999:7::: user3::16228:0:99999:7::: user4:!!:16228:0:99999:7::: user5:!!:16228:0:99999:7::: user6:!!:16228:0:99999:7::: user7:!!:16228:0:99999:7::: [root@Smoke ~]# pwck(检测用户帐号完整性) user 'adm': directory '/var/adm' does not exist user 'uucp': directory '/var/spool/uucp' does not exist user 'gopher': directory '/var/gopher' does not exist user 'avahi-autoipd': directory '/var/lib/avahi-autoipd' does not exist user 'saslauth': directory '/var/empty/saslauth' does not exist user 'pulse': directory '/var/run/pulse' does not exist user 'user7': directory '/home/user7' does not exist pwck: no changes
组管理:
创建组:groupadd
groupadd:添加组
-g GID:指定GID,不指定大于500的ID,而且是自上一个组ID加1
-r:添加为系统组
groupmod:修改组属性
-g GID:修改GID
-n GRPNAME:修改组名
groupdel:删除组
gpasswd:为组设定密码
newgrp GRPNAME <--> exit:登录一个新组,临时切换用户基本组为另外一个组
[root@Smoke ~]# groupadd -r nginx(添加nginx为系统组,-r系统组) [root@Smoke ~]# tail -1 /etc/group(查看group文件最后一行,-1显示最后一行,默认10行) nginx:x:490: [root@Smoke ~]# useradd hadoop(添加用户hadoop) [root@Smoke ~]# su - hadoop(切换到hadoop用户) [hadoop@Smoke ~]$ cd /tmp/(切换到/tmp目录) [hadoop@Smoke tmp]$ touch a.hadoop(创建a.hadoop文件) [hadoop@Smoke tmp]$ ll a.hadoop(查看a.hadoop文件相信信息,属主属组是hadoop) -rw-rw-r-- 1 hadoop hadoop 0 Jun 7 22:13 a.hadoop [hadoop@Smoke tmp]$ id(查看用户帐号属性信息) uid=502(hadoop) gid=502(hadoop) groups=502(hadoop) [root@Smoke ~]# gpasswd mygroup(给mygroup组添加密码) Changing the password for group mygroup New Password: Re-enter new password: [hadoop@Smoke tmp]$ newgrp mygroup(临时切换当前用户基本组为另外一个组) Password: [hadoop@Smoke tmp]$ id(查看用户帐号属性信息) uid=502(hadoop) gid=515(mygroup) groups=502(hadoop),515(mygroup) [hadoop@Smoke tmp]$ touch b.hadoop(创建b.hadoop文件) [hadoop@Smoke tmp]$ ll b.hadoop(查看b.hadoop文件详细信息,属主为hadoop,属组为mygroup) -rw-r--r-- 1 hadoop mygroup 0 Jun 7 22:21 b.hadoop [hadoop@Smoke tmp]$ exit(退出) exit [hadoop@Smoke tmp]$ id(查看用户帐号属性信息) uid=502(hadoop) gid=502(hadoop) groups=502(hadoop)
练习:
1、创建一个用户mandriva,其ID号为2002,基本组为distro(组ID为3003),附加组为linux;
# groupadd -g 3003 distro # groupadd linux # useradd -u 2002 -g distro -G linux mandriva
2、创建一个用户fedora,其全名为Fedora Community,默认shell为tcsh;
# useradd -c "Fedora Community" -s /bin/tcsh fedora
3、修改mandriva的ID号为4004,基本组为linux,附加组为distro和fedora;
# usermod -u 4004 -g linux -G distro,fedora mandriva
4、给fedora加密码,并设定其密码最短使用期限为2天,最长为50天;
# passwd -n 2 -x 50 fedora
5、将mandriva的默认shell改为/bin/bash;
usermod -s /bin/bash mandirva
6、添加系统用户hbase,且不允许其登录系统;
# useradd -r -s /sbin/nologin hbase
chage:改密用户密码过期信息
-d: 最近一次的修改时间,YYYY-MM-DD年月日
-E: 过期时间
-I:非活动时间
-m: 最短使用期限
-M: 最长使用期限
-W: 警告时间
权限管理:
r:可读,对于文件可以使用查看命令查看文件内容,对于目录可以使用ls命令,但是不能切换到此目录,也不能使用ls -l
w:可写,对文件而言可以编辑这个文件,对于目录指的是可以在此目录创建文件
x:可执行,对文件而言可以执行,可以把它提交给内核由内核判断其运行方式,并且将其运行起来,或者说为其启动新的进程,对于目录来说可以对其使用cd或ls -l命令,来查看里面每个文件相信属性信息
三类用户:
u: 属主
g: 属组
o: 其它用户
修改属主:
chown: 改变文件属主(只有管理员可以使用此命令)
# chown USERNAME file,...
-R: 修改目录及其内部文件的属主
--reference=/path/to/somefile file,...:reference引用参考,把指定文件的信息修改为跟reference路径的文件信息一样
[root@Smoke ~]# chown hadoop /tmp/abc(改变abc文件的属主为hadoop) [root@Smoke ~]# ls -l /tmp/abc(查看abc文件详细信息,属主改变为hadoop) -rw-r--r-- 1 hadoop root 884 Jun 4 10:25 /tmp/abc [root@Smoke ~]# chown hadoop /tmp/hi(更改hi目录属主为hadoop) [root@Smoke ~]# ls -ld /tmp/hi/(查看hi目录本身属主,-l详细信息,-d目录本身,属主为hadoop) drwxr-xr-x 2 hadoop root 4096 Jun 4 10:35 /tmp/hi/ [root@Smoke ~]# ls -l /tmp/hi/(目录中的文件属主没有改变) total 424 -rwxr-xr-x 1 root root 1288 Jun 4 10:35 abrt-ccpp -rwxr-xr-x 1 root root 1628 Jun 4 10:35 abrtd -rwxr-xr-x 1 root root 1642 Jun 4 10:35 abrt-oops -rwxr-xr-x 1 root root 1725 Jun 4 10:35 acpid -rwxr-xr-x 1 root root 2062 Jun 4 10:35 atd -rwxr-xr-x 1 root root 3378 Jun 4 10:35 auditd [root@Smoke ~]# chown -R hadoop /tmp/hi/(更改hadoop目录及其内部文件属主为hadoop,-R递归) [root@Smoke ~]# ls -l /tmp/hi/(查看hi目录下的文件,属主都改为hadoop) total 424 -rwxr-xr-x 1 hadoop root 1288 Jun 4 10:35 abrt-ccpp -rwxr-xr-x 1 hadoop root 1628 Jun 4 10:35 abrtd -rwxr-xr-x 1 hadoop root 1642 Jun 4 10:35 abrt-oops -rwxr-xr-x 1 hadoop root 1725 Jun 4 10:35 acpid -rwxr-xr-x 1 hadoop root 2062 Jun 4 10:35 atd -rwxr-xr-x 1 hadoop root 3378 Jun 4 10:35 auditd [root@Smoke ~]# ls -l /tmp/(查看/tmp目录下文件及子目录) -rw-r--r-- 1 hadoop root 884 Jun 4 10:25 abc -rw-r--r-- 1 root root 0 Jun 8 00:20 test [root@Smoke ~]# chown --reference=/tmp/abc /tmp/test(更改test文件的信息和abc信息一样) -rw-r--r-- 1 hadoop root 884 Jun 4 10:25 abc -rw-r--r-- 1 hadoop root 0 Jun 8 00:20 test
修改属组:
# chgrp GRPNAME file,...改变文件属组(只有管理员可以使用此命令)
-R:修改目录及其内部文件的属组
--reference=/path/to/somefile file,...reference引用参考,把指定文件的信息修改为跟reference路径的文件信息一样
[root@Smoke ~]# chgrp mygroup /tmp/abc(更改abc的属组为mygroup) [root@Smoke ~]# ls -l /tmp/abc(查看abc文件详细信息,属组改为mygroup) -rw-r--r-- 1 hadoop mygroup 884 Jun 4 10:25 /tmp/abc [root@Smoke ~]# chgrp -R mygroup /tmp/hi/(更改hi目录及其内部文件的属组为mygroup,-R递归) [root@Smoke ~]# ls -ld /tmp/hi/(查看hi目录本身信息,-l详细信息,-d目录本身) drwxr-xr-x 2 hadoop mygroup 4096 Jun 4 10:35 /tmp/hi/ [root@Smoke ~]# ls -l /tmp/hi/(查看hi目录下文件及子目录详细信息,属组已经改为mygroup,-l详细信息) total 424 -rwxr-xr-x 1 hadoop mygroup 1288 Jun 4 10:35 abrt-ccpp -rwxr-xr-x 1 hadoop mygroup 1628 Jun 4 10:35 abrtd -rwxr-xr-x 1 hadoop mygroup 1642 Jun 4 10:35 abrt-oops -rwxr-xr-x 1 hadoop mygroup 1725 Jun 4 10:35 acpid -rwxr-xr-x 1 hadoop mygroup 2062 Jun 4 10:35 atd -rwxr-xr-x 1 hadoop mygroup 3378 Jun 4 10:35 auditd -rwxr-xr-x 1 hadoop mygroup 4043 Jun 4 10:35 autofs
同时更改属主属组:
chown USERNAME:GRPNAME file,...
chown USERNAME.GRPNAME file,...
[root@Smoke ~]# chown root:root /tmp/abc(更改abc文件的属主属组为abc) [root@Smoke ~]# ll /tmp/abc -rw-r--r-- 1 root root 884 Jun 4 10:25 /tmp/abc [root@Smoke ~]# chown :hadoop /tmp/abc(更改abc文件属组为hadoop) [root@Smoke ~]# ll /tmp/abc(查看abc文件详细信息,属组被改为hadoop) -rw-r--r-- 1 root hadoop 884 Jun 4 10:25 /tmp/abc [root@Smoke ~]# ll /tmp/test(查看test文件详细信息) -rw-r--r-- 1 hadoop root 0 Jun 8 00:20 /tmp/test [root@Smoke ~]# chown --reference=/tmp/abc /tmp/test(将test文件的信息更改为跟abc一样) [root@Smoke ~]# ll /tmp/test(查看test文件详细信息,test文件属主属组都被更改) -rw-r--r-- 1 root hadoop 0 Jun 8 00:20 /tmp/test
修改文件权限:
chmod: 修改文件的权限
修改三类用户的权限:
chmod MODE file,...
-R:修改目录及其内部文件的属组,递归修改
--reference=/path/to/somefile file,...:引用参考,把指定文件的信息修改为跟reference路径的文件信息一样
rwxr-x---:八进制表示权限为750,如果写成75表示075,如果写成5表示005。
修改某类用户或某些类用户权限:
u,g,o,a(所有)
chmod 用户类别=MODE file,...
修改某类用户的某位或某些位权限:
u,g,o,a
chmod 用户类别+|-MODE file,...
[root@Smoke ~]# ls -l /tmp/abc(查看abc文件详细信息) -rw-r--r-- 1 root hadoop 884 Jun 4 10:25 /tmp/abc [root@Smoke ~]# chmod 750 /tmp/abc(更改abc权限为750) [root@Smoke ~]# ls -l /tmp/abc(查看abc文件详细信息) -rwxr-x--- 1 root hadoop 884 Jun 4 10:25 /tmp/abc [root@Smoke ~]# chmod 75 /tmp/abc(更改abc权限为075) [root@Smoke ~]# ls -l /tmp/abc(查看abc文件详细信息) ----rwxr-x 1 root hadoop 884 Jun 4 10:25 /tmp/abc [root@Smoke ~]# chmod 5 /tmp/abc(更改abc权限为005) [root@Smoke ~]# ls -l /tmp/abc(查看abc文件详细信息) -------r-x 1 root hadoop 884 Jun 4 10:25 /tmp/abc [root@Smoke ~]# ll /tmp/(查看/tmp目录下文件及子目录) -------r-x 1 root hadoop 884 Jun 4 10:25 abc -rw-r--r-- 1 root hadoop 0 Jun 8 00:20 test [root@Smoke ~]# chmod --reference=/tmp/test /tmp/abc(将abc文件的权限改为跟test一样) [root@Smoke ~]# ll /tmp/(查看/tmp目录及子目录详细信息) -rw-r--r-- 1 root hadoop 0 Jun 8 00:20 test -rw-r--r-- 1 root hadoop 884 Jun 4 10:25 abc [root@Smoke ~]# chmod u=rwx /tmp/abc(更改abc文件属主为读写执行) [root@Smoke ~]# ll /tmp/abc(查看abc文件详细信息) -rwxr--r-- 1 root hadoop 884 Jun 4 10:25 /tmp/abc [root@Smoke ~]# chmod g=rw- /tmp/abc(更改abc属组权限为读写,-可以不写) [root@Smoke ~]# ll /tmp/abc(查看abc文件详细信息) -rwxrw-r-- 1 root hadoop 884 Jun 4 10:25 /tmp/abc [root@Smoke ~]# chmod o=rx /tmp/abc(更改其他用户为读执行) [root@Smoke ~]# chmod g=r,o=r /tmp/abc(更改属组为只读,其他为只读) [root@Smoke ~]# ll /tmp/abc(查看abc文件详细信息) -rwxr--r-- 1 root hadoop 884 Jun 4 10:25 /tmp/abc [root@Smoke ~]# chmod go=rw /tmp/abc(将属组和其他都改为读写) [root@Smoke ~]# ll /tmp/abc(查看abc文件详细信息) -rwxrw-rw- 1 root hadoop 884 Jun 4 10:25 /tmp/abc [root@Smoke ~]# chmod g=rx,o= /tmp/abc(更改属组为rx,其他没有任何权限) [root@Smoke ~]# ll /tmp/abc(查看abc文件详细信息) -rwxr-x--- 1 root hadoop 884 Jun 4 10:25 /tmp/abc [root@Smoke ~]# chmod u-x /tmp/abc(去掉属主的执行权限) [root@Smoke ~]# ll /tmp/abc(查看abc文件详细信息) -rw-r-x--- 1 root hadoop 884 Jun 4 10:25 /tmp/abc [root@Smoke ~]# chmod u+x,g-x /tmp/abc(属主添加执行权限,属组去掉执行权限) [root@Smoke ~]# ll /tmp/abc(查看abc文件详细信息) -rwxr----- 1 root hadoop 884 Jun 4 10:25 /tmp/abc [root@Smoke ~]# chmod u-x /tmp/abc(去掉属主的执行权限) [root@Smoke ~]# ll /tmp/abc(查看abc文件详细信息) -rw-r----- 1 root hadoop 884 Jun 4 10:25 /tmp/abc [root@Smoke ~]# chmod a+x /tmp/abc(所有都加上执行权限) [root@Smoke ~]# ll /tmp/abc(查看abc文件详细信息) -rwxr-x--x 1 root hadoop 884 Jun 4 10:25 /tmp/abc [root@Smoke ~]# chmod -x /tmp/abc(所有都减掉执行权限) [root@Smoke ~]# ll /tmp/abc(查看abc文件详细信息) -rw-r----- 1 root hadoop 884 Jun 4 10:25 /tmp/abc [root@Smoke ~]# chmod u-wx /tmp/abc(属主去掉写和执行权限) [root@Smoke ~]# ll /tmp/abc(查看abc文件详细信息) -r--r----- 1 root hadoop 884 Jun 4 10:25 /tmp/abc
练习:
1、新建一个没有家目录的用户openstack;
# useradd -M openstack
2、复制/etc/skel为/home/openstack;
# cp -r /etc/skel /home/openstack
3、改变/home/openstack及其内部文件的属主属组均为openstack;
# chown -R openstack:openstack /home/openstack
4、/home/openstack及其内部的文件,属组和其它用户没有任何访问权限
# chmod -R go= /home/openstack
[root@Smoke ~]# useradd -M openstack(添加openstack,-M不指定用户家目录) [root@Smoke ~]# finger openstack(查看openstack注释信息) Login: openstack Name: Directory: /home/openstack Shell: /bin/bash Never logged in. No mail. No Plan. [root@Smoke ~]# ls /home/(查看openstack是否有家目录) blare hadoop nagios nfstest Smoke student tom user1 user3 user5 user6 user8 vistor [root@Smoke ~]# id openstack(查看openstack用户信息) uid=2004(openstack) gid=2004(openstack) groups=2004(openstack) [root@Smoke ~]# cp -r /etc/skel/ /home/openstack(拷贝skel目录及子目录文件到/home并重命名为openstack,-r递归) [root@Smoke ~]# ls -ld /home/openstack/(查看openstack目录权限,-l详细信息,-d目录本身) drwxr-xr-x 4 root root 4096 Jun 8 01:42 /home/openstack/ [root@Smoke ~]# ls -la /home/openstack/(查看openstack目录下文件及子目录向信息信息,-l详细信息,-a所有文件,包含隐藏文件) total 28 drwxr-xr-x 4 root root 4096 Jun 8 01:42 . drwxr-xr-x. 16 root root 4096 Jun 8 01:42 .. -rw-r--r-- 1 root root 18 Jun 8 01:42 .bash_logout -rw-r--r-- 1 root root 176 Jun 8 01:42 .bash_profile -rw-r--r-- 1 root root 124 Jun 8 01:42 .bashrc drwxr-xr-x 2 root root 4096 Jun 8 01:42 .gnome2 drwxr-xr-x 4 root root 4096 Jun 8 01:42 .mozilla [root@Smoke ~]# chown -R openstack.openstack /home/openstack/(更改openstack目录及子目录文件属主属组为openstack,-R递归) [root@Smoke ~]# ls -ld /home/openstack/(查看openstack目录本身,-l详细信息,-d目录本身) drwxr-xr-x 4 openstack openstack 4096 Jun 8 01:42 /home/openstack/ [root@Smoke ~]# ls -la /home/openstack/(查看openstack目录下文件及子目录详细信息,-l详细信息,-a所有文件) total 28 drwxr-xr-x 4 openstack openstack 4096 Jun 8 01:42 . drwxr-xr-x. 16 root root 4096 Jun 8 01:42 .. -rw-r--r-- 1 openstack openstack 18 Jun 8 01:42 .bash_logout -rw-r--r-- 1 openstack openstack 176 Jun 8 01:42 .bash_profile -rw-r--r-- 1 openstack openstack 124 Jun 8 01:42 .bashrc drwxr-xr-x 2 openstack openstack 4096 Jun 8 01:42 .gnome2 drwxr-xr-x 4 openstack openstack 4096 Jun 8 01:42 .mozilla [root@Smoke ~]# chmod -R go= /home/openstack/(更改openstack目录及子目录文件,属组及其他权限为没有) [root@Smoke ~]# ls -ld /home/openstack/(查看openstack目录信息,-l详细信息,-d目录本身) drwx------ 4 openstack openstack 4096 Jun 8 01:42 /home/openstack/ [root@Smoke ~]# ls -la /home/openstack/(查看openstack目录及子目录文件详细信息,-l详细信息,-a所有文件) total 28 drwx------ 4 openstack openstack 4096 Jun 8 01:42 . drwxr-xr-x. 16 root root 4096 Jun 8 01:42 .. -rw------- 1 openstack openstack 18 Jun 8 01:42 .bash_logout -rw------- 1 openstack openstack 176 Jun 8 01:42 .bash_profile -rw------- 1 openstack openstack 124 Jun 8 01:42 .bashrc drwx------ 2 openstack openstack 4096 Jun 8 01:42 .gnome2 drwx------ 4 openstack openstack 4096 Jun 8 01:42 .mozilla [root@Smoke ~]# su - openstack(切换到oepnstack,用户正常登录并有了家目录) [openstack@Smoke ~]$ [root@Smoke ~]# ls -l /etc/shadow(shadown文件权限为000,redhat5.x为400) ---------- 1 root root 1907 Jun 8 01:40 /etc/shadow 注意:shadown文件权限为000,redhat5.x为400,密码信息比较敏感不允许其他任何人查看,但是使用passwd修改的时候更改的密码要保存到这个文件里面, 不是没有写权限,其实无论怎么设定权限对管理员是无效的,就算改为不能读不能写,管理员也可以使用chmod改为读写,普通用户使用passwd也可以更改自己的 密码,普通用户修改的密码依然会保存到这个文件里面,但是普通用户没有任何权限,普通用户来访问passwd命令,命令启动起来就是个进程,这个进程代表身份 就是普通用户身份,而普通用户来访问这个文件时候即不是属主又不是属组,它还不是管理员,而只能是其他用户,而其他用户没有任何权限,如何将密码保存到此 文件中? [root@Smoke ~]# ls -l $(which passwd)(使用命令替换将which passwd执行结果输入给ls命令执行) -rwsr-xr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd 注意:passwd命令权限很独特,属主的权限是个s,就是这个s的存在才使得普通用户也照样也能够改密码。 [root@Smoke ~]# nano /etc/shadow(编辑shadow文件) hello [root@Smoke ~]# tail /etc/shadow(查看编辑的内容) user3::16228:0:99999:7::: user4:!!:16228:0:99999:7::: user5:!!:16228:0:99999:7::: user6:!!:16228:0:99999:7::: user7:!!:16228:0:99999:7::: sysuser:!!:16228:::::: sysuser2:!!:16228:::::: user8:!!:16228:0:99999:7::: openstack:!!:16228:0:99999:7::: hello 结果:所以管理员可以正常编辑shadow文件。 手动添加用户: 手动添加用户hive, 基本组为hive (5000),附加组为mygroup [root@Smoke ~]# nano /etc/group(编辑组文件) mygroup:x:515:user3,user6,hive hive:x:5000: [root@Smoke ~]# nano /etc/passwd(编辑passwd文件) hive:x:5000:5000:Hive:/home/hive:/bin/bash [root@Smoke ~]# date +%s 1402164923 [root@Smoke ~]# bc bc 1.06.95 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. 1402164923/86400 16228 quit [root@Smoke ~]# nano /etc/shadow hive:!!:16228:0:99999:7::: [root@Smoke ~]# cp -r /etc/skel/ /home/hive [root@Smoke ~]# chown -R hive.hive /home/hive/ [root@Smoke ~]# chmod -R go= /home/hive/ [root@Smoke ~]# ls -ld /home/hive/ drwx------ 4 hive hive 4096 Jun 8 02:22 /home/hive/ [root@Smoke ~]# ls -la /home/hive/ total 28 drwx------ 4 hive hive 4096 Jun 8 02:22 . drwxr-xr-x. 17 root root 4096 Jun 8 02:22 .. -rw------- 1 hive hive 18 Jun 8 02:22 .bash_logout -rw------- 1 hive hive 176 Jun 8 02:22 .bash_profile -rw------- 1 hive hive 124 Jun 8 02:22 .bashrc drwx------ 2 hive hive 4096 Jun 8 02:22 .gnome2 drwx------ 4 hive hive 4096 Jun 8 02:22 .mozilla [root@Smoke ~]# su - hive(切换到hive用户) [hive@Smoke ~]$ id(查看当前用户帐号信息) uid=5000(hive) gid=5000(hive) groups=5000(hive),515(mygroup) 由于/etc/shadow文件中hive用户的帐号是锁定!!,没有设置密码,无法正常登录,所以需要生成密码 [hive@Smoke ~]$ openssl passwd(opensll生成密码,输入两次密码,生成字符串) Password: Verifying - Password: ckc6yx6DwmL6. 但是这里没有往密码中加盐,因为/etc/shadow文件中的用户密码都加入调味盐,让其不同相同密码用户不会导致字符串一样。 [hive@Smoke ~]$ whatis passwd passwd (1) - update user's authentication tokens passwd (5) - password file passwd [sslpasswd] (1ssl) - compute password hashes [hive@Smoke ~]$ man sslpasswd passwd - compute password hashes -1:指定加密算法,1是md5。 -salt string:指定盐,杂质。 [hive@Smoke ~]$ openssl passwd -1 -salt '12345678'(openssl生成密码串,-1代表md5,-salt加入8位字符) Password: $1$12345678$1X.khkQVJbTq3.0kwYfM40 [root@Smoke ~]# nano /etc/shadow hive:$1$12345678$1X.khkQVJbTq3.0kwYfM40:16228:0:99999:7::: 测试:通过在Xshell新建新的会话,通过帐号hive密码smoke520登录系统,能够正常登录,手动添加用户测试正常。
bc使用方法:
[root@Smoke ~]# bc bc 1.06.95 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. 1*2 2 3/5 0(注意:没有小数位,没有保留精度,只是是圆整的,圆整就是把小数东西直接去了) scale=2(指定保留两位精度) 3/5 .60 quit
默认权限:
管理员:
文件默认权限:644
目录默认权限:755
普通用户:
文件默认权限:664
目录默认权限:775
linux内在法则文件默认都没有执行权限,
umask:遮罩码,用户创建文件或目录用到的遮罩码
# umask(查看当前用户遮罩码)
# umask 022(设定遮罩码)
666-umask:创建文件使用666减去遮罩码
777-umask:创建目录使用777减去遮罩码
管理员遮罩码是022
创建文件权限为:644
创建目录权限为:755
普通用户遮罩码是002创建文件权限为:664
创建目录权限为:775
普通用户umask: 023
文件:666-023=643 X(文件有执行权限)
目录:777-023=754
注意:文件默认不能具有执行权限,如果算得的结果中有执行权限,则将其权限加1;
[root@Smoke ~]# cd /tmp/(切换到/tmp目录) [root@Smoke tmp]# touch hellosa(创建hellosa文件) [root@Smoke tmp]# ls -l hellosa(查看hellosa文件详细信息) -rw-r--r-- 1 root root 0 Jun 8 16:26 hellosa[root@Smoke tmp]# mkdir testdir(创建testdir目录) [root@Smoke tmp]# ls -ld testdir/(查看testdir目录详细信息,-l详细信息,-d目录本身) drwxr-xr-x 2 root root 4096 Jun 8 16:28 testdir/ 普通用户: [hive@Smoke ~]$ touch test [hive@Smoke ~]$ mkdir testdir [hive@Smoke ~]$ ls -l total 4 -rw-rw-r-- 1 hive hive 0 Jun 8 16:30 test drwxrwxr-x 2 hive hive 4096 Jun 8 16:30 testdir [root@Smoke ~]# umask(管理员的遮罩码是022) 0022 [hive@Smoke ~]$ umask(普通用户的遮罩码是002) 0002 [hive@Smoke ~]$ umask 022(设置普通用户hive的遮罩码为022) [hive@Smoke ~]$ umask(查看用户遮罩码) 0022 [hive@Smoke ~]$ touch hello(创建hello文件) [hive@Smoke ~]$ mkdir hellosa(创建目录hellosa) [hive@Smoke ~]$ ll(查看创建的hello文件全为644,hellosa目录为755) total 8 -rw-r--r-- 1 hive hive 0 Jun 8 16:40 hello drwxr-xr-x 2 hive hive 4096 Jun 8 16:40 hellosa -rw-rw-r-- 1 hive hive 0 Jun 8 16:30 test drwxrwxr-x 2 hive hive 4096 Jun 8 16:30 testdir [hive@Smoke ~]$ rm -rf ./*(删除当前目录下所有文件,-r删除目录及目录下文件,-f强制删除) [hive@Smoke ~]$ touch abc(创建文件abc) [hive@Smoke ~]$ mkdir dir(创建dir目录) [hive@Smoke ~]$ ll(查看当前目录文件详细信息,abc权限为644,目录权限为754,文件和算的权限不一样) total 4 -rw-r--r-- 1 hive hive 0 Jun 8 16:46 abc drwxr-xr-- 2 hive hive 4096 Jun 8 16:46 dir [hive@Smoke ~]$ umask 027(设置遮罩码为027) [hive@Smoke ~]$ umask(查看遮罩码) 0027 [hive@Smoke ~]$ touch hello(创建文件hello) [hive@Smoke ~]$ mkdir hellodir(创建hellodir目录) [hive@Smoke ~]$ ll(查看当前目录文件子目录详细信息, hello权限为640,hellodir权限为750) total 8 -rw-r--r-- 1 hive hive 0 Jun 8 16:46 abc drwxr-xr-- 2 hive hive 4096 Jun 8 16:46 dir -rw-r----- 1 hive hive 0 Jun 8 16:52 hello drwxr-x--- 2 hive hive 4096 Jun 8 16:53 hellodir [hive@Smoke ~]$ logout 重新使用终端通过用户名加密码登录hive用户 [hive@Smoke ~]$ umask(查看遮罩码又变为002) 0002
站在用户登录的角度来说,SHELL的类型:
登录式shell:
正常通常某终端登录
su - USERNAME
su -l USERNAME
非登录式shell:
su USERNAME
图形终端下打开命令窗口
自动执行的shell脚本
bash的配置文件:
全局配置
/etc/profile, /etc/profile.d/*.sh, /etc/bashrc
个人配置
~/.bash_profile, ~/.bashrc
profile类的文件:
设定环境变量
运行命令或脚本
bashrc类的文件:
设定本地变量
定义命令别名
设置环境变量想对所有用户生效放到/etc/profile或在/etc/profile.d/下建立一个以.sh结尾的文件,在里面定义,如果只想对当前用户生效编辑自己家目录下的~/.bash_profile文件,所以放到个人配置里面只对当前用户生效,放到全局对所有用户都生效,如果两个文件里面都有,一个环境变量在全局也定义了,在个人配置也定义了,而且结果还不一样,以个人配置的为准,作用范围越小的越是最终生效的。
登录式shell,配置文件及次序:
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
非登录式shell:
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
profile: 定义环境变量、运行程序或脚本
bashrc:定义本地变量、命令别名
[hive@Smoke ~]$ alias cls=clear(定义clear命名别名为cls)
[hive@Smoke ~]$ cls(可以使用)
[hive@Smoke ~]$ logout
重新使用终端通过用户名加密码登录hive用户
[hive@Smoke ~]$ cls(定义的cls别名不能使用)
-bash: cls: command not found
总结:不能生效,不能跨shell生效,要想生效编辑~/.bashrc文件[hive@Smoke ~]$ nano .bashrc(编辑个人配置文件bashrc添加需要定义的命令别名)
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# User specific aliases and functions
alias cls='clear'
[hive@Smoke ~]$ cls(不能用)
-bash: cls: command not found.
原因:shell读取配置文件在执行那一刻读取,现在已经执行好了,因此现在编辑也无效,只能对下次登录有效
[hive@Smoke ~]$ logout(退出)
重新使用终端通过用户名加密码登录hive用户
[hive@Smoke ~]$ cls(可以使用)
[hive@Smoke ~]$ nano .bash_profile(编辑bash_profile文件,定义命令脚本)
echo "Hello, hive. Welcome to our system. It is `date`."
[hive@Smoke ~]$ logout(退出)
重新使用终端通过用户名加密码登录hive用户
Connecting to 172.16.100.1:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Last login: Sun Jun 8 17:33:01 2014 from 172.16.100.254
Hello, hive. Welcome to our system. It is Sun Jun 8 17:41:31 CST 2014.
定义umask对当前用户生效:
[hive@Smoke ~]$ nano .bash_profile
umask 027
[hive@Smoke ~]$ logout(退出)
重新使用终端通过用户名加密码登录hive用户
[hive@Smoke ~]$ umask(查看遮罩码为027,永久有效)
0027
为什么默认是002:[hive@Smoke ~]$ cat /etc/bashrc
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then(解释:如果用户UDI大于199并且GID和UID一样,那么用户的umask是002)
umask 002
else(否则umask为022)
umask 022
fi
[hive@Smoke ~]$ id(查看用户帐号信息)
uid=5000(hive) gid=5000(hive) groups=5000(hive),515(mygroup)
结果:hive用户的uid>199,并且uid和gid一样,所以默认umask是002
bash:脚本解释器
计算机五大部件:
运算器、控制器: CPU
存储器:RAM
输入设备/输出设备
程序:是由指令和数据组成
控制器:读取指令,并在指令控制下去读取要进行的运算包括数据和要执行的计算,控制器会控制告诉我们运算器到那去取数据,把数据取过来以后,运算器开始做运算,运算的结果由控制器的控制下输出到存储器当中
运算器:整个运算过程由运算器完成
存储器:
地址总线:内存寻址
数据总线:传输数据
控制总结:控制指令
寄存器:CPU暂时存储器
I/O: 硬盘,键盘/鼠标
程序
INPUT设备:输入设备
OUTPUT设备:输出设备
系统设定
默认输出设备:标准输出,STDOUT, 1
默认输入设备:标准输入, STDIN, 0
标准错误输出:STDERR, 2
标准输入:键盘
标准输出和错误输出:显示器
I/O重定向:本来输入设备是键盘,但是改成了别的,就是输入设备重定向,输出也可以重定向,错误输出也能重定向,改变了输入来源或输出来源的
Linux:
>: 覆盖输出,原有的内容会被覆盖
>>:追加输出,保留此前文件原有内容
set -C: 禁止对已经存在文件使用覆盖重定向;
强制覆盖输出,则使用 >|
set +C: 关闭上述功能
2>: 重定向错误输出
2>>: 追加方式
标准输出和标准错误输出属于不同的数据流
ls /var/ > /tmp/var3.out 2> /tmp/err.out:将ls执行结果标准输出重定向到var3.out,标准错误输出重定向到err.out
&>: 重定向标准输出或错误输出至同一个文件
<:输入重定向
<<:Here Document在此处生成文档
cat << END/EOF(END OF FILE):END/EOF结束符
cat >> /tmp/myfile.txt << EOF:将cat的内容追加输出到myfile.txt,<< EOF生成文档
管道:前一个命令的输出,作为后一个命令的输入
命令1 | 命令2 | 命令3 | ...
tee:从标准输入读取数据,并且发送至标准输出和文件,可以实现将一个数据即保存到文件中又能够输出到显示器
[hive@Smoke ~]$ ls /var/(查看/var目录下的文件及子目录) account crash db ftp games lib lock mail opt run tmp yp cache cvs empty ftproot gdm local log nis preserve spool www [hive@Smoke ~]$ ls /var/ > /tmp/var.out(将ls执行结果输出重定向到var.out文件) [hive@Smoke ~]$ cat /tmp/var.out(查看var.out) account cache crash cvs db empty ftp ftproot games gdm lib local lock log mail nis opt preserve run spool tmp www yp [hive@Smoke ~]$ cat /etc/fstab UUID=9f66aadb-2e9a-49d5-9748-ceceea2d41f0 / ext4 defaults 1 1 UUID=67344573-c4c0-4b5f-beae-e6837a9712f7 /boot ext4 defaults 1 2 UUID=fb6d8ea4-ed81-4024-bcbc-7bc44f431282 swap swap defaults 0 0 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 [hive@Smoke ~]$ cat /etc/fstab > /tmp/var.out(将cat执行结果输出到var.out文件) [hive@Smoke ~]$ cat /tmp/var.out(查看var.out) # # /etc/fstab # Created by anaconda on Mon Apr 14 08:18:01 2014 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # UUID=9f66aadb-2e9a-49d5-9748-ceceea2d41f0 / ext4 defaults 1 1 UUID=67344573-c4c0-4b5f-beae-e6837a9712f7 /boot ext4 defaults 1 2 UUID=fb6d8ea4-ed81-4024-bcbc-7bc44f431282 swap swap defaults 0 0 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 [hive@Smoke ~]$ ls /var >> /tmp/var.out(将ls执行结果追加到var.out文件) [hive@Smoke ~]$ cat /tmp/var.out(查看var.out文件) UUID=9f66aadb-2e9a-49d5-9748-ceceea2d41f0 / ext4 defaults 1 1 UUID=67344573-c4c0-4b5f-beae-e6837a9712f7 /boot ext4 defaults 1 2 UUID=fb6d8ea4-ed81-4024-bcbc-7bc44f431282 swap swap defaults 0 0 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 account cache crash cvs db empty ftp ftproot games gdm lib local lock log mail nis opt preserve run spool tmp www yp [hive@Smoke ~]$ set -C(打开禁止对已经存在文件使用覆盖重定向) [hive@Smoke ~]$ ls /usr > /tmp/var.out(将ls执行结果覆盖输出到var.out) -bash: /tmp/var.out: cannot overwrite existing file(不允许覆盖已经存在的文件) [hive@Smoke ~]$ set +C(关闭进制对已经存在文件使用覆盖重定向) [hive@Smoke ~]$ ls /usr/ > /tmp/var.out(将ls执行结果覆盖输出到var.out) [hive@Smoke ~]$ set -C(打开禁止对已经存在文件使用覆盖重定向) [hive@Smoke ~]$ ls /usr/ > /tmp/var.out(将ls执行结果覆盖输出到var.out) -bash: /tmp/var.out: cannot overwrite existing file(不允许覆盖已经存在的文件) [hive@Smoke ~]$ ls /usr/ >| /tmp/var.out(将ls执行结果强制覆盖输出到var.out) [hive@Smoke ~]$ set +C(关闭进制对已经存在文件使用覆盖重定向) [hive@Smoke ~]$ ls /varr > /tmp/var2.out(将ls执行结果输出到var2.out,var写错成varr,无法标准输出重定向) ls: cannot access /varr: No such file or directory [hive@Smoke ~]$ ls /varr 2> /tmp/var2.out(将ls错误执行结果输出到var2.out) [hive@Smoke ~]$ cat /tmp/var2.out(查看var2.out文件) ls: cannot access /varr: No such file or directory [hive@Smoke ~]$ ls /varr > /tmp/var3.out 2> /tmp/err.out(将ls执行结果标准输出重定向到var3.out,标准错误输出重定向到err.out) [hive@Smoke ~]$ cat /tmp/err.out(查看err.out文件) ls: cannot access /varr: No such file or directory [hive@Smoke ~]$ ls /var/ > /tmp/var3.out 2> /tmp/err.out(将ls执行结果标准输出重定向到var3.out,标准错误输出重定向到err.out) [hive@Smoke ~]$ cat /tmp/var3.out(查看var3.out文件) account cache crash cvs db empty ftp ftproot games gdm lib local lock log mail nis opt preserve run spool tmp www yp [hive@Smoke ~]$ ls /var6 &> /tmp/var5.out(将标准输出和错误标准输出都重定向到var5.out) [hive@Smoke ~]$ cat /tmp/var5.out(查看var5.out文件) ls: cannot access /var6: No such file or directory [hive@Smoke ~]$ ls /var &> /tmp/var5.out(将标准输出和错误标准输出都重定向到var5.out) [hive@Smoke ~]$ cat /tmp/var5.out(查看var5.out文件) account cache crash cvs db empty ftp ftproot games gdm lib local lock log mail nis opt preserve run spool tmp www yp [hive@Smoke ~]$ cat < /etc/fstab UUID=9f66aadb-2e9a-49d5-9748-ceceea2d41f0 / ext4 defaults 1 1 UUID=67344573-c4c0-4b5f-beae-e6837a9712f7 /boot ext4 defaults 1 2 UUID=fb6d8ea4-ed81-4024-bcbc-7bc44f431282 swap swap defaults 0 0 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 [hive@Smoke ~]$ tr 'a-z' 'A-Z' /etc/fstab(tr不能跟文件名,报错误) tr: extra operand `/etc/fstab' Try `tr --help' for more information. [hive@Smoke ~]$ tr 'a-z' 'A-Z' < /etc/fstab(使用输入重定向将fstab内容输入让tr将小写换为大写) UUID=9F66AADB-2E9A-49D5-9748-CECEEA2D41F0 / EXT4 DEFAULTS 1 1 UUID=67344573-C4C0-4B5F-BEAE-E6837A9712F7 /BOOT EXT4 DEFAULTS 1 2 UUID=FB6D8EA4-ED81-4024-BCBC-7BC44F431282 SWAP SWAP DEFAULTS 0 0 TMPFS /DEV/SHM TMPFS DEFAULTS 0 0 DEVPTS /DEV/PTS DEVPTS GID=5,MODE=620 0 0 SYSFS /SYS SYSFS DEFAULTS 0 0 PROC /PROC PROC DEFAULTS 0 0 [hive@Smoke ~]$ cat << END(在此处生成文档,END文件结束标记) > The first line. > The second line. > END The first line. The second line. [root@Smoke ~]# cat >> /tmp/myfile.txt << EOF(将cat的内容追加输出到myfile.txt,<< EOF生成文档) > The first line. > The second line. > EOF [root@Smoke ~]# cat /tmp/myfile.txt(查看myfile.txt文件) The first line. The second line. [root@Smoke ~]# echo "hello,world." | tr 'a-z' 'A-Z'(将echo内容通过管道输出给tr将小写换成大写) HELLO,WORLD. [root@Smoke ~]# echo "redhat" | passwd --stdin hive(将echo内容通过管道送给passwd更改hive用户密码,--从标准输入读取密码,标准输入键盘) Changing password for user hive. passwd: all authentication tokens updated successfully. [root@Smoke ~]# cat /etc/passwd | sort(将cat显示passwd文件内容,通过管道输入给sort进行排序,默认升序) abrt:x:173:173::/etc/abrt:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin apache:x:48:48:Apache:/var/www:/sbin/nologin avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin [root@Smoke ~]# cut -d: -f1 /etc/passwd | sort(对文件passwd通过冒号进行分段并取出第一段,通过管道输入给sort进行排序,默认升序) abrt adm apache avahi-autoipd bin daemon dbus ftp games gdm [root@Smoke ~]# cut -d: -f3 /etc/passwd | sort(对文件passwd通过冒号进行分段并取出第三段,通过管道输入给sort进行排序,默认升序) 0 1 10 1003 1004 1005 1006 11 [root@Smoke ~]# cut -d: -f3 /etc/passwd | sort -n对文件passwd通过冒号进行分段并取出第三段,通过管道输入给sort进行排序,-n按字符大小排序,默认升序) 0 1 2 3 4 5 6 7 [root@Smoke ~]# cut -d: -f1 /etc/passwd | sort | tr 'a-z' 'A-Z'(对文件passwd通过冒号进行分段并取出第一段,通过管道输入给sort进行排序,默认升序, 并将排序结果输入给tr将所有小写字母更好成大写) ABRT ADM APACHE AVAHI-AUTOIPD BIN DAEMON DBUS FTP GAMES GDM GOPHER [root@Smoke ~]# ls /var | tr 'a-z' 'A-Z'(将ls命令的输出通过管道输入给tr将文件名小写全更换为大写) ACCOUNT CACHE CRASH CVS DB EMPTY FTP FTPROOT GAMES GDM LIB LOCAL LOCK LOG MAIL NIS OPT PRESERVE RUN SPOOL TMP WWW YP [root@Smoke ~]# echo "Hello,World." | tee /tmp/hello.out(将echo命令的输出通过管道输入给tee,将内容保存至hello.out文件,并显示出来) Hello,World. [root@Smoke ~]# cat /tmp/hello.out(查看hello.out文件) Hello,World. [root@Smoke ~]# wc -l /etc/passwd | cut -d' ' -f1(只显示passwd文件有多少行,不显示目录,将wc命令的输出通过管道输入给cut,通过空白进行分段,并显示第一行) 53
练习:
1、统计/usr/bin/目录下的文件个数;
# ls /usr/bin | wc -l
2、取出当前系统上所有用户的shell,要求,每种shell只显示一次,并且按顺序进行显示;
# cut -d: -f7 /etc/passwd | sort -u
3、思考:如何显示/var/log目录下每个文件的内容类型?
file /var/log/*
4、取出/etc/inittab文件的第6行;
# head -6 /etc/inittab | tail -1
5、取出/etc/passwd文件中倒数第9个用户的用户名和shell,显示到屏幕上并将其保存至/tmp/users文件中;
# tail -9 /etc/passwd | head -1 | cut -d: -f1,7 | tee /tmp/users
6、显示/etc目录下所有以pa开头的文件,并统计其个数;
# ls -d /etc/pa* | wc -l
7、不使用文本编辑器,将alias cls=clear一行内容添加至当前用户的.bashrc文件中;
# echo "alias cls=clear" >> ~/.bashrc
1、 [root@Smoke ~]# ls /usr/bin/ | wc -l(显示bin目录下有多少文件子目录,将ls命令执行结果通过管道输入给wc统计,-l行数) 1642 [root@Smoke ~]# ls -l /usr/bin/ | wc -l(显示bin目录下有多少文件子目录,将ls命令执行结果通过管道输入给wc统计,-l行数) 1643 [root@Smoke ~]# ls -l /usr/bin/ | head -n 1(将ls命令执行结果通过管道输入给head只显示第一行) total 214204(文件总体大小) 2、 [root@Smoke ~]# cut -d: -f7 /etc/passwd | sort -u /bin/bash /bin/false /bin/sync /bin/tcsh /sbin/halt /sbin/nologin /sbin/shutdown 3、 [root@Smoke ~]# file /var/log/* [root@Smoke ~]# cd /var/log/ [root@Smoke log]# file `ls /var/log/` 4、 [root@Smoke ~]# head -6 /etc/inittab | tail -1 # 5、 [root@Smoke ~]# tail -9 /etc/passwd | head -1 | cut -d: -f1,7 | tee /tmp/users user4:/bin/bash 6、 [root@Smoke ~]# ls -d /etc/pa* | wc -l 5 7、 [root@Smoke ~]# echo "alias cls=clear" >> ~/.bashrc [root@Smoke ~]# printf "alias cls=clear" >> ~/.bashrc
grep, egrep, fgrep
grep: 根据模式搜索文本,并将符合模式的文本行显示出来。
Pattern: 模式,文本字符和正则表达式的元字符组合而成匹配条件
grep [options] PATTERN [FILE...]
-i,--ignore-case:忽略大小写
--color[=WHEN],--colour[=WHEN]:显示颜色
-v: 显示没有被模式匹配到的行
-o:只显示被模式匹配到的字符串
-E: 使用扩展正则表达式
-A #: 当某一行被grep指定的模式所匹配到以后,不但显示这一行,还会显示匹配到这一行后的多少行,#代表数值
-B #: 当某一行被grep指定的模式所匹配到以后,不但显示这一行,还会显示匹配到这一行前的多少行,#代表数值
-C #: 当某一行被grep指定的模式所匹配到以后,不但显示这一行,还会显示匹配到这一行前行后的多少行,#代表数值
文件名通配符:
*: 任意长度的任意字符
?:任意单个字符
[]:匹配指定范围内的任意单个字符
[^]: 匹配指定范围之外的任意单个字符
正则表达式:部分匹配,显示的是整行
正则表达式:REGular EXPression, REGEXP
元字符:
.: 匹配任意单个字符
[]: 匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
[abc], [a-m], [a-z], [A-Z], [0-9], [a-zA-Z], [0-9a-zA-Z]
字符集合:[:digit:]数字, [:lower:]小写字母, [:upper:]大写字母, [:punct:]标点符号, [:space:]空白字符, [:alpha:]所有字母, [:alnum:]所有数字字母
匹配次数(贪婪模式):
*: 匹配其前面的字符任意次
a, b, ab, aab, acb, adb, amnb
a*b, a?b
a.*b
.*: 任意长度的任意字符
\?: 匹配其前面的字符1次或0次
\{m,n\}:匹配其前面的字符至少m次,至多n次
\{1,\}:匹配其面前的字符至少1次
\{0,3\}:匹配其前面的字符至多3次
位置锚定:
^: 锚定行首,此字符后面的任意内容必须出现在行首
$: 锚定行尾,此字符前面的任意内容必须出现在行尾
^$: 空白行
\<或\b: 锚定词首,其后面的任意字符必须作为单词首部出现
\>或\b: 锚定词尾,其前面的任意字符必须作为单词的尾部出现
\<root\>或\broot\b:在整个文件每一行找root单词,必须作为整个单词出现
分组:
\(\):把内容分组
\(ab\)*:把ab当成整体,ab可以出现任意次
后向引用
\1: 引用第一个左括号以及与之对应的右括号所包括的所有内容
\2: 引用第二个左括号以及与之对应的右括号所包括的所有内容
\3: 引用第三个左括号以及与之对应的右括号所包括的所有内容
He love his lover.
She liker her lover.
He like his liker.
She lover her liker.
l..e
'\(l..e\).*\1'
[root@Smoke ~]# grep 'root' /etc/passwd(查找passwd文件包含root的字符的行)
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
virtual:x:501:501::/var/ftproot:/sbin/nologin
[root@Smoke ~]# grep -i 'root' /etc/passwd(查找passwd文件包含root的字符的行,-i不区分大小写)
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
virtual:x:501:501::/var/ftproot:/sbin/nologin
[root@Smoke ~]# grep --color=auto 'root' /etc/passwd(查找passwd文件中包含root字符的行,--color使用高亮显示)
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
virtual:x:501:501::/var/ftproot:/sbin/nologin
[root@Smoke ~]# alias grep='grep --color'(给grep --color取别名叫grep)
[root@Smoke ~]# grep -v 'root' /etc/passwd(查找passwd文件中包含root字符的行,-v显示没有被root匹配到的行)
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
[root@Smoke ~]# grep -o 'root' /etc/passwd(查找passwd文件中包含root的字符,-o只显示匹配到的字符串)
root
root
root
root
root
[root@Smoke ~]# grep 'r..t' /etc/passwd(查找passwd文件中包含r开头t结尾中间任意两个字符)
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
virtual:x:501:501::/var/ftproot:/sbin/nologin
[root@Smoke ~]# nano test.txt(编辑test.txt文件)
a
b
ab
aab
acb
amnb
amnbmnbmnb
[root@Smoke ~]# grep 'a.*b' test.txt(查找test.txt文件中a开头b结尾中间任意长度任意字符)
ab
aab
acb
amnb
amnbmnbmnb
[root@Smoke ~]# grep 'a*b' test.txt(查找test.txt文件中以a开头任意次数后面b)
b
ab
aab
acb
amnb
amnbmnbmnb
[root@Smoke ~]# grep 'a\?b' test.txt(查找test.txt文件中a可有可无后面跟b)
b
ab
aab
acb
amnb
amnbmnbmnb
[root@Smoke ~]# grep 'a\{1,3\}b' test.txt(查找test.txt文件中a至少1次至多3次后面跟b)
ab
aab
[root@Smoke ~]# grep 'a.\{1,3\}b' test.txt(查找test.txt文件中a和b之间出现1个字符2个字符3个字符,而且什么字符都可以,至少有1个至多有3个)
aab
acb
amnb
amnbmnbmnb
[root@Smoke ~]# grep 'r..t' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
virtual:x:501:501::/var/ftproot:/sbin/nologin
[root@Smoke ~]# grep '^r..t' /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@Smoke ~]# grep 'w$' /etc/inittab(查找inittab文件w结尾的行)
# For information on how to write upstart event handlers, or how
[root@Smoke ~]# grep 'b..h$' /etc/passwd(查找passwd文件中b和h之间跟任意两个字符,并且必须出现在行尾)
root:x:0:0:root:/root:/bin/bash
Smoke:x:500:500:Smoke:/home/Smoke:/bin/bash
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
hadoop:x:502:502::/home/hadoop:/bin/bash
nfstest:x:510:510::/home/nfstest:/bin/bash
student:x:512:512::/home/student:/bin/bash
vistor:x:513:513::/home/vistor:/bin/bash
tom:x:514:514::/home/tom:/bin/bash
user4:x:1003:1003:Tony Blare:/home/blare:/bin/bash
user7:x:1006:1006::/home/user7:/bin/bash
sysuser:x:495:492::/home/sysuser:/bin/bash
user8:x:2003:2003::/home/user8:/bin/bash
openstack:x:2004:2004::/home/openstack:/bin/bash
hive:x:5000:5000:Hive:/home/hive:/bin/bash
[root@Smoke ~]# grep '^$' /etc/inittab | wc -l(查找inittab文件存在空白字符的行将结果通过管道输入wc统计行数)
9
[root@Smoke ~]# grep '[[:digit:]]$' /etc/inittab(查找inittab文件中以数字结尾的行)
# 5 - X11
[root@Smoke ~]# grep '[[:space:]][[:digit:]]$' /etc/inittab(查找inittab文件中以一个或多个空白字符后面跟数字结尾的行)
[root@Smoke ~]# nano test2.txt
This is root.
The user is mroot.
rooter is a dog's name.
chroot is a command.
mrooter is not a word.
[root@Smoke ~]# grep 'root\>' test2.txt(查找test2.txt文件中root必须出现在词尾的行)
This is root.
The user is mroot.
chroot is a command.
[root@Smoke ~]# grep '\<root' test2.txt(查找test2.txt文件中root必须出现在词首的行)
This is root.
rooter is a dog's name.
[root@Smoke ~]# grep '\<root\>' test2.txt(查找test2.txt文件中root单词的行)
This is root.
[root@Smoke ~]# grep '\broot\b' test2.txt(查找test2.txt文件中root单词的行)
This is root.
[root@Smoke ~]# nano test3.txt(编辑test3.txt文件)
He love his lover.
She liker her lover.
He like his liker.
She lover her liker.
[root@Smoke ~]# grep 'l..e' test3.txt(查找test3.txt文件中l和e中间任意连个字符)
He love his lover.
She liker her lover.
He like his liker.
She lover her liker
[root@Smoke ~]# nano test3.txt(编辑test3.txt文件)
He love his lover.
She liker her lover.
He like his liker.
She lover her liker.
She like him.
[root@Smoke ~]# grep 'l..e.*l..er' test3.txt(查找test3.txt文件中l和e之间任意两个字符,l和er之间任意两个字符,中间任意长度任意字符)
He love his lover.
She liker her lover.
He like his liker.
She lover her liker.
[root@Smoke ~]# grep '\(l..e\).*\1' test3.txt(查找test3.txt文件中l和e之间任意两个字符并且后面和前面字符相同)
He love his lover.
He like his liker.
[root@Smoke ~]# grep '\([[:digit:]]\).*\1$' /etc/inittab(查找inittab文件任意地方是数字,而且行尾必须和这个数字相同)
# 5 - X11
练习:
1、显示/proc/meminfo文件中以不区分大小的s开头的行;
grep -i '^s' /proc/meminfo grep '^[sS]' /proc/meminfo
2、显示/etc/passwd中以nologin结尾的行;
grep 'nologin$' /etc/passwd
取出默认shell为/sbin/nologin的用户列表
grep "nologin$' /etc/passwd | cut -d: -f1
取出默认shell为bash,且其用户ID号最小的用户的用户名
grep 'bash$' /etc/passwd | sort -n -t: -k3 | head -1 | cut -d: -f1
3、显示/etc/inittab中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行;
grep "^#[[:space:]]\{1,\}[^[:space:]]" /etc/inittab
4、显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行;
grep ':[0-9]:' /etc/inittab
5、显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行;
grep '^[[:space:]]\{1,\}' /boot/grub/grub.conf
6、显示/etc/inittab文件中以一个数字开头并以一个与开头数字相同的数字结尾的行;
grep '^\([0-9]\).*\1$' /etc/inittab
练习:
1、找出某文件中的,1位数,或2位数;
grep '[0-9]\{1,2\}' /proc/cpuinfo
grep --color '\<[0-9]\{1,2\}\>' /proc/cpuinfo
2、找出ifconfig命令结果中的1-255之间的整数;
ifconfig | egrep --color '\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-5][0-5])\>'
3、查找当前系统上名字为student(必须出现在行首)的用户的帐号的相关信息, 文件为/etc/passwd
grep '^student\>' /etc/passwd | cut -d: -f3 id -u student student1 student2
练习:分析/etc/inittab文件中如下文本中前两行的特征(每一行中出现在数字必须相同),请写出可以精确找到类似两行的模式:
l1:1:wait:/etc/rc.d/rc 1
l3:3:wait:/etc/rc.d/rc 3
grep '^l\([0-9]\):\1.*\1$' /etc/inittab
浙公网安备 33010602011771号