总结:(IO重定向 用户、组及权限)

文件描述符

当打开一个进程时,系统会分配一个唯一的文件描述符,可以在/proc中查到,

[root@localhost /data]#tail -f abc.txt     #当前终端打开一个进程
a
b
c
[root@localhost ~]#pidof tail         #另开一个终端,查看该进程号
2968
[root@localhost ~]#ls /proc |grep 2968     #在/proc查到
2968 
[root@localhost ~]#ls /proc/2968/fd -l         #可以查看指向该文件  
total 0
lrwx------. 1 root root 64 Apr 29 19:39 0 -> /dev/pts/2
lrwx------. 1 root root 64 Apr 29 19:39 1 -> /dev/pts/2
lrwx------. 1 root root 64 Apr 29 19:39 2 -> /dev/pts/2
lr-x------. 1 root root 64 Apr 29 19:39 3 -> /data/abc.txt
lr-x------. 1 root root 64 Apr 29 19:39 4 -> anon_inode:inotify
[root@localhost ~]#cat /proc/2968/fd/3        #在里面可以查看内容
a
b
c

输入输出

默认情况下,输出在当前终端,改变默认方式就需要重定向

涵义 符号
标准覆盖 > 1>
标准追加 >> 1>>
标准错误覆盖 2>
标准错误追加 2>>

set -c 禁止覆盖
>| 强制覆盖
set +c 允许覆盖

[root@localhost /data]#ll /data /xxx >fi.log 2>fi.log     #标准输出一个文件,标准错误一个文件
root@localhost /data]#ll /data /xxx >fi.log 2>&1       #以下三个都是标准输出、标准错误同一个文件
[root@localhost /data]#ll /data /xxx 2>fi.log 1>&2
[root@localhost /data]#ll /data /xxx &>fi.log
[root@localhost /data]#ll /data /xxx 2>&1 >fi.log     #标准输出一个文件、标准错误终端显示
ls: cannot access /xxx: No such file or directory

优先级>大于;

[root@localhost /data]#(hostnam;ls)&>all.log
[root@localhost /data]#hostnam;ls&>all.log
bash: hostnam: command not found...

tr

参数 涵义
-d 删除
-c 取反
-s 压缩
[a-z] [A-Z] 小写转换为大写
\n(换行) \r(回车) 识别特殊符号
[root@localhost /data]#cat /etc/issue |tr [a-z] [A-Z]
\S
KERNEL \R ON AN \M
CURRENT LOGIN TERMINAL IS \L NOW THE TIME IS \T HOSTNAME IS \N
[root@localhost /data]#file all.log abc.txt 
all.log: ASCII text
abc.txt: ASCII text, with CRLF line terminators
[root@localhost /data]#hexdump -c abc.txt 
0000000   a  \r  \n   b  \r  \n   c                                    
0000007
[root@localhost /data]#hexdump -c all.log 
0000000   a  \n   b  \n   c  \n                                        
0000006
[root@localhost /data]#tr -d "\r" <abc.txt >abc.bak   #删除保存为abc.bak
[root@localhost /data]#hexdump -c abc.bak 
0000000   a  \n   b  \n   c                                            
0000005
[root@localhost /data]#file all.log abc.bak 
all.log: ASCII text
abc.bak: ASCII text
[root@localhost /data]#tr -dc "a" <all.log      #取反,删除a之外的字符
a

单行重定向 回车换行写入文件
多行重定向 多行同时写入文件 <<EOF

[root@localhost /data]#cat >fi.log <<EOF
> abc
> dfg
> EOF
[root@localhost /data]#cat fi.log 
abc
dfg

管道|

把标准输出作为另一个命令的输入需要管道技术
标准输出 | 输入
把标准错误输入|& 2>&1 |

[root@localhost /data]#(hos;pwd )|tr [a-z] [A-Z]
bash: hos: command not found...
/DATA
[root@localhost /data]#(hos;pwd )|&tr [a-z] [A-Z]
BASH: HOS: COMMAND NOT FOUND...
/DATA
[root@localhost /data]#(hos;pwd )2>&1|tr [a-z] [A-Z]
BASH: HOS: COMMAND NOT FOUND...
/DATA

tee

实现终端输出并且保存(输出又可以作为下一个命令的输入)

[root@localhost /data]#hostname |tee fi    #覆盖
localhost.localdomain
[root@localhost /data]#cat fi
localhost.localdomain
[root@localhost /data]#hostname |tee fi -a      #追加
localhost.localdomain
[root@localhost /data]#cat fi
localhost.localdomain
localhost.localdomain

用户 组 权限

