文件与用户

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/

 

posted @   ——浮生——  阅读(54)  评论(1编辑  收藏  举报
编辑推荐:
· 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代理 了,记录一下
点击右上角即可分享
微信分享提示