文件与用户
Linux下的文件
1.文件常见类型
- 普通文件
d 目录文件directory
l 符号链接文件link
b 块设备block
c 字符设备character
p 管道文件pipe
s 套接字文件socket
#文件类型可用ls -l命令查看
-rw-r--r--. 1 root root 487 Nov 26 21:40 group
-rw-r--r--. 1 root root 473 Nov 26 21:40 group-
lrwxrwxrwx. 1 root root 22 Nov 20 13:53 grub2.cfg -> ../boot/grub2/grub.cfg
drwx------. 2 root root 182 Nov 20 13:54 grub.d
2.文件路径
文件路径可分为绝对路劲和相对路径两种,可用pwd命令查看路径
绝对路径:
以正斜杠/ 即根目录开始
完整的文件的位置路径
可用于任何想指定一个文件名的时候
相对路径:
不以斜线开始
一般情况下,是指相对于当前工作目录的路径,特殊场景下,是相对于某目录的位置
可以作为一个简短的形式指定一个文件名
3.列出目录内容
ls命令可以列出目录内容
常用选项:
-a 包含隐藏文件
-l 显示额外的信息
-R 目录递归
-ld 目录和符号链接信息
-1 文件分行显示
-S 按从大到小排序
-t 按mtime排序
-u 配合-t选项,显示并按atime从新到旧排序
-U 按目录存放顺序显示
-X 按文件后缀排序
-F 对不同类型文件显示时附加不同的符号:*/=>@|
-C 文件多时,以多列的方式显示文件,默认是一列(标准输出)
范例:
显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录
ls -R /etc/[^[:alpha:]]*
[root@centos7 test]# ls -d /etc/[^[:alpha:]]*
/etc/_1.txt /etc/1.txt /etc/_2.txt /etc/2.txt /etc/_3.txt /etc/3.txt /etc/_4.txt /etc/4.txt /etc/_5.txt /etc/5.txt /etc/_6.txt /etc/6.txt /etc/_7.txt /etc/7.txt /etc/_8.txt /etc/8.txt /etc/_9.txt /etc/9.txt
4.文件通配符 wildcard pattern
通配符采有特定的符号,表示特定的含义,符可以用来匹配符合条件的多个文件,方便批量管理文件
常见的通配符:
* 匹配零个或多个字符,但不匹配"." 开头的文件,即隐藏文件
"." 开头的文件,即隐藏文件
? 匹配任何单个字符,一个汉字也算一个字符
~ 当前用户家目录 ~mage 用户mage家目录
. 和 ~+ 当前工作目录
~- 前一个工作目录
[0-9] 匹配数字范围
[a-z] 一个字母
[A-Z] 一个字母
[abcd] 匹配列表中的任何的一个字符
[^abcd] 匹配列表中的所有字符以外的字符
中预定义的字符类:
[:digit:]:任意数字,相当于0-9
[:lower:]:任意小写字母,表示 a-z
[:upper:]: 任意大写字母,表示 A-Z
[:alpha:]: 任意大小写字母
[:alnum:]:任意数字或字母
[:blank:]:水平空白字符
[:space:]:水平或垂直空白字符
[:punct:]:标点符号
[:print:]:可打印字符
[:cntrl:]:控制(非打印)字符
[:graph:]:图形字符
[:xdigit:]:十六进制字符
2.文件操作
1.文件复制
利用 cp(copy)命令可以实现文件或目录的复制
语法:
cp [options] source... directory
常见选项:
-a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
-d:复制时保留链接。这里所说的链接相当于 Windows 系统中的快捷方式。
-f:覆盖已经存在的目标文件而不给出提示。
-i:与 -f 选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答 y 时目标文件将被覆盖。
-p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
-r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
-l:不复制文件,只是生成链接文件。
范例:
复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。
cp -rv p*[^0-9] /tmp/test1/
[root@centos7 test]# cp -rv p*[^0-9] /tmp/test1/
‘pam.d’ -> ‘/tmp/test1/pam.d’
‘pam.d/runuser-l’ -> ‘/tmp/test1/pam.d/runuser-l’
‘pam.d/vmtoolsd’ -> ‘/tmp/test1/pam.d/vmtoolsd’
‘pam.d/sshd’ -> ‘/tmp/test1/pam.d/sshd’
‘pam.d/smtp.postfix’ -> ‘/tmp/test1/pam.d/smtp.postfix’
‘pam.d/sudo’ -> ‘/tmp/test1/pam.d/sudo’
‘pam.d/sudo-i’ -> ‘/tmp/test1/pam.d/sudo-i’
‘pam.d/passwd’ -> ‘/tmp/test1/pam.d/passwd’
2.文件移动和改名
mv(英文全拼:move file)命令用来为文件或目录改名、或将文件或目录移入其它位置。
语法:
mv [options] source... directory
常见选项:
-i 交互式
-f 强制
-b 目标存在,覆盖前先备份
3.文件删除
rm(英文全拼:remove)命令用于删除一个文件或者目录。
语法:
rm [options] name...
常见选项:
-i 删除前逐一询问确认。
-f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。
-r 将目录及以下之档案亦逐一删除。
4.软链接和硬链接
Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。
硬连接:
硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥 有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才 会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。
创建方式:
ln file1 file2
软连接:
另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
创建方式:
ln -s file1 gile2
软连接和硬链接的泣别:
1)本质:
硬链接:本质是同一个文件
软链接:本质不是同一个文件
2)跨设备
硬链接:不支持
软链接:支持
3)inode
硬链接:相同
软链接:不同
4) 链接数
硬链接:创建新的硬链接,链接数会增加,删除硬链接,链接数减少
软链接:创建或删除,链接数不会变化
5)文件夹
硬链接:不支持
软链接:支持
6) 相对路径
硬链接:原始文件相对路径是相对于当前工作目录
软链接:原始文件的相对路径是相对于链接文件的相对路径
7)删除源文件
硬链接:只是链接数减一,但链接文件的访问不受影响
软链接:链接文件将无法访问
8)文件类型
硬链接:和源文件相同
软链接:链接文件,和源文件无关
9)文件大小
硬链接: 和源文件相同
软链接: 源文件的路径的长度
5.管道和IO重定向
1) inux 使用竖线“|”连接多个命令,这被称为管道符。管道左边命令的输出结果作为管道右边的输入内容
注意:command1 必须有正确输出,而 command2 必须可以处理 command2 的输出结果;而且 command2 只能处理 command1 的正确输出结果,不能处理 command1 的错误信息。
语法:
command1 | command2 [ | commandN... ]
2) I/O重定向:将默认的输入,输出或错误对应的设备改变,指向新的目标
a.标准输入重定向
符号:
1> 或 > 把STDOUT重定向到文件
2> 把STDERR重定向到文件
&> 把标准输出和错误都重定向
>& 和上面功能一样,建议使用上面方式
追加 >> 可以在原有内容基础上,追加内容
把输出和错误重新定向追加到文件
>> 追加标准输出重定向至文件
2>> 追加标准错误重定向至文件
b.标准输入重定向
从文件中导入STDIN,代替当前终端的输入设备,使用 < 来重定向标准输入 某些命令能够接受从文件中导入的STDIN
范例:
将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中
cat /etc/issue |tr "[:lower:]" "[:upper:]">/tmp/issue.out
[root@centos7 test]# cat /tmp/issue.out
\S
KERNEL \R ON AN \M
3.Linux下的用户和组
1.用户和组的创建
a.创建用户
语法:
useradd [options] users
常用选项:
-u UID
-o 配合-u 选项,不检查UID的唯一性
-g GID 指明用户所属基本组,可为组名,也可以GID
-c "COMMENT“ 用户的注释信息
-d HOME_DIR 以指定的路径(不存在)为家目录
-s SHELL 指明用户的默认shell程序,可用列表在/etc/shells文件中
-G GROUP1[,GROUP2,...] 为用户指明附加组,组须事先存在 -N 不创建私用组做主组,使用users组做主组
-r 创建系统用户 CentOS 6之前: ID<500,CentOS7 以后: ID<1000
-m 创建家目录,用于系统用户
-M 不创建家目录,用于非系统用户
-p 指定加密的密码
b.创建组
语法:
groupadd [options] groups
常用选项:
-g GID 指明GID号;[GID_MIN, GID_MAX]
-r 创建系统组,CentOS 6之前: ID
2.用户和组的修改
a.用户修改
语法:
usermod [options] users
常用选项:
-u UID: 新UID
-g GID: 新主组
-G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使 用-a选项
-s SHELL:新的默认SHELL
-c 'COMMENT':新的注释信息
-d HOME: 新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项
-l login_name: 新的名字
-L: lock指定用户,在/etc/shadow 密码栏的增加 !
-U: unlock指定用户,将 /etc/shadow 密码栏的 ! 拿掉
-e YYYY-MM-DD: 指明用户账号过期日期
-f INACTIVE: 设定非活动期限,即宽限期
b.组的修改
语法:
groupmod [options] groups
常用选项:
-n group_name: 新名字
-g GID: 新的GID
3.用户和组的删除
a.删除用户
语法:
userdel [options] users
常用选项:
-f, --force 强制
-r, --remove 删除用户家目录和邮箱
b. 删除组
语法:
groupdel [options] groups
常用选项:
-f, --force 强制删除,即使是用户的主组也强制删除组,但会导致无主组的用户不可用无法登录
用户管理范例:
(1)、创建组distro,其GID为2019;
groupadd -g 2019 distro
(2)、创建用户mandriva, 其ID号为1005;基本组为distro;
useradd -u 1005 -g distro mandriva
(3)、创建用户mageia,其ID号为1100,家目录为/home/linux;
useradd -u 1100 -d /home/linux mageia
(4)、给用户mageia添加密码,密码为mageedu,并设置用户密码7天后过期
echo mageedu |passwd -x 7 mandriva --stdin #非交互方式修改密码
(5)、删除mandriva,但保留其家目录;
userdel mandriva
(6)、创建用户slackware,其ID号为2002,基本组为distro,附加组peguin;
groupadd peguin #附加组需提前创建
useradd -u 2002 -g distro -G peguin slackware
(7)、修改slackware的默认shell为/bin/tcsh;
usermod -s /bin/tcsh slackware
(8)、为用户slackware新增附加组admins,并设置不可登陆。
usermod -aG admins -s /sbin/nologin slackware
4.文件管理
1.文件的属主和属组
a.修改属组
chown 命令可以修改文件的属主,也可以修改文件属组
chown [OPTION]... [OWNER][:[GROUP]] FILE... chown [OPTION]... --reference=RFILE FILE…
OWNER #只修改所有者
OWNER:GROUP #同时修改所有者和属组
:GROUP #只修改属组,冒号也可用 . 替换
--reference=RFILE #参考指定的的属性,来修改
-R #递归,此选项慎用,非常危险!
b.修改属组
chgrp 命令可以只修改文件的属组
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE…
-R 递归
2.文件权限管理
文件权限说明
文件的权限主要针对三类对象进行定义
owner 属主, u
group 属组, g
other 其他, o
每个文件针对每类访问者都定义了三种常用权限
r Readable
w Writable
x eXcutable
对文件的权限:
r 可使用文件查看类工具,比如:cat,可以获取其内容
w 可修改其内容
x 可以把此文件提请内核启动为一个进程,即可以执行(运行)此文件(此文件的内容必须是可执行)
对目录的权限:
r 可以使用ls查看此目录中文件列表
w 可在此目录中创建文件,也可删除此目录中的文件,而和此被删除的文件的权限无关
x 可以cd进入此目录,可以使用ls -l查看此目录中文件元数据(须配合r权限),属于目录的可访问的最 小权限 X 只给目录x权限,不给无执行权限的文件x权限
八进制表示:
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7
用数字表示
r:4
w:2
x:1
文件权限修改
语法
chmod [OPTION]... MODE[,MODE]... FILE...
模式法格式
MODE:who opt permission
who:u,g,o,a
opt:+,-,=
permission:r,w,x
修改指定一类用户的所有权限
u= g= o= ug= a= u=,g=
chmod a=rwx file
修改指定一类用户某个或某个权限
u+ u- g+ g- o+ o- a+ a- + -
chmod u+r file
-R: 递归修改权限
数字法格式:
将对象所具有的权限所对应的数字相加,表示该对象对文件所具有的权限
chmod 777 file
chmod 655 file
chmod 000 file
3.特殊权限
除上述r,w,x权限外文件还具有特殊权限:SUID, SGID, Sticky
特殊权限
SUID 作用于二进制可执行文件上,用户将继承此程序所有者的权限
SGID 作用于二进制可执行文件上,用户将继承此程序所有组的权限 作于于目录上, 此目录中新建的文件的所属组将自动从此目录继承
STICKY 作用于目录上,此目录中的文件只能由所有者自已来删除
SUID权限设定:
chmod u+s FILE...
chmod 4xxx FILE
chmod u-s FILE...
4.访问控制列表ACL
ACL相关命令
setfacl 可设置ACL权限
getfacl 可查看设置的ACL权限
setfacl -m u:chen:rwx file|directory
setfacl -m g:admins:rw file| directory
setfacl -x u:chen file |directory
清除所有ACL权限
setfacl -b file1
复制file1的acl权限给file2
getfacl file1 | setfacl --set-file=- file2
权限管理范例:
创建用户user1、user2、user3。在/data/下创建目录test
(1)、目录/data/test属主、属组为user1
chown user1 /data/test/
(2)、在目录属主、属组不变的情况下,user2对文件有读写权限
chmod o+rw /data/test
(3)、user1在/data/test目录下创建文件a1.sh, a2.sh, a3.sh, a4.sh,设置所有用户都不可删除1.sh,2.sh文件、除了user1及root之外,所有用户都不可删除a3.sh, a4.sh
chattr +i a{1..2}.sh chmod o+t test
(4)、user3增加附加组user1,同时要求user1不能访问/data/test目录及其下所有文件
usermod -aG user1 user3;chmod u-rwx /data/test
(5)、清理/data/test目录及其下所有文件的acl权限
setfacl -R -b /data/test/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下