用户有且只有一个主组,副组可有可无
用户登录时在验证中心验证通过后,会得到一个令牌token,令牌含有用户的信息UID、GID,访问资源时,资源中心验证token通过后访问
/etc/passwd
name:passwd:UID:GID:GECOS(注释):dirctory(家目录):shell(登录shell)
passwd为x时认为密码在shadow中,删掉x后,不会读取shadow内容,shadow不起作用

vipw
vigr
修改注释chfn
[root@localhost ~]#getent passwd mageia
mageia:x:1100:1100::/home/linux:/bin/bash
[root@localhost ~]#chfn mageia
Changing finger information for mageia.
Name []: mage
Office []: education
Office Phone []: 0236321
Home Phone []: 12356487

Finger information changed.
[root@localhost ~]#getent passwd mageia
mageia:x:1100:1100:mage,education,0236321,12356487:/home/linux:/bin/bash
查看注释finger

需要安装软件 rpm

[root@localhost ~]#finger mageia
Login: mageia         			Name: mage
Directory: /home/linux              	Shell: /bin/bash
Office: education, 023-6321		Home Phone: 12356487
Never logged in.
No mail.
No Plan.

/etc/shadow
登录用名
用户密码:一般用sha512加密
从1970年1月1日起到密码最近一次被更改的时间
密码再过几天可以被变更(0表示随时可被变更)
密码再过几天必须被变更(99999表示永不过期、密码几天后过期)
密码过期前几天系统提醒用户(默认为一周)
密码过期几天后帐号会被锁定
账号有效期(从1970年1月1日算起,多少天后帐号失效)

[root@localhost /data]#getent passwd mageia
mageia:x:1100:1100::/home/linux:/bin/bash    ##为x时密码存在shadow中,没有x系统不会再shadow中找密码,为空时空密码也可登录
[root@localhost /data]#getent shadow mageia
mageia:!!:18381:0:99999:7:::       #!!禁止空密码登录

pwunconv密码放在passwd中
pwconv还原,密码放在shadow中
当只有一个!时将消失,变成允许空密码登录,因此centos7开始使用!!
/etc/group
组名:组密码(通常不设):GID:附加组成员
/etc/gshadow
组名:组密码:管理员列表:附加组成员列表

生成随机密码
[root@localhost /data]#openssl rand -base64 9     
yMQTSSHNzMgV
[root@localhost /data]#mkpasswd -l 15 -d 3 -c 5

chage
[root@localhost ~]#getent shadow mageia
mageia:!:18381:0:99999:7:::
[root@localhost ~]#chage mageia         #交互式命令
Changing the aging information for mageia
Enter the new value, or press ENTER for the default

	Minimum Password Age [0]:     #多久可以修改密码,默认0随时可以
	Maximum Password Age [99999]: 7    #密码使用多久后必须修改密码,默认永久
	Last Password Change (YYYY-MM-DD) [2020-04-29]:   #密码最后一次修改时间
	Password Expiration Warning [7]:       #密码到期前多久报警,默认七天
	Password Inactive [-1]:     #密码到期后还可以使用几天
	Account Expiration Date (YYYY-MM-DD) [-1]:      #账号有效期
[root@localhost ~]#getent shadow mageia
mageia:!:18381:0:7:7:::

groupadd
[root@localhost ~]#groupadd admins       #创建组
[root@localhost ~]#getent group admins
admins:x:1101:
[root@localhost ~]#groupadd -r mysql1     #创建系统组 -r
[root@localhost ~]#groupadd -g 1200 admim     #指定GID
[root@localhost ~]#getent group admim mysql1
admim:x:1200:
mysql1:x:981:

groupmod
[root@localhost ~]#groupmod -n adms admins    #修改组名
[root@localhost ~]#getent group adms
adms:x:1101:

groupdel
[root@localhost ~]#groupdel admim
useradd
-u UID -g GID/主组组名
-G GID/附属组组名、以,隔离 -r 系统组
-s 登录shell -N 以users为主组
-d 家目录 -m 创建系统组家目录,一般与-r连用
-M 不创建普通用户家目录,与-d连用 -o 不检查唯一性
-e 指定账户有效期 -c 添加注释
[root@localhost ~]#useradd -r zhangwang   #创建系统用户,默认不创建家目录
[root@localhost ~]#ls /home
gentoo  li  linux  mysql  nginx  test  varnish  zhangli
[root@localhost ~]#useradd -r -m zhaangwang     #创建系统用户,强制创建家目录 -r  -m
[root@localhost ~]#ls /home
gentoo  li  linux  mysql  nginx  test  varnish  zhaangwang  zhangli
[root@localhost ~]#useradd -d /data/home wan     #创建普通用户,创建家目录
[root@localhost ~]#ls /data/home/
[root@localhost ~]#useradd -d /data/homewan -M wanlli    #创建普通用户,不创建家目录,只是挂载点
[root@localhost ~]#ls /data/homewan
ls: cannot access /data/homewan: No such file or directory

