linux 文件与用户管理

1、Linux上的文件管理类命令

(1)ls 显示文件 

        ls [OPTION]... [FILE]...

        -a 显示所有文件 

        -A:显示除.和..之外的所有文件

    -l:显示文件的详细属性信息 ,也可以用ll来表示

    -h:对文件大小进行单位换算,可能影响精度

    -d:查看目录本身而非其内部的文件

         –S:  按从大到小排序 

    -r:逆序显示文件

    -R:递归显示文件

         -X 按类别显示文件

   示例:ll -ah /--详细显示根目录下的所有文件(包括隐藏文件)

     ll -dh /etc--详细显示/etc目录本身

     ll -hv /--倒序显示/目录下所有文件(包括隐藏文件)

     ls -R /etc --递归显示/etc下所有文件

            l.    只显示隐藏文件

           ls -d */ 只显示当前目录所有子目录

           ls  */  显示当前文件目录及目录下的文件

(2)mkdir:创建目录

        mkdir [OPTION]... DIRECTORY...

    -p:自动按需创建父目录

    -m:创建目录时给定权限

         示例:mkdir -p /data/A/B --在/data目录下递归创建date/A/B三个目录

  (3)   rmdir:删除目录  只能删除空目录

         rmdir [OPTION]... DIRECTORY...

   -p:删除目录后如果其父目录为空,则一并删除

       示例:rmdir -p /data/test/A --删除A目录后,test目录为空,一并删除

(4)cd:切换目录
       示例:cd ..:切换到上级目录
          cd ~:切换回自己的家目录
          cd -:在上一次目录与当前目录直接来回切换

(5)pwd:显示当前目录

(6)cp:复制

         单源复制:cp [OPTION]... [-T] SOURCE DEST(如果DEST不存在则创建,存在则覆盖)
     多源复制:cp [OPTION]... SOURCE... DIRECTORY(DEST必须为directory)
   -i:交互式复制,即覆盖前提醒用户确认(默认)

          -a:保留原文件属性的前提下复制文件,支持目录复制,备份常用选项

   -f:强制覆盖目标文件
   -r,-R:递归复制目录

          --backup=numbered 选项会创建一个在文件名末尾用数字标记(~)的备份文件

          -u   只覆盖最新文件

      示例:cp -f /data/[1-3].txt /data/test   test必须为目录,把三个文件一起复制到test中
         cp -a /data /practice  把data目录及目录下的内容一起复制到practice中
(7)mv:剪切
          单源复制:mv [OPTION]... [-T] SOURCE DEST(如果DEST不存在则创建,存在则覆盖)
   多源复制:mv [OPTION]... SOURCE... DIRECTORY(DEST必须为directory)
   -i:交互式复制,即覆盖前提醒用户确认
   -f:强制覆盖目标文件

         -u :若目标文件已经存在,且 source 比较新,才会更新(update)

          -t  : 即指定mv的目标目录,该选项适用于移动多个源文件到一个目录的情况,此时目标目录在前,源文件在后。

         示例:mv -i /data/[1-3].txt /practice 把/data目录下三个txt文件剪切到/practice下

                  alias rm='mv -t /data'  把rm 替代为mv  把要删除的文件移动到/data 目录下

(8)rm:删除
          rm [OPTION]... FILE...
   -i:交互式复制,即覆盖前提醒用户确认
   -f:强制覆盖目标文件
   -r,-R:递归处理,将制定目录下的所有文件包括目录一并删除
          示例:rm -rf /practice 递归删除/practice目录

(9)cat:正向查看文本内容
         cat [OPTION]... [FILE]...
   -n:给显示的文本行编号
   -E:显示行结束符号$
        示例:cat -n /etc/fstab 查看/etc/fatab内容并显示行号
(10)tac:倒叙查看文本内容
         tac [OPTION]... [FILE]...
         示例: tac /etc/passwd  倒叙查看文本内容
(11)head:显示文本内容,默认显示头10行
         head [OPTION]... [FILE]...
   -n #:显示文本头#行内容
         示例:head -5 /etc/passwd  显示/etc/passwd文件头5行内容
