1. Linux上的文件管理类命令都有哪些,其常用使用方法及其相关示例演示。

  • mkdir:创建目录
    使用方法:mkdir [OPTION]... DIRECTORY…
      								-p:自动按需创建父目录
      								-v:显示详细过程      
      								-m Mode:直接给定权限
    示例:
    1、创建一个目录,名称为test1
    [root@localhost tmp]# mkdir test1
    2、创建/tmp/test1/test2目录及/tmp/test3/test4目录
    [root@localhost ~]# mkdir /tmp/test1/test2      #创建成功
    [root@localhost ~]# mkdir /tmp/test3/test4      #创建失败,提示目录不存在,因为test3目录不存在
    mkdir: cannot create directory ‘/tmp/test3/test4’: No such file or directory
    [root@localhost ~]# mkdir -p /tmp/test3/test4   #加上 -p 参数,自动创建父目录/tmp/test3
    3、创建/tmp/test5/test6 目录并显示其详细过程
    [root@localhost ~]# mkdir -v -p /tmp/test5/test6
    mkdir: created directory ‘/tmp/test5’
    mkdir: created directory ‘/tmp/test5/test6’
    4、创建/tmp/test7目录,并给定其777的权限
    [root@localhost ~]# mkdir -v -m 777 /tmp/test7
    [root@localhost ~]# ll -d /tmp/test7/           #查看/tmp/test7的权限为777
    drwxrwxrwx. 2 root root 6 Jul 26 23:33 /tmp/test7/
    
  • rmdir:删除空目录
    使用方法:rmdir [OPTION]... DIRECTORY…  
      								-p:删除某目录后,如果其父目录为空,则一并删除之;
      								-v: 显示过程;
    示例:
    1、删除/tmp/test1目录
    [root@localhost ~]# rmdir /tmp/test1   
    rmdir: failed to remove ‘/tmp/test1’: Directory not empty
    请注意:使用rmdir命令删除目录时,该目录必须为空,否则命令执行失败
    2、删除/tmp/test1/test2目录,显示详细过程,如果其父目录为空,则一并删除
    [root@localhost ~]# rmdir -pv /tmp/test1/test2/
    rmdir: removing directory, ‘/tmp/test1/test2/’
    rmdir: removing directory, ‘/tmp/test1’
    rmdir: removing directory, ‘/tmp’
    rmdir: failed to remove directory ‘/tmp’: Device or resource busy
    
  • tree:把某个目录下的子目录及文件以树形结构显示出来
    使用方法:tree [options] [directory]
      							-L #:指定要显示的层级
    示例:
    1、以树形结构显示/tmp下的所有目录及文件
    [root@localhost ~]# tree /tmp
    /tmp
    ├── ssh-ghXqTgj14FDI
    │   └── agent.11690
    ├── systemd-private-4247979ab04243af91e353b6549743bf-bolt.service-OVtMg3
    │   └── tmp
    ├── systemd-private-4247979ab04243af91e353b6549743bf-colord.service-iukSKN
    │   └── tmp
    ├── systemd-private-4247979ab04243af91e353b6549743bf-cups.service-zMJOXE
    │   └── tmp
    ├── systemd-private-4247979ab04243af91e353b6549743bf-fwupd.service-tEYeB8
    │   └── tmp
    ├── systemd-private-4247979ab04243af91e353b6549743bf-rtkit-daemon.service-Ue2VYB
    │   └── tmp
    ├── test3
    │   └── test4
    ├── test5
    │   └── test6
    └── test7
    
    16 directories, 1 file
    
  • cp:文件复制
     使用方法:
       单源复制:cp [OPTION]... [-T] SOURCE DEST
      	 如果DEST不存在:则事先创建此文件,并复制源文件的数据流至DEST中;
      	 如果DEST存在:
      			如果DEST是非目录文件:则覆盖目标文件;
      			如果DEST是目录文件:则先在DEST目录下创建一个与源文件同名的文件,并复制其数据流;
    
       多源复制: cp [OPTION]... SOURCE... DEST
      					cp [OPTION]... -t DEST SOURCE...
     		如果DEST不存在:错误;
     		如果DEST存在:
     			如果DEST是非目录文件:错误;
     			如果DEST是目录文件:分别复制每个文件至目标目录中,并保持原名;
    
       常用选项:
     		-i:交互式复制,即覆盖之前提醒用户确认;
     		-f:强制覆盖目标文件;
     		-r, -R:递归复制目录;
     		-d:复制符号链接文件本身,而非其指向的源文件;
     		-a:-dR --preserve=all, archive,用于实现归档;
     		--preserv=
     			mode:权限
     			ownership:属主和属组
     			timestamps: 时间戳
     			context:安全标签
     			xattr:扩展属性
     			links:符号链接
     			all:上述所有属性
      示例:
      1、单源复制
      DEST不存在情况
      [root@localhost tmp]# cp /etc/fstab fstab1
      [root@localhost tmp]# ll
      total 4
      -rw-r--r--. 1 root root 625 Sep 10 09:45 fstab1
    
      DEST存在,且为非目录文件
      [root@localhost tmp]# cp /etc/fstab fstab1
      cp: overwrite ‘fstab1’? y    提示是否覆盖该文件
      [root@localhost tmp]# ll
      total 4
      -rw-r--r--. 1 root root 625 Sep 10 09:47 fstab1
    
      DEST存在,且为非目录文件
      [root@localhost tmp]# cp /etc/fstab /tmp/
      [root@localhost tmp]# ll
      total 8
      -rw-r--r--. 1 root root 625 Sep 10 09:48 fstab
    
      2、多源复制
    
      DEST不存在情况,报错
      [root@localhost tmp]# cp /etc/fstab /etc/redhat-release /tmp1
      cp: target ‘/tmp1’ is not a directory
    
      DEST是非目录文件,报错
      [root@localhost tmp]# cp /etc/fstab /etc/redhat-release /tmp/fstab
      cp: target ‘/tmp/fstab’ is not a directory
    
      DEST存在情况,且为目录文件
      [root@localhost tmp]# cp /etc/fstab /etc/redhat-release /tmp
      [root@localhost tmp]# ll
      total 12
      -rw-r--r--. 1 root root 625 Sep 10 09:52 fstab
      -rw-r--r--. 1 root root  38 Sep 10 09:52 redhat-release
    
  • mv:文件移动(文件重命名)
    使用方法:mv [OPTION]... [-T] SOURCE DEST
      				mv [OPTION]... SOURCE... DIRECTORY
      				mv [OPTION]... -t DIRECTORY SOURCE..
      							-i: 若指定目录已有同名文件,则先询问是否覆盖旧文件;
      							-f: 在mv操作要覆盖某已有的目标文件时不给任何指示;
    示例:
    1、 mv 文件名  文件名  ##将源文件名修改为目标文件名
    [root@localhost tmp]# ll
    total 12
    -rw-r--r--. 1 root root 625 Sep 10 09:52 fstab
    [root@localhost tmp]# mv fstab hello
    [root@localhost tmp]# ll
    total 12
    -rw-r--r--. 1 root root 625 Sep 10 09:52 hello
    
    2、mv 文件名 目录名  ##将文件移动至目标目录
    [root@localhost tmp]# mv hello test/
    [root@localhost tmp]# ll /tmp/test/
    total 4
    -rw-r--r--. 1 root root 625 Sep 10 09:52 hello
    
    3、mv 目录名  目录名  ##目标目录已存在,将源目录移动至目标目录,目标目录不存在,则改名
    目标目录不存在情况
    [root@localhost tmp]# mv test/ test1
    [root@localhost tmp]# ll
    total 8
    drwxr-xr-x. 2 root root  19 Sep 10 10:08 test1
    
    目标目录存在情况
    [root@localhost tmp]# mv test1/ test2
    [root@localhost tmp]# ll
    [root@localhost tmp]# ll
    total 8
    drwxr-xr-x. 3 root root  19 Sep 10 10:11 test2
    [root@localhost tmp]# ll test2/
    total 0
    drwxr-xr-x. 2 root root 19 Sep 10 10:08 test1
    
  • rm:移除文件或目录
     使用方法:rm [OPTION]... FILE...
      						-i:interactive  互动模式
      						-f:force 强制删除
      						-r: recursive 递归删除
    示例:
    1、
    [root@localhost tmp]# rm -i fstab1 
    rm: remove regular file ‘fstab1’? y
    2、
    [root@localhost tmp]# rm -rf test2/   递归强制删除,此操作很危险
    
  • cd:切换目录
    示例:
    使用绝对目录切换目录
    [root@localhost tmp]# cd /etc/sysconfig/
    切换至家目录
    [root@localhost sysconfig]# cd ~
    切换至上级目录
    [root@localhost ~]# cd ..
    使用相对路径切换目录
    [root@localhost /]# cd /etc/
    [root@localhost etc]# cd ./sysconfig/
    [root@localhost sysconfig]# cd ../rc.d/
    [root@localhost rc.d]# 
    
  • pwd:显示当前所在目录
    示例:
    [root@localhost rc.d]# pwd
    /etc/rc.d
    
  • ls:列出目录
    	ls [OPTION]... [FILE]…
            -a:显示所有文件,包括隐藏文件
            -A:显示除 . 及 .. 的所有文件
            -l:--long,长格式文件,显示文件的详细属性信息
      	      -rw-r--r--. 1 root root 1666 Jun 15 00:08 initial-setup-ks.cfg
      		      -:文件类型:有-,d,b,c,l,s,p
      		      rw-r--r--:
      			      rw-:文件属主的权限
      			      r--:文件属组的权限
      			      r--:其他用户的权限
      		      1:数字表示文件被硬链接的次数
      		      root:文件的属主
      		      root:文件的属组
      		      1666:数字表示文件的大小,单位是字节
      		      Jun 15 00:08:文件最近一次被修改的时间
      		      initial-setup-ks.cfg:文件名
            -h:--human-readable:对文件大小单位进行换算,换算后结果会是非精确值
            -d:查看目录自身属性而非其内部的文件列表
            -r:逆序显示
            -R:递归显示
    
  • cat:文本文件查看
     使用方法:cat [OPTION]... [FILE]…
      								-n:显示编号
      								-E:显示行结束符$
    示例:
     [root@localhost rc.d]# cat -nE /etc/fstab 
     1	$
     2	#$
     3	# /etc/fstab$
     4	# Created by anaconda on Mon Jun 24 14:44:35 2019$
     5	#$
     6	# Accessible filesystems, by reference, are maintained under '/dev/disk'$
     7	# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info$
     8	#$
     9	/dev/mapper/centos-root /                       xfs     defaults        0 0$
    10	UUID=b2a943d5-d091-435a-8e8f-82f5a09183b3 /boot                   xfs     defaults        0 0$
    11	/dev/mapper/centos-home /home                   xfs     defaults        0 0$
    12	/dev/mapper/centos-swap swap                    swap    defaults        0 0$
    13	/dev/sdc1 /mydata ext4 defaults,noatime,noexec	0 0$
    14	/dev/sdc2	swap	swap	defaults 0 0$
    

