文件描述符
当打开一个进程时,系统会分配一个唯一的文件描述符,可以在/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--