(12)tail:显示文本内容,默认显示后10行

          tail [OPTION]... [FILE]...
   -n #:显示文本后#行内容
   -f:查看文件尾部内容结束后不退出,跟随显示新增的行
         示例:tail -8 /etc/passwd  显示/etc/passwd文件后8行内容
  (13)more:分屏显示文本内容,每次显示一屏显示完停止
        more [options] file [...]
   Space键:显示文本下一屏内容
   Enter键:只显示文本下一行内容
   b键:显示文本上一屏内容
   q键:退出
 (14)less:分屏显示文本内容,不主动退出
        less [options] file [...]
   Space键:显示文本下一屏内容
   Enter键:只显示文本下一行内容
   b键:显示文本上一屏内容
   q键:退出

 (15) ln 链接文件

       ln [OPTION]... [-T] TARGET LINK_NAME   (1st form)

       ln [OPTION]... TARGET                  (2nd form)

       ln [OPTION]... TARGET... DIRECTORY     (3rd form)

       ln [OPTION]... -t DIRECTORY TARGET...  (4th form)

        -b  删除,覆盖以前建立的链接
        -d  创建指向目录的硬链接(只适用于超级用户)
        -f  强制执行,操作前不询问
        -i  交互模式,文件存在则提示用户是否覆盖
        -n  把符号链接视为一般目录
        -s  软链接(符号链接)
        -v  显示详细的处理过程

       示例:ln -s a.txt a  为a.txt创建软链接

                ln  a.txt a  为a.txt创建硬链接

         1)软连接和Windows系统中的快捷方式有点类似

          2)硬链接,相当于多了一个文件名指向同一块内存空间,目录无法创建硬链接,不可以跨文件系统创建

   (16) file  检查文件的类型

        file [options] <filename>... 

        -f filelist 列出文件filelist中文件名的文件类型 (把需要判断的文件名写入一个文件中批量判断) 

        -F 使用指定分隔符号替换输出文件名后默认的”:”分隔符(输出结果修改)

      

2、使用命令行展开功能,创建/tmp/a1, /tmp/a2, /tmp/a1/a, /tmp/a1/b  

    执行命令mkdir -pv /tmp/a{1/{a,b},2}

    mkdir: created directory ‘/tmp/a1’

    mkdir: created directory ‘/tmp/a1/a’

    mkdir: created directory ‘/tmp/a1/b’

    mkdir: created directory ‘/tmp/a2’

   

   执行命令 tree /tmp/                          

    /tmp/

    ├── a1

    │   ├── a

    │   └── b

    └── a2


    在/tmp目录下创建目录:x_y, x_z, q_y, q_z

    执行命令mkdir -pv {x,q}_{y,z}

    mkdir: created directory ‘x_y’

    mkdir: created directory ‘x_z’

    mkdir: created directory ‘q_y’

    mkdir: created directory ‘q_z’

   

    执行tree查看效果

    .

    ├── q_y

    ├── q_z

    ├── x_y

    └── x_z


 3、文件的元数据信息包括

    Size   文件大小(字节)

    Blocks   文件使用的数据块总数

    IO Block   数据块的大小

    regular file:文件类型(常规文件) 

    Device 设备编号

    Inode 文件所在的Inode 

    Links 硬链接次数 

    Access 权限 Uid 属主id/用户 Gid 属组id/组名 

    Access Time:简写为atime,表示文件的访问时间。当文件内容被访问时,更新这个时间

    Modify Time:简写为mtime,表示文件内容的修改时间,当文件的数据内容被修改时,更新这个时间。

    Change Time:简写为ctime,表示文件的状态时间,当文件的状态被修改时,更新这个时间,例如文件的链接数,大小,权限,Blocks数。

    

   查看文件的元数据信息用stat命令

         [root@centos7 ~]#stat hello.sh 

         File: ‘hello.sh’

         Size: 32              Blocks: 8          IO Block: 4096   regular file

        Device: 802h/2050d      Inode: 100663387   Links: 1

        Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)

        Context: unconfined_u:object_r:admin_home_t:s0

        Access: 2018-10-31 20:37:17.757059440 +0800

        Modify: 2018-10-28 21:25:08.485016670 +0800

        Change: 2018-10-28 21:26:26.959023084 +0800

         Birth: -

   

    修改文件的时间戳信息

     touch [OPTION]...FILE...           

         -a:only atime           

         -m:only mtime            

         -t:使用指定的日期时间,而非现在的时间;[[CC]YY]MMDDhhmm[.ss]

     