默认配置文件

/etc/default/useradd 创建用户默认配置
/etc/skel 创建默认家目录文件
/etc/login.defs 创建用户详细配置(密码、组)

[root@localhost ~]#useradd -D       #打印默认配置/etc/default/useradd
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
[root@localhost ~]#useradd -D -s /sbin/nologin     #修改默认配置
[root@localhost ~]#useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/sbin/nologin
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

usermod

-g 改主组
-G 改附组、覆盖附组
-G list,list -a 改附组、追加
-L 锁定密码,不允许空密码登录
-U 解锁密码,只有!解锁后消失centos7后为两个!!

[root@localhost ~]#usermod -G g1,g2 mageia       #添加附加组
[root@localhost ~]#id mageia
uid=1100(mageia) gid=1100(mageia) groups=1100(mageia),1105(g1),1106(g2)
[root@localhost ~]#usermod -G "" mageia          #删除附加组
[root@localhost ~]#id mageia
uid=1100(mageia) gid=1100(mageia) groups=1100(mageia)

userdel

userdel -r wang 删除用户wang和家目录、邮箱(/var/spool/mail)
userdel wang 删除用户wang(默认不删除家目录)

chpasswd

批量修改密码

[root@localhost ~]#chpasswd       #交互式修改密码
mageia:wang
[root@localhost ~]#vim user_passwd.log
[root@localhost ~]#cat user_passwd.log      #把用户名密码保存在文本
mageia:asdf
zhang :aas
[root@localhost ~]#cat user_passwd.log |chpasswd        #批量修改

su完全切换与不完全切换

[root@localhost ~]#su mageia    #不完全切换:身份切换,环境没换
[mageia@localhost /root]$exit
exit
[root@localhost ~]#su - mageia    #完全切换 -/-l 重新登录
Last login: Wed Apr 29 18:27:27 CST 2020 on pts/0
[mageia@localhost ~]$pwd
/home/linux
[mageia@localhost ~]$su - root -c cat /etc/shadow   #临时切换

Ubuntu sudo

sudo -i wang 输入wang的密码切换到root(wang为装系统创建的账号,后期创建的账号不能切换到root)root不能远程连接ssh
/etc/shadow !去掉可以root空密码登录

passwd

交互式命令、passwd默认修改密码需要输入两次,只输一次加–stdin

[root@localhost ~]#getent shadow mageia
mageia:$6$iUoKF/Oj$tJoQyBcKpysWEzCKIeXuJW4F4DmMjdpvpdVBdMGNAAWTKaJXop8Wyhl321cxIBu8Rr/fdcQlYI3taIHSh5Ssk1:18381:0:7:7:9:18402:
[root@localhost ~]#passwd -e mageia         #强制登录时修改密码
Expiring password for user mageia.
passwd: Success
[root@localhost ~]#getent shadow mageia
mageia:$6$iUoKF/Oj$tJoQyBcKpysWEzCKIeXuJW4F4DmMjdpvpdVBdMGNAAWTKaJXop8Wyhl321cxIBu8Rr/fdcQlYI3taIHSh5Ssk1:0:0:7:7:9:18402:
[root@localhost ~]#echo mage |passwd --stdin mageia   #修改mageia密码
Changing password for user mageia.
passwd: all authentication tokens updated successfully.

gpasswd
[root@localhost ~]#gpasswd -a mageia g1       #增加附加组
Adding user mageia to group g1
[root@localhost ~]#id mageia
uid=1100(mageia) gid=1100(mageia) groups=1100(mageia),1105(g1)
[root@localhost ~]#gpasswd -d mageia g1        #删除附加组
Removing user mageia from group g1
[root@localhost ~]#id mageia
uid=1100(mageia) gid=1100(mageia) groups=1100(mageia)

newgrp

临时切换
有时需要创建一个附属组的文件,临时切换到附属创建文件

[root@localhost ~]#touch fi.txt      #创建文件
[root@localhost ~]#ll fi.txt        
-rw-r--r--. 1 root root 0 Apr 29 20:44 fi.txt     #文件组属于root
[root@localhost ~]#newgrp g1       #临时切换到g1组
[root@localhost ~]#touch f2.txt
[root@localhost ~]#ll f2.txt 
-rw-r--r--. 1 root g1 0 Apr 29 20:44 f2.txt        #文件组为g1
[root@localhost ~]#exit           #退出临时组
exit