2、使用命令行展开功能,创建/tmp/a1, /tmp/a2, /tmp/a1/a, /tmp/a1/b,在/tmp目录下创建目录:x_y, x_z, q_y, q_z

    [root@localhost rc.d]# mkdir -pv /tmp/{a1/{a,b},a2}
    mkdir: created directory ‘/tmp/a1’
    mkdir: created directory ‘/tmp/a1/a’
    mkdir: created directory ‘/tmp/a1/b’
    mkdir: created directory ‘/tmp/a2’

    [root@localhost rc.d]# mkdir -pv /tmp/{x,q}_{y,z}
    mkdir: created directory ‘/tmp/x_y’
    mkdir: created directory ‘/tmp/x_z’
    mkdir: created directory ‘/tmp/q_y’
    mkdir: created directory ‘/tmp/q_z’

3、文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息。

文件的元数据是指文件的属性、大小、创建时间、访问时间、属主属组等信息。
可以通过stat命令查看
[root@localhost tmp]# stat redhat-release 
File: ‘redhat-release’
Size: 38        	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 67974302    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:user_tmp_t:s0
Access: 2019-09-10 09:52:13.872712453 +0800
Modify: 2019-09-10 09:52:13.872712453 +0800
Change: 2019-09-10 09:52:13.872712453 +0800
Birth: -
其中:
file:文件名;
size:文件大小
block:文件占了多少个数据块
IO Block:文件所占数据块的块大小
Device:硬件,既说明该文件在硬盘的那个柱
Inode:节点号
links:链接
Access(第一个):权限
Uid:该文件所属的属主
Gid:该文件所属的属组
context:安全上下文 
Access(第二个):文件上一次的访问时间
Modify:文件上一次修改的时间
Change:文件上一次属性更改的时间

