Linux基础命令(七)
文件管理(2)
rename
- rename :
批量修改文件名.
示例 :
将当前目录下所有
以f开头
其中带有txt
的文件,将txt全部替换
成txt.bak
[root@Redhat7 data]# ll
total 4
-rw-r--r--. 1 root root 59 Sep 25 21:09 file
-rw-r--r--. 1 root root 0 Sep 25 21:19 file1.txt
-rw-r--r--. 1 root root 0 Sep 25 21:19 file2.txt
-rw-r--r--. 1 root root 0 Sep 25 21:19 file3.txt
-rw-r--r--. 1 root root 0 Sep 25 21:19 file4.txt
-rw-r--r--. 1 root root 0 Sep 25 21:19 file5.txt
-rw-r--r--. 1 root root 0 Sep 25 21:19 file6.txt
-rw-r--r--. 1 root root 0 Sep 25 21:19 file7.txt
-rw-r--r--. 1 root root 0 Sep 25 21:19 file8.txt
-rw-r--r--. 1 root root 0 Sep 25 21:19 file9.txt
drwxr-xr-x. 2 root root 22 Sep 25 08:31 script
[root@Redhat7 data]# rename txt txt.bak f*
[root@Redhat7 data]# ls
file file2.txt.bak file4.txt.bak file6.txt.bak file8.txt.bak script
file1.txt.bak file3.txt.bak file5.txt.bak file7.txt.bak file9.txt.bak
索引节点
[root@CentOS8 data]# ll -i /home/
total 0
68006508 drwx------. 3 td td 99 Sep 25 21:59 td
getent
-
getent命令示例 :
[root@CentOS8 data]# getent passwd root
root:X:0:0:root:/root:/bin/bash
[root@CentOS8 data]# getent passwd td
td:X:1000:1000:td:/home/td:/bin/bash
[root@CentOS8 data]# getent shadow root
root: FAi.5c4GIBQk.dtE$RNUTc0pJy86Mrpo/kiRy3dydElumBxE5OMBiDqM0.EsBFYUjdmDWltIXpkylBljuwu.f0aKkXjm8viLdNVUc21::0:99999:7:::
[root@CentOS8 data]# getent shadow td
td: rfiJT/RdsYEy4Otp$tfEujCCh5JT5AaegE02xCfTN65lFnSCse/uVh6n/Ze2bnRva8BPLCDwzGeFd77wRJOX1oeiBYLRTZeypFA4Rp1::0:99999:7:::
Linux用户和组的主要配置文件:
/etc/passwd:用户及其属性信息(名称,UID,GID等)
/etc/group:组及其属性信息
/etc/shadow:用户密码及其相关属性
/etc/gshadow:组密码及其相关属性
chage
- chage :
修改帐号和密码的有效期限.
选项 :
-m:密码可更改的最小天数。为零时代表任何时候都可以更改密码。
-M:密码保持有效的最大天数。
-w:用户密码到期前,提前收到警告信息的天数。
-E:帐号到期的日期。过了这天,此帐号将不可用。
-d:上一次更改的日期。
-i:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
-l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。
示例 :
chage td
Changing the aging information for td
Enter the new value, or press ENTER for the default
Minimum Password Age [0]:
-
乱码生成指令 :
cat /dev/urandom (生成乱码)
-
利用乱码获得
随机十位数
(密码?)[root@CentOS8 data]# cat /dev/urandom |tr -dc ‘[:alnum:]’ |head -c10
qrMrzsOWBR
[root@CentOS8 data]# cat /dev/urandom |tr -dc ‘[:alnum:]’ |head -c107rx7NGQYNM
[root@CentOS8 data]# cat /dev/urandom |tr -dc ‘[:alnum:]’ |head -c10BRDcP0bRZx
[root@CentOS8 data]#
用户管理命令 :
useradd
usermod
userdel
组账号维护命令 :
groupadd
groupmod
groupdel
useradd
-
useradd :
用于Linux中创建的新的系统用户。useradd可用来建立用户帐号。
帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号。
使用useradd指令所建立的帐号,实际上是保存在/etc/passwd文本文件中。
选项 :
-c<备注>:加上备注文字。备注文字会保存在passwd的备注栏位中;
-d<登入目录>:指定用户登入时的启始目录;
-D:变更预设值;
-e<有效期限>:指定帐号的有效期限;
-f<缓冲天数>:指定在密码过期后多少天即关闭该帐号;
-g<群组>:指定用户所属的群组;
-G<群组>:指定用户所属的附加群组;
-m:自动建立用户的登入目录;
-M:不要自动建立用户的登入目录;
-n:取消建立以用户名称为名的群组;
-r:建立系统帐号;
-s<shell>:指定用户登入后所使用的shell;
-u<uid>:指定用户id。
家目录模板
[root@CentOS8 data]# ls -a /etc/skel/
. .. .bash_logout .bash_profile .bashrc .mozilla
skel
是所有用户家目录
的模板
因此,如果我们误删
了某个用户的家目录,那么我们就可以复制该目录
到/home/user下,同时修改权限属主属组
即可恢复
示例:
恢复被误删的td用户的家目录
cp -r /etc/skel /home/td;chown -R td:td /home/td;chmod 700 /home/td
如何批量创建
用户/密码:
newusers text.txt (批量创建用户,提前创建一个文件text.txt,其内容格式为:td:x:1000:1000:td:/home/td:/bin/bash)
cat text.txt | chpasswd (批量创建用户密码,提前创建一个文件text.txt,其内容格式为:user:passwd)
其方法是 :提前
将要创建的用户或密码写入一个文件中
,用户文件内容
为(参考/etc/passwd)格式;密码文件内容为 用户登录名:密码
usermod
-
usermod :
用于修改用户的基本信息。usermod命令不允许你改变正在线上的使用者帐号名称。
当usermod命令用来改变user id,必须确认这名user没在电脑上执行任何程序.
选项 :
-c<备注>:修改用户帐号的备注文字;
-d<登入目录>:修改用户登入时的目录;
-e<有效期限>:修改帐号的有效期限;
-f<缓冲天数>:修改在密码过期后多少天即关闭该帐号;
-g<群组>:修改用户所属的群组;
-G<群组>;修改用户所属的附加群组;
-l<帐号名称>:修改用户帐号名称;
-L:锁定用户密码,使密码无效;
-s<shell>:修改用户登入后所使用的shell;
-u<uid>:修改用户ID;
-U:解除密码锁定。
示例 :
[root@CentOS8 data]# id td
uid=1000(td) gid=1000(td) groups=1000(td)
[root@CentOS8 data]# usermod -g root td
[root@CentOS8 data]# id td
uid=1000(td) gid=0(root) groups=0(root)
userdel
- userdel :
用于删除给定的用户,以及与用户相关的文件。若不加选项,则仅删除用户帐号,而不删除相关文件。
选项 :
-f:强制删除用户,即使用户当前已登录;
-r:删除用户的同时,删除与用户相关的所有文件。
passwd
- passwd :
用于设置用户的认证信息,包括用户密码、密码过期时间等。
系统管理者则能用它管理系统用户的密码。只有管理者可以指定用户名称,一般用户只能变更自己的密码。
选项 :
-d:删除密码,仅有系统管理者才能使用;
-f:强制执行;
-k:设置只有在密码过期失效后,方能更新;
-l:锁住密码;
-s:列出密码的相关信息,仅有系统管理者才能使用;
-u:解开已上锁的帐号。
echo 密码 | passwd --stdin 用户 (给用户设置密码)
gpasswd
- gpasswd :
是Linux下工作组文件/etc/group和/etc/gshadow管理工具。
选项 :
-a:添加用户到组;
-d:从组删除用户;
-A:指定管理员;
-M:指定组成员和-A的用途差不多;
-r:删除密码;
-R:限制用户登入组,只有组中的成员才可以用newgrp加入该组。
newgrp命令:临时切换主组(若用户原不属于此组则需要组密码)
groupmems
-g:更改为指定组(只有root)
-a: 指定用户加入组
-d:从组中删除用户
-p, --purge 从组中清除所有成员
-l, --list 显示组成员列表
groups
- groups :
查看用户所属组列表;在标准输入输出上输出指定用户所在组的组成员,每个用户属于/etc/passwd中指定的一个组和在/etc/group中指定的其他组.
示例 :
[root@CentOS8 ~]# groups td
td : td
[root@CentOS8 ~]# groups root
root : root
chmod
- chmod :
用来变更文件或目录的权限.
权限范围的表示法如下 :
u User,即文件或目录的拥有者;
g Group,即文件或目录的所属群组;
o Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围;
a All,即全部的用户,包含拥有者,所属群组以及其他用户;
r 读取权限,数字代号为“4”;
w 写入权限,数字代号为“2”;
x 执行或切换权限,数字代号为“1”;
- 不具任何权限,数字代号为“0”;
选项 :
-c或——changes:效果类似“-v”参数,但仅回报更改的部分;
-f或--quiet或——silent:不显示错误信息;
-R或——recursive:递归处理,将指令目录下的所有文件及子目录一并处理;
-v或——verbose:显示指令执行过程;
--reference=<参考文件或目录>:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同;
修改文件text的权限 :
chmod u+x,g+w text
chmod u=rwx,g=rw,o=r text
chmod 764 text
chmod a+x text
经典试题 :
/etc/fstab复制到/data/dir,至少需要什么权限?
1)cp命令 有执行权限
2)/etc目录有执行权限,fstab读权限
3)/data目录有执行权限,dir目录有执行和写权限
chown
-
chown :
改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。
用户可以是用户或者是用户D,用户组可以是组名或组id。文件名可以使由空格分开的文件列表,在文件名中可以包含通配符。
只有文件主和超级用户才可以便用该命令。
选项 :
-c或——changes:效果类似“-v”参数,但仅回报更改的部分;
-f或--quite或——silent:不显示错误信息;
-h或--no-dereference:只对符号连接的文件作修改,而不更改其他任何相关文件;
-R或——recursive:递归处理,将指定目录下的所有文件及子目录一并处理;
-v或——version:显示指令执行过程;
--dereference:效果和“-h”参数相同;
--reference=<参考文件或目录>:把指定文件或目录的拥有者与所属群组全部设成和参考文件或目录的拥有者与所属群组相同;
示例 :
-
将目录/usr/meng及其下面的所有文件、子目录的文件主改成 liu :
chown -R liu /usr/meng
-
将file的属主属组改为root :
chown root:root /data/file
chgrp
-
chgrp :
用来改变文件或目录所属的用户组。该命令用来改变指定文件所属的用户组。
其中,组名可以是用户组的id,也可以是用户组的组名。文件名可以 是由空格分开的要改变属组的文件列表,也可以是由通配符描述的文件集合。
如果用户不是该文件的文件主或超级用户(root),则不能改变该文件的组。
在UNIX系统家族里,文件或目录权限的掌控以拥有者及所属群组来管理。
您可以使用chgrp指令去变更文件与目录的所属群组,设置方式采用群组名称或群组识别码皆可。
选项 :
-c或——changes:效果类似“-v”参数,但仅回报更改的部分;
-f或--quiet或——silent:不显示错误信息;
-h或--no-dereference:只对符号连接的文件作修改,而不是该其他任何相关文件;
-R或——recursive:递归处理,将指令目录下的所有文件及子目录一并处理;
-v或——verbose:显示指令执行过程;
--reference=<参考文件或目录>:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同;
文件 :指定要改变所属组的文件列表。多个文件或者目录之间使用空格隔开。
示例 :
-
将/usr/meng及其子目录下的所有文件的用户组改为mengxin :
chgrp -R mengxin /usr/meng
umask
-
umask :
用来设置限制新建文件权限的掩码。当新文件被创建时,其最初的权限由文件创建掩码决定。
用户每次注册进入系统时,umask命令都被执行, 并自动设置掩码mode来限制新文件的权限。
用户可以通过再次执行umask命令来改变默认值,新的权限将会把旧的覆盖掉。
选项 :
-p:输出的权限掩码可直接作为指令来执行;
-S:以符号方式输出权限掩码。
新建文件
的默认权限
:666-umask;如果所得结果中存在奇数
权限,则将其+1
新建目录
的默认权限
:777-umask
umask默认为 : 022
全局设置
:/etc/bashrc 用户设置
:~/.bashrc
Linux文件系统中的特殊权限:
SUID,SGID,Sticky 独立于常规权限之外
SUID:作用于可执行的二进制的程序;权限4;功能:用户执行此程序时,将继承此程序所有者的权限。
SGID:作用于可执行的二进制的程序;权限2;功能:用户执行此程序时,将继承此程序所属组的权限。
作用于目录;功能:此目录中新建的文件将自动继承此目录的所属组;
Sticky:作用于目录;权限1;功能:只可删除自己的文件。
setfacl
- setfacl :
用来在命令行里设置ACL(访问控制列表)。在命令行里,一系列的命令跟随以一系列的文件名。
选项 :
-b,--remove-all:删除所有扩展的acl规则,基本的acl规则(所有者,群组,其他)将被保留。
-k,--remove-default:删除缺省的acl规则。如果没有缺省规则,将不提示。
-n,--no-mask:不要重新计算有效权限。setfacl默认会重新计算ACL mask,除非mask被明确的制定。
--mask:重新计算有效权限,即使ACL mask被明确指定。
-d,--default:设定默认的acl规则。
--restore=file:从文件恢复备份的acl规则(这些文件可由getfacl -R产生)。通过这种机制可以恢复整个目录树的acl规则。此参数不能和除--test以外的任何参数一同执行。
--test:测试模式,不会改变任何文件的acl规则,操作后的acl规格将被列出。
-R,--recursive:递归的对所有文件及目录进行操作。
-L,--logical:跟踪符号链接,默认情况下只跟踪符号链接文件,跳过符号链接目录。
-P,--physical:跳过所有符号链接,包括符号链接文件。
--:标识命令行参数结束,其后的所有参数都将被认为是文件名
-:如果文件名是-,则setfacl将从标准输入读取文件名。
ACL
-
ACL :
(Access Control List)實現靈活的權限管理.
-
mask:設置除所有者和other以外的用戶或組的最高權限;
setfacl -m u:mage:rw file.txt (設置用戶mage對文件file.txt的ACL權限rw)用戶:u;組:g;
setfacl -m u:wang:r file.txt (設置用戶wang對文件file.txt的ACL權限r)
getfacl file.txt 查看文件file.txt的ACL權限
setfacl -b file.txt 清除文件file.xtt的所有ACL權限
# 示例 :
setfacl -m mask::rw file.txt (設置文件file.txt的最高權限rw)
setfacl -R -m u:mage:4 /data/file.txt 設置文件file.txt及子文件對用戶mage的ACL權限r;
setfacl -Rb /data/file.txt 清除文件file.txt及子文件的所有ACL權限;
- ACL權限執行順序:
所有者,ACL中自定义用户,ACL自定义的组,所属组,other