文件的权限主要针对三类对象进行定义:
owner | 属主 | u |
---|---|---|
group | 属组 | g |
other | 其它 | o |
每个文件针对每个访问者都定义了三种权限:
权限 | 对应的操作对象 | 权限说明 |
---|---|---|
r | 文件 | 可读 可以使用类似cat等命令查看文件内容 |
w | 文件 | 可写 可以编辑或删除此文件 |
x | 文件 | 可执行,eXacutable 可以在命令提示符下 当作命令提交给内核运行 |
r | 目录 | 可以对此目录执行ls以列出内部的所有文件 |
w | 目录 | 可以在此目录中创建文件 也可删除此目录中的文件 |
x | 目录 | 可以使用cd切换进此目录 也可以使用ls -l查看内部文件的详细信息 |
权限的二进制与十进制转换:
//修改三类用户的权限:
//语法:chmod MODE file,...
-R //递归修改权限
//修改某类用户或某些类用户权限:
//u,g,o,a(用户类别)
//chmod 用户类别=MODE file,.....
//chmod 用户类别=MODE,用户类别=MODE file,.....
//修改某类的用户某位或某些位权限:
//u,g,o,a(用户类别)
//chmod 用户类别+|-MODE file,.....
//chmod 用户类别+|-MODE,用户类别+|-MODE file,.....
//chmod +|-MODE file,.....
[root@lnh ~]# ll total 24 -rw-r--r--. 1 root root 0 Jul 4 12:22 111 -rw-r--r--. 1 root root 0 Jul 4 12:20 222 -rw-------. 1 root root 1003 Jun 28 04:46 anaconda-ks.cfg -rw-r--r--. 1 root root 15032 Jul 4 08:33 outfile -rw-r--r--. 1 root root 156 Jul 3 07:38 test drwxr-xr-x. 2 root root 6 Jul 3 12:00 tushanbu [root@lnh ~]# chmod u-w 111 [root@lnh ~]# ll total 24 -r--r--r--. 1 root root 0 Jul 4 12:22 111 -rw-r--r--. 1 root root 0 Jul 4 12:20 222 -rw-------. 1 root root 1003 Jun 28 04:46 anaconda-ks.cfg -rw-r--r--. 1 root root 15032 Jul 4 08:33 outfile -rw-r--r--. 1 root root 156 Jul 3 07:38 test drwxr-xr-x. 2 root root 6 Jul 3 12:00 tushanbu //不要111的属主写权限 [root@lnh ~]# chmod o+w 111 [root@lnh ~]# ll total 24 -r--r--rw-. 1 root root 0 Jul 4 12:22 111 -rw-r--r--. 1 root root 0 Jul 4 12:20 222 -rw-------. 1 root root 1003 Jun 28 04:46 anaconda-ks.cfg -rw-r--r--. 1 root root 15032 Jul 4 08:33 outfile -rw-r--r--. 1 root root 156 Jul 3 07:38 test drwxr-xr-x. 2 root root 6 Jul 3 12:00 tushanbu //给111其他这里赋予它可以写的权限 [root@lnh ~]# ll total 24 -r--r--rw-. 1 root root 0 Jul 4 12:22 111 -rw-r--r--. 1 root root 0 Jul 4 12:20 222 -rw-------. 1 root root 1003 Jun 28 04:46 anaconda-ks.cfg -rw-r--r--. 1 root root 15032 Jul 4 08:33 outfile -rw-r--r--. 1 root root 156 Jul 3 07:38 test drwxr-xr-x. 2 root root 6 Jul 3 12:00 tushanbu [root@lnh ~]# chmod g=wx 222 [root@lnh ~]# ll total 24 -r--r--rw-. 1 root root 0 Jul 4 12:22 111 -rw--wxr--. 1 root root 0 Jul 4 12:20 222 -rw-------. 1 root root 1003 Jun 28 04:46 anaconda-ks.cfg -rw-r--r--. 1 root root 15032 Jul 4 08:33 outfile -rw-r--r--. 1 root root 156 Jul 3 07:38 test drwxr-xr-x. 2 root root 6 Jul 3 12:00 tushanbu //给222的属组赋予可写和可执行权限,它之前可读权限消失了 [root@lnh ~]# chmod ugo=rwx 222 [root@lnh ~]# ll total 24 -r--r--rw-. 1 root root 0 Jul 4 12:22 111 -rwxrwxrwx. 1 root root 0 Jul 4 12:20 222 -rw-------. 1 root root 1003 Jun 28 04:46 anaconda-ks.cfg -rw-r--r--. 1 root root 15032 Jul 4 08:33 outfile -rw-r--r--. 1 root root 156 Jul 3 07:38 test drwxr-xr-x. 2 root root 6 Jul 3 12:00 tushanbu //给222赋予可读可写可执行权限 [root@lnh ~]# chmod a=rwx 111 [root@lnh ~]# ll total 24 -rwxrwxrwx. 1 root root 0 Jul 4 12:22 111 -rwxrwxrwx. 1 root root 0 Jul 4 12:20 222 -rw-------. 1 root root 1003 Jun 28 04:46 anaconda-ks.cfg -rw-r--r--. 1 root root 15032 Jul 4 08:33 outfile -rw-r--r--. 1 root root 156 Jul 3 07:38 test drwxr-xr-x. 2 root root 6 Jul 3 12:00 tushanbu //给111赋予可读可写可执行权限 //a=u属主+g属组+o其他 [root@lnh ~]# chmod -R a=rwx tushanbu/333 [root@lnh ~]# ll tushanbu/333 -rwxrwxrwx. 1 root root 0 Jul 4 12:49 tushanbu/333 //递归修改权限 //给tushanbu目录下的333文件赋予可读可写可执行权限 [root@lnh ~]# chmod 666 111 [root@lnh ~]# ll total 24 -rw-rw-rw-. 1 root root 0 Jul 4 12:56 111 -rwxrwxrwx. 1 root root 0 Jul 4 12:20 222 -rw-------. 1 root root 1003 Jun 28 04:46 anaconda-ks.cfg -rw-r--r--. 1 root root 15032 Jul 4 08:33 outfile -rw-r--r--. 1 root root 156 Jul 3 07:38 test drwxr-xr-x. 2 root root 17 Jul 4 12:49 tushanbu //也可以通过数字的方式赋予文件111可读可写权限
chown命令只有管理员可以使用。
chown 用户名.属组 文件名
-R //chown 用户名.属组 目录/文件名
chown 用户名:属组 文件名
[root@lnh ~]# ll total 28 -rw-rw-rw-. 1 root root 0 Jul 4 12:56 111 -rwxrwxrwx. 1 root root 0 Jul 4 12:20 222 -rw-------. 1 root root 1003 Jun 28 04:46 anaconda-ks.cfg -rw-------. 1 lxb root 1003 Jul 4 13:18 lxb -rw-r--r--. 1 root root 15032 Jul 4 08:33 outfile -rw-r--r--. 1 root root 156 Jul 3 07:38 test drwxr-xr-x. 2 root root 17 Jul 4 12:49 tushanbu [root@lnh ~]# chown lxb.lxb 111 [root@lnh ~]# ll total 28 -rw-rw-rw-. 1 lxb lxb 0 Jul 4 12:56 111 -rwxrwxrwx. 1 root root 0 Jul 4 12:20 222 -rw-------. 1 root root 1003 Jun 28 04:46 anaconda-ks.cfg -rw-------. 1 lxb root 1003 Jul 4 13:18 lxb -rw-r--r--. 1 root root 15032 Jul 4 08:33 outfile -rw-r--r--. 1 root root 156 Jul 3 07:38 test drwxr-xr-x. 2 root root 17 Jul 4 12:49 tushanbu //修改111的用户和属组为lxb [root@lnh ~]# chown -R lxb.lxb tushanbu/333 [root@lnh ~]# ll tushanbu/333 -rwxrwxrwx. 1 lxb lxb 0 Jul 4 12:49 tushanbu/333 //修改tushanbu目录下的333文件用户和属组为lxb [root@lnh ~]# chown .lxb 222 [root@lnh ~]# ll total 28 -rw-rw-rw-. 1 lxb lxb 0 Jul 4 12:56 111 -rwxrwxrwx. 1 root lxb 0 Jul 4 12:20 222 -rw-------. 1 root root 1003 Jun 28 04:46 anaconda-ks.cfg -rw-------. 1 lxb root 1003 Jul 4 13:18 lxb -rw-r--r--. 1 root root 15032 Jul 4 08:33 outfile -rw-r--r--. 1 root root 156 Jul 3 07:38 test drwxr-xr-x. 2 root root 17 Jul 4 12:49 tushanbu //修改文件222的属组为lxb
为什么文件创建以后默认权限是644?
为什么目录创建以后默认权限是755?
这是由遮罩码umask来控制的。
从名字就能看出来,遮罩码umask是用来隐藏一些权限的。举例:如果你不想让人家认出你,你会怎么办?
文件最终的权限为:
666-umask
目录最终的权限为:
777-umask
文件默认是不能具有执行权限的,如果算得的结果有执行权限则将其权限整体加1。
[root@lnh tushanbu]# umask 0022 //遮罩码 [root@lnh tushanbu]# umask 011 [root@lnh tushanbu]# mkdir 876 [root@lnh tushanbu]# touch 345 [root@lnh tushanbu]# ll total 0 -rw-r--r--. 1 root root 0 Jul 4 13:54 123 drwxr-xr-x. 2 root root 6 Jul 4 13:54 234 -rwxrwxrwx. 1 lxb lxb 0 Jul 4 12:49 333 -rw-rw-rw-. 1 root root 0 Jul 4 13:54 345 drwxrw-rw-. 2 root root 6 Jul 4 13:54 876 [root@lnh tushanbu]# ll total 0 -rw-r--r--. 1 root root 0 Jul 4 13:54 123 drwxr-xr-x. 2 root root 6 Jul 4 13:54 234 -rw-rw-rw-. 1 root root 0 Jul 4 13:54 345 drwxrw-rw-. 2 root root 6 Jul 4 13:54 876 //因为文件的满权限是666,如果有x执行权限在那么就会整体权限加一, 目录的满权限是777,可以看见遮罩码是只能改变后面创建的文件或者目录权限,之前已经存在的不会改变
前提:进程有属主和属组;文件有属主和属组
任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否拥有可执行权限;
启动为进程后,其进程的属主为发起者,属组为发起者所属的组
进程访问文件时的权限取决于进程的发起者:
进程的发起者是文件的属主时,则应用文件属主权限
进程的发起者是文件的属组时,则应用文件属组权限
应用文件“其它”权限
linux默认权限是根据linux安全上下文的方式来控制的,而特殊权限的存在打破了linux安全上下文的规则。
SUID(4) //运行程序时,这个程序启动的进程的属主是程序文件自身的属主,而不是启动者为属主
chmod u+s file
chmod u-s file
//如果file本身原来就有执行权限,则SUID显示为s,否则显示为S
SGID(2) //运行程序时,这个程序启动的进程的属组是程序文件自身的属组,而不是启动者所属的基本组
//默认情况下,用户创建文件时,其属组为此用户所属的基本组;
//一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件或目录,其所属的组
//为此设定了SGID的目录的属组
chmod g+s DIR
chmod g-s DIR
//如果file本身原来就有执行权限,则SGID显示为s,否则显示为S
Sticky(1) //在一个公共目录,每个人都能创建文件,删除自己的文件,但是不能删除别人创建的文件
chmod o+t DIR
chmod o-t DIR
//如果DIR本身原来就有执行权限,则Sticky显示为t,否则显示为T
4755 //有SUID,文件权限为755
2755 //有SGID,文件权限为755
1755 //有Sticky,文件权限为755
//这里前面的4、2、1分别表示SUID、SGID、Sticky
SUID:
[root@lnh ~]# ll /usr/bin/sleep
-rwsr-xr-x. 1 root root 38424 Apr 27 2020 /usr/bin/sleep
//可以看见给sleep设置suid权限后,可以看见这条命令是属于用户root的
//此处w后面出现一个小s代表赋予执行权限,如果是大S那么就是这条命令本来就没有执行权限
//可以看见设置755权限后就没有suid权限然后这条执行命令的用户回到了lxb
SGID:
[root@lnh tushanbu]# ll total 0 [root@lnh tushanbu]# mkdir abc [root@lnh tushanbu]# ll total 0 drwxrw-rw-. 2 root root 6 Jul 4 14:47 abc [root@lnh tushanbu]# touch abc/123 [root@lnh tushanbu]# ll abc/123 -rw-rw-rw-. 1 root root 0 Jul 4 14:47 abc/123 [root@lnh tushanbu]# ll total 0 drwxrw-rw-. 2 root root 17 Jul 4 14:47 abc [root@lnh tushanbu]# chown .lxb abc //将属组改为lxb [root@lnh tushanbu]# ll total 0 drwxrw-rw-. 2 root lxb 17 Jul 4 14:47 abc [root@lnh tushanbu]# touch abc/333 [root@lnh tushanbu]# ll abc/333 -rw-rw-rw-. 1 root root 0 Jul 4 14:48 abc/333 [root@lnh tushanbu]# ll abc/ total 0 -rw-rw-rw-. 1 root root 0 Jul 4 14:47 123 -rw-rw-rw-. 1 root root 0 Jul 4 14:48 333 //默认情况下,用户创建文件时,其属组为此用户所属的基本组 //所以333的属组还是root [root@lnh tushanbu]# rm -f abc/* [root@lnh tushanbu]# ls abc [root@lnh tushanbu]# touch abc/123 [root@lnh tushanbu]# ll abc/ total 0 -rw-rw-rw-. 1 root root 0 Jul 4 14:53 123 //默认情况下属组都是属于root [root@lnh tushanbu]# ll total 0 drwxrw-rw-. 2 root lxb 17 Jul 4 14:53 abc //但是abc本身属组是lxb [root@lnh tushanbu]# chmod 2755 abc [root@lnh tushanbu]# ll total 0 drwxr-sr-x. 2 root lxb 17 Jul 4 14:53 abc [root@lnh tushanbu]# touch abc/555 [root@lnh tushanbu]# ll abc total 0 -rw-rw-rw-. 1 root root 0 Jul 4 14:53 123 -rw-rw-rw-. 1 root lxb 0 Jul 4 14:55 555 //设置sgid后,可以看见就算是在root下面创建文件,但是它的属组还是lxb [root@lnh tushanbu]# ll total 0 drwxr-sr-x. 2 root lxb 28 Jul 4 14:55 abc [root@lnh tushanbu]# chmod g-x abc [root@lnh tushanbu]# ll total 0 drwxr-Sr-x. 2 root lxb 28 Jul 4 14:55 abc //没有执行权限是大写S [root@lnh tushanbu]# chmod g+x abc [root@lnh tushanbu]# ll total 0 drwxr-sr-x. 2 root lxb 28 Jul 4 14:55 abc //有执行权限是小写s
Sticky:
[root@lnh tmp]# ll / total 16 lrwxrwxrwx. 1 root root 7 May 19 2020 bin -> usr/bin dr-xr-xr-x. 5 root root 4096 Jun 27 21:10 boot drwxr-xr-x. 20 root root 3140 Jun 30 04:30 dev drwxr-xr-x. 77 root root 8192 Jul 4 13:01 etc drwxr-xr-x. 5 root root 44 Jul 4 13:01 home lrwxrwxrwx. 1 root root 7 May 19 2020 lib -> usr/lib lrwxrwxrwx. 1 root root 9 May 19 2020 lib64 -> usr/lib64 drwxr-xr-x. 2 root root 6 May 19 2020 media drwxr-xr-x. 2 root root 6 May 19 2020 mnt drwxr-xr-x. 2 root root 6 Jul 4 13:17 opt dr-xr-xr-x. 193 root root 0 Jun 29 18:58 proc dr-xr-x---. 4 root root 258 Jul 4 14:45 root drwxr-xr-x. 23 root root 660 Jun 29 18:58 run lrwxrwxrwx. 1 root root 8 May 19 2020 sbin -> usr/sbin drwxr-xr-x. 2 root root 6 May 19 2020 srv dr-xr-xr-x. 13 root root 0 Jun 29 18:58 sys drwxrwxrwt. 7 root root 136 Jul 4 15:03 tmp drwxr-xr-x. 12 root root 144 Jun 27 21:06 usr drwxr-xr-x. 20 root root 278 Jun 27 21:10 var //tmp有Sticky权限,就是说在这个公共目录中,你可以创建并且删除自己的东西,其他的还是需要管理员给予权限 [root@lnh tmp]# ll total 8 -rw-r--r--. 1 root root 15 Jul 3 08:40 hello.out -rwx------. 1 root root 701 Jun 27 21:09 ks-script-mnbhyjqk [root@lnh tmp]# touch xbd [root@lnh tmp]# ll total 8 -rw-r--r--. 1 root root 15 Jul 3 08:40 hello.out -rwx------. 1 root root 701 Jun 27 21:09 ks-script-mnbhyjqk -rw-rw-rw-. 1 root root 0 Jul 4 15:06 xbd [root@lnh tmp]# rm -f xbd [root@lnh tmp]# ll total 8 -rw-r--r--. 1 root root 15 Jul 3 08:40 hello.out -rwx------. 1 root root 701 Jun 27 21:09 ks-script-mnbhyjqk //可以删除自己的东西和修改自己的东西权限
facl(Filesystem Access Control List),利用文件扩展保存额外的访问控制权限。
//语法:setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
-m //设定
u:UID:perm
g:GID:perm
//setfacl -m u:test:rw file
//setfacl -m g:test:rw file
//如果要为某个目录设定默认的访问控制列表,只需要设定时在u或g前面加上d即可。 如:
//setfacl -m d:u:test:rw file,此时在此目录中创建的文件均继承此访问控制列表所设置的权限
-x //取消
u:UID
g:GID
//setfacl -x u:test file
//setfacl -x g:test file
-b //Remove all
//语法:getfacl [-aceEsRLPtpndvh] file ...
//getfacl file
[root@lnh tmp]# ll total 8 -rw-rw-rw-. 1 lxb lxb 0 Jul 4 15:14 111 -rw-rw-rw-. 1 root root 0 Jul 4 15:14 222 -rw-r--r--. 1 root root 15 Jul 3 08:40 hello.out -rwx------. 1 root root 701 Jun 27 21:09 ks-script-mnbhyjqk [root@lnh tmp]# setfacl -m u:lxb:x 111 //设置lxb这个用户对111有执行权限 [root@lnh tmp]# getfacl 111 # file: 111 # owner: lxb # group: lxb user::rw- user:lxb:--x group::rw- mask::rwx other::rw- //可以查看是否更改成功 [root@lnh tmp]# setfacl -b 111 [root@lnh tmp]# getfacl 111 # file: 111 # owner: lxb # group: lxb user::rw- group::rw- other::rw //-b 清除了它的所有权限
sudo可以实现某个用户能够以另外哪一个用户的身份通过哪些主机执行什么命令
sudo的配置文件:/etc/sudoers
使用visudo命令进行sudo的配置,每一行就是一个sudo条目,条目格式如下:
who which_hosts=(runas) command
who:User_Alias,表示运行命令者的身份
which_hosts:Host_Alias,通过哪些主机
runas:Runas_Alias,以哪个用户的身份
command:Cmnd_Alias,运行哪些命令
别名必须全部而且只能使用大写英文字母的组合,可以使用感叹号取反
别名分类:
用户别名:
User_Alias NETWORKADMIN =
用户的用户名
组名,使用%引导
还可以其它已经定义的用户别名
主机别名:
Host_Alias =
主机名
IP地址
网络地址
其它主机别名
Runas别名:
Runas_Alias =
用户名
%组名
其它的Runas别名
命令别名:
Cmnd_Alias =
命令路径
目录(此目录内的所有命令)
其它已定义的命令别名
//sudo命令语法:sudo [options] COMMAND
-V //显示版本编号
-h //会显示版本编号及指令的使用方式说明
-l //列出当前用户可以使用的所有sudo类命令
-v //因为sudo在第一次执行时或是在N分钟内没有执行(N默认为5)会问密码,这个参数
//是重新做一次确认,如果超过N分钟,也会问密码
-k //让认证信息失效,如果不指定-k,默认认证信息在5分钟后失效
-b //将要执行的指令放在后台执行
-u USERNAME //以指定的用户名执行命令,默认为root
通过visudo命令进入:
//设置允许lxb用户使用/usr/sbin/useradd这个命令
[lxb@lnh ~]$ useradd ml useradd: Permission denied. useradd: cannot lock /etc/passwd; try again later. [lxb@lnh ~]$ sudo useradd ml We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. [sudo] password for lxb: Sorry, try again. [sudo] password for lxb: sudo: 1 incorrect password attempt //要设置lxb的密码 [lxb@lnh ~]$ su - root Password: Last login: Mon Jul 4 15:50:37 CST 2022 on pts/1 [root@lnh ~]# echo "redhat" | passwd --stdin lxb Changing password for user lxb. passwd: all authentication tokens updated successfully. [root@lnh ~]# su - lxb Last login: Mon Jul 4 15:50:51 CST 2022 on pts/1 [lxb@lnh ~]$ sudo useradd ml //因为刚刚输入了密码所以这里不用 [lxb@lnh ~]$ sudo userdel -r ml Sorry, user lxb is not allowed to execute '/sbin/userdel -r ml' as root on lnh. //只能创建,不能删除用户 [lxb@lnh ~]$ sudo -V Sudo version 1.8.29 Sudoers policy plugin version 1.8.29 Sudoers file grammar version 46 Sudoers I/O plugin version 1.8.29 //显示版本编号 [lxb@lnh ~]$ sudo -h sudo - execute a command as another user usage: sudo -h | -K | -k | -V usage: sudo -v [-AknS] [-g group] [-h host] [-p prompt] [-u user] usage: sudo -l [-AknS] [-g group] [-h host] [-p prompt] [-U user] [-u user] [command] usage: sudo [-AbEHknPS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user] [VAR=value] [-i|-s] [<command>] usage: sudo -e [-AknS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user] file ... Options: -A, --askpass use a helper program for password prompting -b, --background run command in the background -B, --bell ring bell when prompting -C, --close-from=num close all file descriptors >= num -E, --preserve-env preserve user environment when running command --preserve-env=list preserve specific environment variables -e, --edit edit files instead of running a command -g, --group=group run command as the specified group name or ID -H, --set-home set HOME variable to target user's home dir -h, --help display help message and exit -h, --host=host run command on host (if supported by plugin) -i, --login run login shell as the target user; a command may also be specified -K, --remove-timestamp remove timestamp file completely -k, --reset-timestamp invalidate timestamp file -l, --list list user's privileges or check a specific command; use twice for longer format -n, --non-interactive non-interactive mode, no prompts are used -P, --preserve-groups preserve group vector instead of setting to target's -p, --prompt=prompt use the specified password prompt -r, --role=role create SELinux security context with specified role -S, --stdin read password from standard input -s, --shell run shell as the target user; a command may also be specified -t, --type=type create SELinux security context with specified type -T, --command-timeout=timeout terminate command after the specified time limit -U, --other-user=user in list mode, display privileges for user -u, --user=user run command (or edit file) as specified user name or ID -V, --version display version information and exit -v, --validate update user's timestamp without running a command -- stop processing command line arguments //会显示版本编号及指令的使用方式说明 [lxb@lnh ~]$ sudo -l [sudo] password for lxb: Matching Defaults entries for lxb on lnh: !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin User lxb may run the following commands on lnh: (ALL) /usr/sbin/useradd //因为sudo在第一次执行时或是在N分钟内没有执行(N默认为5)会问密码,这个参数 是重新做一次确认,如果超过N分钟,也会问密码
w //显示当前登录到系统的用户有哪些,以及其正在做什么
sleep //睡眠,写脚本为防止上一个命令没执行完下一命令就开始执行时可以加上sleep #
//表示停顿#秒后再执行后面的命令
sleep NUMBER[SUFFIX]...
SUFFIX:
s:秒,默认
m:分
h:小时
d:天
last //显示/var/log/wtmp文件,显示用户登录历史及系统重启历史
-n # //显示最近#次的相关信息
lastb //显示/var/log/btmp文件,显示用户错误的登录尝试
-n # //显示最近#次的相关信息
lastlog //显示每个用户最近一次成功登录信息
-u username //显示特定用户最近的登录信息
basename //显示路径基名
[root@lnh ~]# sleep 3 //睡眠3秒 [root@lnh ~]# sleep 3;echo 123 123 //3秒后打印123 [root@lnh ~]# time sleep 3 real 0m3.021s user 0m0.000s sys 0m0.003s //统计这个命令执行的时间 [root@lnh ~]# whoami root //我是谁 [root@lnh ~]# who am i root pts/0 2022-06-30 11:24 (192.168.222.1) //我在哪里登录的 登录的时间 在哪个主机上面登录的 [root@lnh ~]# who root tty1 2022-06-29 23:00 root pts/0 2022-06-30 11:24 (192.168.222.1) //有哪些登录了我这个终端 [root@lnh ~]# w 15:55:29 up 20:56, 2 users, load average: 0.00, 0.00, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root tty1 - Wed23 11:24m 0.02s 0.02s -bash root pts/0 192.168.222.1 11:24 1.00s 0.69s 0.00s w 在哪里登录 登录的ip地址 什么时间点 登录时cpu的运行时间 这个家伙在干啥 [root@lnh ~]# last 111 wtmp begins Mon Jun 27 21:10:32 2022 last //显示/var/log/wtmp文件,显示用户登录历史及系统重启历史 [root@lnh ~]# last -n 111 root pts/0 192.168.222.1 Mon Jul 4 15:43 - 15:49 (00:06) root pts/0 192.168.222.1 Mon Jul 4 15:40 - 15:42 (00:01) root pts/0 192.168.222.1 Mon Jul 4 14:20 - 14:45 (00:25) root pts/1 192.168.222.1 Mon Jul 4 11:43 still logged in root pts/2 192.168.222.1 Mon Jul 4 10:16 - 13:58 (03:41) root pts/0 192.168.222.1 Mon Jul 4 08:38 - 13:58 (05:19) root pts/3 192.168.222.1 Mon Jul 4 06:29 - 10:49 (04:19) root pts/1 192.168.222.1 Mon Jul 4 05:28 - 10:50 (05:21) root pts/2 192.168.222.1 Mon Jul 4 01:50 - 07:42 (05:51) root pts/2 192.168.222.1 Mon Jul 4 01:43 - 01:45 (00:01) root pts/0 192.168.222.1 Sun Jul 3 23:58 - 07:42 (07:44) root pts/2 192.168.222.1 Sun Jul 3 23:55 - 23:55 (00:00) root pts/0 192.168.222.1 Sun Jul 3 23:54 - 23:55 (00:00) root pts/1 192.168.222.1 Sun Jul 3 20:42 - 02:10 (05:28) root pts/0 192.168.222.1 Sun Jul 3 19:56 - 22:53 (02:57) root pts/0 192.168.222.1 Sun Jul 3 19:01 - 19:55 (00:54) root pts/0 192.168.222.1 Sun Jul 3 16:43 - 19:01 (02:17) root pts/1 192.168.222.1 Sun Jul 3 13:33 - 18:57 (05:24) root pts/0 192.168.222.1 Sun Jul 3 09:53 - 15:45 (05:52) root pts/1 192.168.222.1 Sun Jul 3 05:29 - 12:03 (06:33) root pts/0 192.168.222.1 Sun Jul 3 02:17 - 07:40 (05:22) root pts/1 192.168.222.1 Sat Jul 2 23:08 - 04:28 (05:19) root pts/0 192.168.222.1 Thu Jun 30 11:24 - 01:20 (2+13:56) root pts/1 192.168.222.1 Thu Jun 30 04:34 - 13:36 (09:02) root pts/1 192.168.222.1 Thu Jun 30 04:34 - 04:34 (00:00) root pts/1 192.168.222.1 Thu Jun 30 04:33 - 04:33 (00:00) root pts/1 192.168.222.1 Thu Jun 30 04:31 - 04:32 (00:00) root pts/0 192.168.222.1 Thu Jun 30 01:24 - 06:45 (05:21) root pts/1 192.168.222.1 Wed Jun 29 23:00 - 03:35 (04:34) root tty1 Wed Jun 29 23:00 gone - no logout root pts/0 192.168.222.1 Wed Jun 29 18:59 - 01:13 (06:13) reboot system boot 4.18.0-257.el8.x Wed Jun 29 18:58 still running root pts/0 192.168.222.1 Tue Jun 28 03:56 - crash (1+15:02) root pts/3 192.168.222.1 Tue Jun 28 01:48 - 06:03 (04:15) root pts/2 192.168.222.1 Tue Jun 28 01:29 - 02:05 (00:35) root pts/0 192.168.222.1 Mon Jun 27 23:49 - 03:42 (03:53) root pts/1 192.168.222.1 Mon Jun 27 23:24 - 02:00 (02:35) root pts/1 192.168.222.1 Mon Jun 27 22:02 - 23:24 (01:22) root pts/1 192.168.222.1 Mon Jun 27 21:20 - 22:01 (00:41) root pts/0 192.168.222.1 Mon Jun 27 21:15 - 23:30 (02:15) root tty1 Mon Jun 27 21:10 - crash (1+21:47) reboot system boot 4.18.0-257.el8.x Mon Jun 27 21:10 still running wtmp begins Mon Jun 27 21:10:32 2022 //-n显示相关信息 [root@lnh ~]# lastb root ssh:notty 192.168.222.1 Sun Jul 3 23:55 - 23:55 (00:00) btmp begins Sun Jul 3 23:55:21 2022 [root@lnh ~]# lastb -n 111 root ssh:notty 192.168.222.1 Sun Jul 3 23:55 - 23:55 (00:00) btmp begins Sun Jul 3 23:55:21 2022 [root@lnh ~]# lastlog Username Port From Latest root pts/1 Mon Jul 4 16:09:26 +0800 2022 bin **Never logged in** daemon **Never logged in** adm **Never logged in** lp **Never logged in** sync **Never logged in** shutdown **Never logged in** halt **Never logged in** mail **Never logged in** operator **Never logged in** games **Never logged in** ftp **Never logged in** nobody **Never logged in** dbus **Never logged in** systemd-coredump **Never logged in** systemd-resolve **Never logged in** tss **Never logged in** polkitd **Never logged in** sssd **Never logged in** sshd **Never logged in** rngd **Never logged in** xxb **Never logged in** tsb pts/0 Sun Jul 3 19:52:58 +0800 2022 xxxb pts/0 Sun Jul 3 19:52:08 +0800 2022 tushanbu pts/0 Sun Jul 3 20:01:44 +0800 2022 lxb pts/1 Mon Jul 4 15:55:06 +0800 2022 ml **Never logged in** [root@lnh ~]# lastlog -u lxb Username Port From Latest lxb pts/1 Mon Jul 4 15:55:06 +0800 2022 [root@lnh ~]# a=/opt/software/xx.tar.gz [root@lnh ~]# basename $a xx.tar.gz [root@lnh ~]# dirname $a /opt/software //显示路径基名