可以使用touch命令修改文件的时间戳信息
		touch [OPTION]... FILE...
		-c: 指定的文件路径不存在时不予创建;
		-a: 仅修改access time;
		-m:仅修改modify time;
		-t STAMP
            [[CC]YY]MMDDhhmm[.ss]
示例:
[root@localhost tmp]# ll
-rw-r--r--. 1 root root 38 Sep 10 12:34 redhat-release
[root@localhost tmp]# touch -m -t 201909101111.11 redhat-release 
[root@localhost tmp]# ll
-rw-r--r--. 1 root root 38 Sep 10 11:11 redhat-release  #文件最后一次修改时间被改变

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

  [root@localhost tmp]# touch /tmp/tfile-$(date +%Y-%m-%d-%H-%M-%S)
  [root@localhost tmp]# l
  -rw-r--r--. 1 root root  0 Sep 10 13:10 tfile-2019-09-10-13-10-51

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

[root@localhost tmp]# cp -r /etc/p*[^0-9] /tmp/mytest1/
[root@localhost mytest1]# ll /tmp/mytest1/
total 56
drwxr-xr-x.  2 root root 4096 Sep 10 13:14 pam.d
-rw-r--r--.  1 root root 7058 Sep 10 13:14 passwd
-rw-r--r--.  1 root root 7009 Sep 10 13:14 passwd-
-rw-r--r--.  1 root root 1362 Sep 10 13:14 pbm2ppa.conf
-rw-r--r--.  1 root root 2872 Sep 10 13:14 pinforc
drwxr-xr-x. 12 root root  151 Sep 10 13:14 pki
drwxr-xr-x.  2 root root   28 Sep 10 13:14 plymouth
drwxr-xr-x.  5 root root   52 Sep 10 13:14 pm
-rw-r--r--.  1 root root 6300 Sep 10 13:14 pnm2ppa.conf
drwxr-xr-x.  2 root root    6 Sep 10 13:14 popt.d
drwxr-xr-x.  2 root root  154 Sep 10 13:14 postfix
drwxr-xr-x.  3 root root  219 Sep 10 13:14 ppp
drwxr-xr-x.  2 root root  105 Sep 10 13:14 prelink.conf.d
-rw-r--r--.  1 root root  233 Sep 10 13:14 printcap
-rw-r--r--.  1 root root 1819 Sep 10 13:14 profile
drwxr-xr-x.  2 root root 4096 Sep 10 13:14 profile.d
-rw-r--r--.  1 root root 6545 Sep 10 13:14 protocols
drwxr-xr-x.  2 root root   79 Sep 10 13:14 pulse
drwxr-xr-x.  2 root root   23 Sep 10 13:14 purple
drwxr-xr-x.  2 root root   35 Sep 10 13:14 python

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