4、在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22。

   执行命令  touch /tmp/tfile-`date  "+%Y-%m-%d-%H-%M-%S"`


    ll /tmp/

    total 0

    -rw-r--r--. 1 root root 0 Nov 22 19:36 tfile-2018-11-22-19-36-45

  

5、复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。

   执行命令mkdir /tmp/mytest1;cp -a /etc/p*[^0-9] /tmp/mytest1

   结果如下

    ls /tmp/mytest1/

    pam.d    pbm2ppa.conf  plymouth      popt.d   prelink.conf.d  profile.d  purple

    passwd   pinforc       pm            postfix  printcap        protocols  python

    passwd-  pki           pnm2ppa.conf  ppp      profile         pulse

6、创建用户tom,指定UID为5001,指定家目录为/tmp/tom, 指定shell为/bin/zsh, 指定基本组为tom,附加组为jack

     执行命令groupadd jack;useradd -u 5001 -d /tmp/tom -s /bin/zsh  -U -G jack tom

      结果如下tom:x:5001:5001::/tmp/tom:/bin/zsh

                 uid=5001(tom) gid=5001(tom) groups=5001(tom),1003(jack)

                ll -a /tmp/tom

        total 12

        drwx------.  3 tom  tom   78 Nov 22 19:55 .

        drwxrwxrwt. 10 root root 217 Nov 22 19:55 ..

        -rw-r--r--.  1 tom  tom   18 Aug  3  2017 .bash_logout

        -rw-r--r--.  1 tom  tom  193 Aug  3  2017 .bash_profile

        -rw-r--r--.  1 tom  tom  231 Aug  3  2017 .bashrc

        drwxr-xr-x.  4 tom  tom   39 Oct 17 20:27 .mozilla