pwck
grpck
groupmems
[root@localhost ~]#groupmems -l -g g1       #列出g1附属成员
mageia 
[root@localhost ~]#groupmems -a wang -g g1     #添加附属组
[root@localhost ~]#groupmems -l -g g1
mageia  wang 
[root@localhost ~]#groupmems -d wang -g g1       #删除附属组
[root@localhost ~]#groupmems -l -g g1
mageia 

文件权限

- wrx r-- r–
-文件类型 用户权限(u) 组权限(g) 其他人权限(o)
文件识别权限时看最前面,只要前面的符合条件后面就不看啦

权限 模式法 数字法
读权限 -r 4
写权限 -w 2
执行权限 -x 1
chown

改文件用户

[root@localhost ~]#ll abc
-rw-r--r--. 1 root root   20 Apr 24 22:24 abc
[root@localhost ~]#chown wang abc      #改用户
[root@localhost ~]#ll abc
-rw-r--r--. 1 wang root 20 Apr 24 22:24 abc
[root@localhost ~]#chown :g1 abc    #改组(.g1)
[root@localhost ~]#ll abc
-rw-r--r--. 1 wang g1 20 Apr 24 22:24 abc
[root@localhost ~]#chown wang.g1 fi.txt    #改用户和组(wang:g1)
[root@localhost ~]#ll fi.txt
-rw-r--r--. 1 wang g1      0 Apr 29 20:44 fi.txt
[root@localhost ~]#chown -R wang /data/    #目录data下文件全部改用户
chgrp

修改组

[root@localhost ~]#chgrp root fi.txt      #修改组
[root@localhost ~]#ll fi.txt 
-rw-r--r--. 1 wang root 0 Apr 29 20:44 fi.txt

chmod

修改文件权限
模式法:
在这里插入图片描述

[root@localhost ~]#ll fi.txt 
-rw-r--r--. 1 wang root 0 Apr 29 20:44 fi.txt
[root@localhost ~]#chmod a= fi.txt 
[root@localhost ~]#ll fi.txt 
----------. 1 wang root 0 Apr 29 20:44 fi.txt
[root@localhost ~]#chmod u+r fi.txt 
[root@localhost ~]#ll fi.txt 
-r--------. 1 wang root 0 Apr 29 20:44 fi.txt
[root@localhost ~]#chmod a=wr fi.txt 
[root@localhost ~]#ll fi.txt 
-rw-rw-rw-. 1 wang root 0 Apr 29 20:44 fi.txt
[root@localhost ~]#
[root@localhost ~]#chmod -R a=wr /data/      #目录data下全修改
[root@localhost ~]#chmod --reference abc fi.txt         #参考abc权限修改fi.txt
[root@localhost ~]#ll abc fi.txt 
-rw-r--r--. 1 wang g1   20 Apr 24 22:24 abc
-rw-r--r--. 1 wang root  0 Apr 29 20:44 fi.txt

数字法

[root@localhost ~]#chmod 764 fi.txt 
[root@localhost ~]#ll fi.txt 
-rwxrw-r--. 1 wang root 0 Apr 29 20:44 fi.txt
[root@localhost ~]#chmod 640 fi.txt 
[root@localhost ~]#ll fi.txt 
-rw-r-----. 1 wang root 0 Apr 29 20:44 fi.txt

目录:
读权限:可以列出文件名
执行权限:可以进入目录,可以访问目录内容
写权限:创建、删除文件(须有执行权限)

[root@localhost ~]#chmod a+x -R /data        #目录递归加执行权限,所有文件都加   x
[root@localhost ~]#ll /data/
-rwxr-xr-x.   1 root root    5 Apr 29 20:11 abc.bak
-rwxr-xr-x.   1 root root    7 Apr 28 20:08 abcd.txt
drwxr-xr-x.   3 root root 4096 Apr 27 21:11 scripts
d-wx--x--x.   2 wang root   39 Apr 25 20:26 testdir
[root@localhost ~]#chmod a-x -R /data
[root@localhost ~]#chmod a+X -R /data       #只对目录加执行权限   X
[root@localhost ~]#ll /data/
-rw-r--r--.   1 root root    5 Apr 29 20:11 abc.bak
-rw-r--r--.   1 root root    7 Apr 28 20:08 abcd.txt
drwxr-xr-x.   3 root root 4096 Apr 27 21:11 scripts
d-wx--x--x.   2 wang root   39 Apr 25 20:26 testdir

特殊权限