useradd jack
useradd -u 5001  -G jack -d /tmp/tom -s /bin/zsh tom
[root@localhost mytest1]# id tom
uid=5001(tom) gid=1104(tom) groups=1104(tom),1103(jack)

7、常用的用户以及用户管理命令有哪些,并演示命令以及用法。

用户ID:

管理员:0
普通用户:1-65535
系统用户:1-499 centos6  1-999 centos7
登录用户:500-60000 centos6  10000-60000 centos7

组ID:

管理员:0
普通用户组:1-65535
系统用户组:1-499 centos6  1-999 centos7
登录用户组:500-60000 centos6  10000-60000 centos7
  • groupadd:添加组
    使用方法:groupadd [选项] group_name
      	                  -g GID:指定GID;默认是上一个组的GID+1;
      	                  -r: 创建系统组;
    [root@localhost ~]# groupadd test1
    [root@localhost ~]# tail -1 /etc/group
    test1:x:1105:
    
  • groupmod:修改组属性
    groupmod [选项] GROUP
      	    -g GID:修改GID;
              -n new_name:修改组名;
    示例:
    [root@localhost ~]# groupmod -g 3002 -n test1new test1
    [root@localhost ~]# tail -1 /etc/group
    test1new:x:3002:
    
  • groupdel:删除组
    groupdel GROUP
    示例:
    [root@localhost ~]# groupdel test1new
    
  • useradd:创建用户
    useradd [选项] 登录名
      	    -u, --uid UID:指定UID;
      	    -g, --gid GROUP:指定基本组ID,此组得事先存在;
      	    -G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:指明用户所属的附加组,多个组之间用逗号分隔;
      	    -c, --comment COMMENT:指明注释信息;
      	    -d, --home HOME_DIR:以指定的路径为用户的家目录;通过复制/etc/skel此目录并重命名实现;指定的家目录路径如果事先存在,则不会为用户复制环境配置文件;
      	    -s, --shell SHELL:指定用户的默认shell,可用的所有shell列表存储在/etc/shells文件中;
      	    -r, --system:创建系统用户;
    
    注意:创建用户时的诸多默认设定配置文件为/etc/login.defs		
    
      useradd -D:显示创建用户的默认配置;
      useradd -D 选项: 修改默认选项的值;
    
    修改的结果保存于/etc/default/useradd文件中;
    
    示例:
    [root@localhost ~]# groupadd test1
    [root@localhost ~]# groupadd test2
    [root@localhost ~]# tail -2 /etc/group
    test1:x:1105:
    test2:x:1106:
    [root@localhost ~]# useradd -u 5002 -g 1105 -G 1106 -c "this is a test user" -d /tmp/test3 -s /bin/zsh test3
    
  • usermod:修改用户属性
    使用方法:
    usermod [选项] 登录
      	    -u, --uid UID:修改用户的ID为此处指定的新UID;
      	    -g, --gid GROUP:修改用户所属的基本组;
      	    -G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:修改用户所属的附加组;原来的附加组会被覆盖;
      	    -a, --append:与-G一同使用,用于为用户追加新的附加组;
      	    -c, --comment COMMENT:修改注释信息;
              -d, --home HOME_DIR:修改用户的家目录;用户原有的文件不会被转移至新位置;
      	    -m, --move-home:只能与-d选项一同使用,用于将原来的家目录移动为新的家目录;
      	    -l, --login NEW_LOGIN:修改用户名;
      	    -s, --shell SHELL:修改用户的默认shell;
      	    -L, --lock:锁定用户密码;即在用户原来的密码字符串之前添加一个"!";
      	    -U, --unlock:解锁用户的密码;
    
  • userdel:删除用户
      使用方法:
      userdel [选项] 登录
               -r:删除用户时一并删除其家目录;
    
  • passwd命令:
    使用方法
    passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]
    
    (1) passwd:修改用户自己的密码;
    (2) passwd USERNAME:修改指定用户的密码,但仅root有此权限;
    
      -l, -u:锁定和解锁用户;
      -d:清除用户密码串;
      -e DATE: 过期期限,日期;
      -i DAYS:非活动期限;
      -n DAYS:密码的最短使用期限;
      -x DAYS:密码的最长使用期限;
      -w DAYS:警告期限;
    
      --stdin:
    echo "PASSWORD" | passwd --stdin USERNAME
    示例:
    [root@localhost ~]# echo "123" | passwd --stdin test3
    Changing password for user test3.
    passwd: all authentication tokens updated successfully.
    [root@localhost ~]# passwd -l test3
    Locking password for user test3.
    passwd: Success
    [root@localhost ~]# passwd -u test3
    Unlocking password for user test3.
    passwd: Success
    
  • gpasswd:组管理命令
    gpasswd [选项] group
              -a USERNAME:向组中添加用户
              -d USERNAME:从组中移除用户
    
  • newgrp:临时切换指定的组为基本组;
    newgrp [-] [group]
    
            -: 会模拟用户重新登录以实现重新初始化其工作环境;
    
  • id:显示用户的真和有效ID;
    id [OPTION]... [USER]
          -u: 仅显示有效的UID;
          -g: 仅显示用户的基本组ID; 
          -G:仅显示用户所属的所有组的ID;
          -n: 显示名字而非ID;
    示例:
    [root@localhost ~]# id test3
    uid=5002(test3) gid=1105(test1) groups=1105(test1),1106(test2)
    
  • su命令:switch user
    登录式切换:会通过读取目标用户的配置文件来重新初始化
      su - USERNAME
      su -l USERNAME
    非登录式切换:不会读取目标用户的配置文件进行初始化
      su USERNAME
    注意:管理员可无密码切换至其它任何用户;
    -c 'COMMAND':仅以指定用户的身份运行此处指定的命令;
    
  • chage:更改用户密码过期信息
      	chage [选项] 登录名
          -d:上一次更改的日期
          -E:账号过期的日期,过了这天,此账号将不可用
          -W:用户密码到期前,提前收到警告信息的天数
          -m:密码可更改的最小天数,为0时表示任何时候都可以更改密码
          -M:密码保持有效的最大天数