7、常用的用户以及文件管理命令

 (1)查看当前用户:whoami 和who 或者 who am i

 (2)useradd :添加用户命令

         useradd [options] LOGIN

        -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,CentOS 7: ID<1000 

        -m  创建家目录,用于系统用户     

        -M  不创建家目录,用于非系统用户

        示例:useradd -s /bin/sh -g group –G adm,root abc   增加用户abc,并指定它的shell ,主组和附加组

            useadd 默认配置文件/etc/default/useradd

            /etc/login.defs  这个文件就是用来设置用户创建时默认属性的文件

 (3)usermod:修改用户信息命令

         usermod [options] LOGIN

        -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: 设定非活动期限

        示例:usermod -s /bin/ksh -d /home/z –g developer sam  修改sam用户的shell和目录以及主组

 (4)userdel 删除用户

       userdel [OPTION]... login 

       -r: 删除用户家目录

       userdel -r sam 删除sam用户并清空相关目录

 (5)su 切换用户 

         su [options...] [-] [user [args...]]

        su -  完全切换

 (6)passwd 更改密码

        passwd [OPTIONS] UserName

        -l:锁定指定用户 

        -u:解锁指定用户 

        -e:强制用户下次登录修改密码 

        -n mindays: 指定最短使用期限 

        -x maxdays:最大使用期限 

        -w warndays:提前多少天开始警告 

        -i inactivedays:非活动期限 

        --stdin:从标准输入接收用户密码 

      示例:echo magedu | passwd --stdin  varnishs 非交互式更改密码

 (7)chage 修改用户密码策略

        chage [OPTION]... LOGIN 

        -d LAST_DAY 

        -E --expiredate EXPIRE_DATE 

        -I --inactive INACTIVE 

        -m --mindays MIN_DAYS

        -M --maxdays MAX_DAYS

        -W --warndays WARN_DAYS

        –l  显示密码策略  

        示例: chage -d 0 tom 下一次登录强制重设密码 

  (8)groupadd 增加组

        groupadd [OPTION]... group_name 

        -g GID: 指明GID号;   

        -r: 创建系统组 

  (9)groupmod 修改组信息

         groupmod [OPTION]... group 

        -n group_name  新名字 

        -g 修改gid

        示例:groupmod -n linux linux2

  (10)groupdel 删除组

          groupdel GROUP

  (11)chown 修改文件所属组

        chown [OPTION]... [OWNER][:[GROUP]] FILE... 

        -R: 递归 

       示例:chown -R myuser:mygroup /test

                 chown   myuser test

                 chown  :mygroup  test  修改test所属组

  (12)chmod 修改文件权限 (rwxX)(421) 

             chmod [OPTION]... OCTAL-MODE FILE... 

            -R: 递归修改权限 

          对于文件来说rwx分别是可读可写可执行权限

          对于目录目录r权限可以看到文件列表~ w可以删文件  x可以进入目录和文件具体属性 无法操作该目录 目录基本权限

         +X:只给目录x权限,不给文件x权限,或者给有执行权限的文件 加执行权限 如-rwxrw-rw- 变成 -rwxrwxrwx

          root不受rw限制受x权限限制

        示例:chmod  u+wx,g-r,o=rx file   

                  chmod  -R g+rwX /testdir 给目录的所属组递归增加rwx权限,该目录下文件所属组只增加rw权限     

                  chmod  600  file

  (13)SUID, SGID, Sticky 特殊权限

         suid   u+s 4777  作用于二进制程序,权限与程序所有者有关

         guid   g+s 2777  作用于二进制程序,权限与程序所属组有关;作用于文件夹中,文件夹里新建文件继承目录所属组

         stick  o+t 1777  作用目录,此目录的文件只能被所有者删除

         chattr +i +a(只能追加) 锁定文件 +A 不能修改atime(访问时间) lsattr file查看特殊权限

  (14)umask 系统默认生成权限

            新建FILE权限: 666-umask 如果所得结果某位存在执行(奇数)权限,则将其权限+1 (结果偶数不变,奇数加一)

            新建DIR权限: 777-umask 

  (15)ACL高级权限

             centos6版本需要手动加acl权限功能

              tune2fs –o acl /dev/sdb1

              mount –o acl /dev/sdb1  /mnt/test  

            ACL生效顺序:所有者,自定义用户,自定义组,其他人

            应用ACL后 文件本身组权限变成acl中的mask,而非传统的组权限 

         常用命令

             getfacl: 获取文件或目录的ACL设置信息
                 getfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
                -a , --access:显示文件或目录的访问控制列表

                -d , --default:显示文件或目录的默认(缺省)的访问控制列表
                -R , --recursive:操作递归到子目录

            setfacl: 设置文件或目录的ACL设置信息
                setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
                -m, --modify=acl:修改文件或目录的扩展ACL设置信息

                -x, --remove=acl:从文件或目录删除一个扩展的ACL设置信息
                -b, --remove-all:删除所有的扩展的ACL设置信息
                -k, --remove-default:删除默认的acl设置信息
                -n, --no-mask:不要重新计算有效权限。setfacl默认会重新计算ACL mask,除非mask被明确的制定
                -d, --default:设置默认的ACL设置信息(只对目录有效)
                -R, --recursive:操作递归到所有子目录和 文件

             示例:getfacl  file 

                         setfacl  -m  u:wang:rwx  txt

                         setfacl  -Rm g:sales:rwX directory 

                         setfacl  -m  d:u:wang:rx  /data  设定该目录的默认权限,只对目录有效 或者setfacl -dm  u:wang:rx /data

                         setfacl  -x  u:wang  file  移除设置好的wang账号对该文件权限

            备份和恢复ACL  

           主要的文件操作命令cp和mv都支持ACL,只是cp命令需要 加上-p 参数。

           但是tar等常见的备份工具是不会保留目录 和文件的ACL信息 

           getfacl -R /tmp/dir1 > acl.txt   把目录的acl保存在acl.txt文件中  

           setfacl -R -b /tmp/dir1 删除该目录所有acl权限

           setfacl -R  --set-file=acl.txt  /tmp/dir1 恢复权限到目录中

           setfacl --restore acl.txt 

           getfacl -R /tmp/dir1  查看目录acl权限


  (16)pwck grpck 检查/etc/passwd  和 /etc/group 文件正确性

            用文件批量创建用户密码: newusers  chpasswd

            创建user文件,写入用户列表,格式与/etc/passwd 一致

             如:  

            postfix:x:89:89::/var/spool/postfix:/sbin/nologin

            ntp:x:38:38::/etc/ntp:/sbin/nologin

            tcpdump:x:72:72::/:/sbin/nologin

            tomcat:x:1001:1002::/home/tomcat:/bin/bash

            tom:x:5001:5001::/tmp/tom:/bin/zsh

            然后newusers txt  创建这些用户

            在创建password文件,格式

             用户:密码

             tomcat:123456

             tom:123456

            然后cat password | chpasswd  自动添加密码

                

             newgrp  切换当前用户主组              

            

        

猜你喜欢

转载自blog.51cto.com/6289984/2321295