==suid 作用于可执行的二进制程序,用户执行此程序时将继承此程序所有者的权限
sticky:作用于目录,只能删除自己文件的权限(默认情况下目录所有者可以删除该目录下所有内容,当加sticky功能时,该目录所有者不能删除其他人创建的文件,只能删自己建的)
sgid:
1)作用于文件:作用于可执行的二进制程序,用户执行此程序时将继承此程序所有组的权限
2)作用于目录:新建的文件及自动继承此目录的所属组
数字法 suid(4) sgid(2) sticky(1)
chmod 7700 单独写
模式法
chmod u+s file
chmod g+s file
chmod g+T dir

[root@localhost ~]#chmod g+s /data      #文件夹加guid
[root@localhost ~]#ll -d /data
drwxr-sr-x. 9 root root 4096 Apr 29 18:37 /data
[root@localhost /data/scripts]#ll user10.sh 
-rw-r--r--. 1 root root 593 Apr 27 20:27 user10.sh
[root@localhost /data/scripts]#chmod u+s user10.sh      #加suid
[root@localhost /data/scripts]#ll user10.sh 
-rwSr--r--. 1 root root 593 Apr 27 20:27 user10.sh
[root@localhost /data/dir2]#chmod 1644 /data/dir2     #加sticky
chattr

root权限过大可以删除任何文件,给文件表上i可以防止root删除文件
Usage: chattr [-RVf] [-+=aAcCdDeijsStTu] [-v version] files…

[root@localhost /data]#touch abc
[root@localhost /data]#ll
-rw-r--r--    1 root root    0 Apr 30 01:29 abc
[root@localhost /data]#chattr +i abc     #+i  文件不能删除、追加、修改内容
[root@localhost /data]#ll
-rw-r--r--    1 root root    0 Apr 30 01:29 abc
[root@localhost /data]#echo abc > abc 
-bash: abc: Permission denied
[root@localhost /data]#rm abc
rm: remove regular empty file ‘abc’? y
rm: cannot remove ‘abc’: Operation not permitted
[root@localhost /data]#lsattr abc     #查询是否标记i
----i----------- abc
[root@localhost /data]#chattr -i abc      #-i  去掉可以修改
[root@localhost /data]#echo abc > abc 
[root@localhost /data]#chattr +a abc       #+a  可以追加内容
[root@localhost /data]#echo anc >> abc
[root@localhost /data]#echo anc > abc
-bash: abc: Operation not permitted

lsattr

Usage: lsattr [-RVadlv] [files…]

umask

控制新建文件或目录的特殊权限
默认情况下:
umask+default=777(目录)/666(文件)
默认情况下文件没有执行权限,有执行权限风险太大

[root@localhost /data]#umask
0022

当把umask默认值更改后,默认情况不再适用
umask 将777|666中对应的权限去掉,得出默认权限

[root@localhost /data]#umask 123  
[root@localhost /data]#umask 
0123
[root@localhost /data]#touch fi.log     #更改后默认情况创建文件权限为543
[root@localhost /data]#ll fi.log 
-rw-r--r-- 1 root root 0 Apr 30 01:39 fi.log    #实际为644

目录权限:777-umask
文件权限:666-umask 奇数加1 偶数不变
永久生效修改文件 ~/.bashrc
umask -p >> ~/.bashrc 临时修改后用此命令添加至文件

ACL

setfacl

对多用户分别执行各自的权限
Usage: setfacl [-bkndRLP] { -m|-M|-x|-X … } file …

[root@localhost /data]#setfacl -m u:wang:0 fi.log    #对用户wang设置无权限
[root@localhost /data]#ll fi.log 
-rw-r--r--+ 1 root root 0 Apr 30 01:39 fi.log
[root@localhost /data]#setfacl -m g:wang:rw fi.log    #对组wang设置读写权限
[root@localhost /data]#ll fi.log 
-rw-rw-r--+ 1 root root 0 Apr 30 01:39 fi.log
[root@localhost /data]#setfacl -x u:wang fi.log    #删除
[root@localhost /data]#setfacl -R -b /data/   #删除data下所有,适用于目录

mask 可以设置该文件最高权限,除了用户自己外,其他人权限都要比mask低

getfacl
[root@localhost /data]#getfacl fi.log 
# file: fi.log
# owner: root
# group: root
user::rw-
group::r--
group:wang:rw-
mask::rw-
other::r-
[root@localhost /data]#setfacl -m mask::r fi.log    #设置最高权限mask
[root@localhost /data]#getfacl fi.log 
# file: fi.log
# owner: root
# group: root
user::rw-
group::r--
group:wang:rw-			#effective:r--   #有效权限
mask::r--
other::r--

猜你喜欢

转载自blog.csdn.net/wauzy/article/details/105822019