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

Linux有两个重要的哲学思想:1、一切皆文件;2、配置文件都是TEXT文本。所以在Linux上管理文件是非常重要的工作。

Linux上,针对文件的管理命令分为以下几类

  1. 创建:touch
  2. 删除:rm
  3. 复制:cp,install
  4. 移动:mv
  5. 查看文件属性:stat
  6. 修改文件属性:touch

命令详解:

touch

  • 说明:touch命令本来是用来修改文件的时间的(atime, mtime),但当不加选项时,可以创建空文件。
  • 用法:touch [OPTION]... FILE...
  • 选项:
    • 无:没有选项,会创建空文件,如果文件已经存在,不会报错,会直接修改文件的两个时间(其实ctime也会同时被修改,因为改atime和mtime属于修改文件元属性)。
    • -a:只修改文件的atime。
    • -c:当文件不存在时,不创建文件。
    • -d STRING:用STRING指定的时间来取代默认的当前时间;修改文件用的时间默认是当前时间,-d参数改变这个默认值。
    • -h:修改符号链接的时间,而不是其引用的文件。
    • -m:修改mtime。
    • -r FILE:用指定的FILE的时间做参考,修改文件时间。
    • -t STAMP:用STAMP指定的时间来取代默认的当前时间;STAMP的格式为[[CC]YY]MMDDhhmm[.ss]
    • --time=WORD:指定要修改的时间,access表示actimemodify表示mtime
  • 示例:
    • 创建空文件:touch /PATH/TO/SOME_FILE
    • 创建多个空文件:touch /PATH/TO/SOME_FILE1 /PATH/TO/SOME_FILE2 /PATH/TO/SOME_FILE3 ...
    • 修改文件访问时间:touch -at 201810011212.13 /etc/inittab

rm

  • 说明:rm用来删除各种文件,包括目录。
  • 用法:rm [OPTION]... FILE...
  • 选项:
    • -f:强制删除,没有提示。
    • -i:交互模式删除,删除每个文件前都先询问是否要删除。
    • -I:交互模式删除,当删除多个文件或递归删除时,只询问一次。
    • --interactive[=WHEN]:WHEN取值为neveroncealways分别对应参数-f-I-i,当不指定WHEN时,默认为always
    • -r/-R:递归删除目录。
    • -d:删除空目录
    • -v:显示整个删除详情。
  • 示例:
    • 删除单个文件:rm [-f] /PATH/TO/SOME_FILE
    • 删除整个目录:rm -r /PATH/TO/SOM_DIRrm -fr/PATH/TO/SOM_DIR

cp

  • 说明:复制文件或目录
  • 用法:
    • cp [OPTION]... [-T] SOURCE DEST
    • cp [OPTION]... SOURCE... DIRECTORY
    • cp [OPTION]... -t DIRECTORY SOURCE...
    • 以上三种用法,只是指定源和目标的方式不一样罢了。
  • 选项:
    • -a:等同于-dR --prevserve=all,归档复制,保留文件的所有属性。
    • -d:等同于--no-dereference --preserve=links,保持链接。
    • -f:强制覆盖已存在的目标文件。
    • -i:覆盖目标文件之前,询问。
    • -l:对源文件做硬链接,而不是复制。
    • -L:复制链接指向的文件。
    • -n:不覆盖已经存在的文件。
    • -P:保持链接
    • -p:等同于--preserve=mode,ownership,timestamps,保留文件的权限,属主,属组,时间戳。
    • --preseve=[ATTR_LIST]:保留文件的属性列表,可用值为modeownershiptimestampscontextlinksxattrall,不指定默认为--preserve=mode,ownership,timestamp
      • mode:权限
      • ownership:属主,属组
      • timestamp:时间戳
      • context:安全标签
      • links:保持链接
      • xattr:扩展属性
      • all:以上所有
    • -c:等同于--preserve=context
    • --no-preseve=[ATTR_LIST]:不保留的文件属性列表。
    • -r/-R:递归复制目录
    • -reflink=[WHEN]:
      • always:写时复制,只有在原文件被修改了才会复制(类似快照)。
      • --auto:正常复制。
    • -s:创建符号链接,而不是复制文件。
    • -t DIRECTORY:指定目标目录。
    • -T:指明目标是一个文件而不是目录。
  • 示例:
    • 复制一个文件:copy /etc/inittab /tmp/inittab.bak
    • 复制文件到目录:copy /etc/inittab /tmp
    • 复制多个文件到目录:copy /etc/inittab /etc/rc.d/rc.sysinit /tmp
    • 复制目录:copy -r /etc /tmp

install

  • 说明:复制文件的同时,设置文件的属性
  • 用法:
    • install [OPTION]... [-T] SOURCE DEST
    • install [OPTION]... SOURCE... DIRECTORY
    • install [OPTION]... -t DIRECTORY SOURCE...
    • install [OPTION]... -d DIRECTORY...
    • 以上四种用法,只是指定源和目标的方式不一样罢了。
  • 选项:
    • -d DIRECTORY...:创建目录,后面可以跟多个目录参数,同时创建多个。
    • -m MODE:设置权限,不指定默认是rwxr-xr-x
    • -o OWNER:指定属主(仅管理员可用)。
    • -g GROUP:指定属组,替换进程的属组。
    • -t DIRECTORY:指定目标。
  • 示例:install -m 700 /etc/inittab /tmp

mv

  • 说明:移动(重命名)文件。
  • 用法:
    • mv [OPTION]... [-T] SOURCE DEST
    • mv [OPTION]... SOURCE... DIRECTORY
    • mv [OPTION]... -t DIRECTORY SOURCE...
  • 选项:
    • -f:强制覆盖已存在的目标文件。
    • -i:覆盖目标文件之前,询问。
    • -t DIRECTORY:指定目标目录。
    • -T:指明目标是一个文件而不是目录。
  • 示例:
    • 移动文件:mv /etc/inittab /tmp/inittab.bak
    • 移动文件到指定目录:mv /etc/issue /root
    • 移动目录:mv /etc /tmp
    • 重命名文件/目录:mv A B

stat

  • 说明:显示文件/文件系统状态(文件名,文件大小,[acm]time,块大小,inode号,属主,属组,权限等)
  • 用法:stat [OPTION] file...
  • 选项:
    • -L:显示链接文件引用的文件的状态,而不是链接文件本身。
    • -Z:显示安全标签(如果有的话)。
    • -f:显示文件系统状态,而不是文件。
  • 示例:stat /etc/issue

Q2:使用命令行展开功能,创建/tmp/a1/tmp/a2/tmp/a1/a/tmp/a1/b,在/tmp目录下创建目录:x_yx_zq_yq_z

mkdir -pv /tmp/a{1/{a,b},2}

touch /tmp/{x,q}_{y,z}

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

可用stat命令,查看文件的元数据,元数据包含以下内容:

  • 文件名
  • 文件大小
  • 占用块大小
  • 文件类型
  • 所在设备
  • inode号
  • 硬链接次数
  • 访问权限
  • 属主
  • 属组
  • 最后访问时间(atime)
  • 最后修改时间(mtime)
  • 最后改变时间(ctime)

可以使用touch命令修改文件时间戳,详见Q1

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

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

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

cp -r /etc/p*[^[:digit:]] /tmp/mytest1

Q6:创建用户tom,指定UID5001,指定家目录为/tmp/tom,指定shell为/bin/zsh,指定基本组为tom,附加组为jack

useradd -u 5001 -d /tmp/tom -s /bin/zsh -G jack tom

Q7:常用的用户以及文件管理命令有哪些,并演示命令以及用法。

文件管理命令见Q1

常用的用户管理命令如下:

  • useradd
  • userdel
  • usermod
  • id
  • chsh
  • chfn
  • chage
  • su
  • finger
  • passwd
  • groupadd
  • groupdel
  • groupmod
  • gpasswd
  • newgrp

命令详解:

useradd

  • 说明:创建新用户或修改创建新用户的默认信息

  • 用法:

    • useradd [options] LOGIN
    • useradd -D
    • useradd -D [options]
  • 选项:

    • -c COMMENT:注释信息
    • -e EXPIRE_DATE:禁用账户时间,格式为YYYY-MM-DD
    • -f INACTIVE:密码过期后,隔多少天后禁用账户。
    • -g GROUP_NUM/GROUP_NAME:指明基本组。
    • -G, GROUP1[,GROUP2,...[,GROUPN]]]:指定附加组。
    • -M:不创建HOME目录。
    • -m:创建HOME目录。如果加上-k参数,会复制/etc/skel目录下的所有文件到HOME目录。
    • -r:创建系统账户,不创建主目录。id号1-499(centos6)或1-999(centos7)为系统账户。
    • -s SHELL:指明帐户默认使用的shell。
    • -u UID:指明uid。
    • -D:显示/更改创建用户时的默认配置属性(创建用户时很多默认属性来自于/etc/login.defs,-D更改的属性保存在/etc/default/useradd中)
      • 可配置的属性:
        • GROUP:是否创建同名私有组。
        • HOME:HOME目录所在路径。
        • INACTIVE:密码过期后,隔多少天后禁用账户,默认不禁用(-1)。
        • EXPIRE:禁用账户时间(默认不禁用)。
        • SHELL:默认shell,默认为/bin/bash
        • SKEL:骨架信息来源,默认为/etc/skel
        • CREATE_MAIL_SPOOL:是否创建邮箱。
      • 对应修改上述信息的参数
        • 无选项:显示默认属性
        • -b:HOME
        • -e:EXPIRE
        • -f:INACTIVE
        • -g:GROUP
        • -s:SHELL

userdel

  • 说明:删除用户账户及相关文件
  • 用法:userdel [options] LOGIN
  • 选项:
    • -f:删除账户的同时,删除其HOME目录(默认不删除用户HOME目录)。
  • 示例:userdel -f tom

usermod

  • 说明:修改用户账户信息
  • 用法:usermod [options] LOGIN
  • 选项:
    • -a -G gid...:添加附加组。
    • -c COMMENT:修改注释信息。
    • -d HOME_DIR:修改用户HOME目录。
    • -e EXPIRE_DATE:修改账户禁用时间,格式为YYYY-MM-DD
    • -f INACTIVE:修改账户在密码过期后,多少天禁用账户。
    • -g GROUP/GID:修改基本组。
    • -G GID...:覆盖附加组。
    • -l NEW_LOGIN:修改用户名。
    • -L:锁定账户,方式是在密码字段前加!
    • -m:配合-d选项使用,移动用户HOME目录下的文件到新位置。
    • -p PASSWD:修改密码,不建议使用,因为密码会暴露在命令历史中。
    • -s SHELL:修改默认shell。
    • -u UID:修改账户的uid。
    • -U:解锁用户,方式是移除密码字段前的!
  • 示例:
    • 添加附加组:usermod -a -G hadoop tom
    • 修改shell:usermod -s /bin/zsh tom
    • 锁定账户:usermod -L tom

id

  • 说明:显示用户标识信息。
  • 用法:id [OPTION]... [USERNAME]
  • 选项:
    • -Z:显示指定用户(默认当前用户)的安全标签。
    • -g:显示指定用户(默认当前用户)的默认gid。
    • -G:显示指定用户(默认当前用户)的所有gid。
    • -n:配合-u-g-G使用,显示名字而非数字id。
    • -u:显示uid。
  • 示例:
    • 显示当前用户所有标识信息:id
    • 显示指定用户的所有组:id tom

chsh

  • 说明:修改用户的默认shell
  • 用法:chsh [-s shell] [-l] [username]
  • 选项:
    • -s SHELL:指明shell。
    • -l:显示/etc/shells文件的内容(即所有可用shell)。
  • 示例:chsh -s /bin/zsh root

chfn

  • 说明:修改用户注释信息
  • 用法:chfn [-f full-name] [-o office] ,RB [ -p office-phone] [-h home-phone] -u] [-v] [username]
  • 选项:
    • -f:用户全名。
    • -o:办公室。
    • -p:办公电话。
  • 示例:chfn -f jobs root

chage

  • 说明:修改账户密码过期信息
  • 用法:chage [options] [LOGIN]
  • 选项:
    • -d LAST_DAY:上次修改密码时间,格式YYYY-MM-DD
    • -E EXPIRE_DAET:账户过期时间。
    • -I:密码过期后的锁定时间。
    • -l:显示账户的所有aging信息。
    • -m DAYS:密码最少使用时间(在此时间内不能修改密码)。
    • -M DAYS:密码最多使用时间(超过此时间必须修改密码)。
    • -W DAYS:密码过期前的警告时间。
  • 示例:chage -E 2018-10-10 -m 10 -M 20 -W 3 root

su

  • 说明:切换用户身份
  • 用法:su [OPTION]... [-] [USER [ARG]...]
  • 选项:
    • -,-l:使用登录shell切换,不会读取shell配置文件。
    • -c COMMAND:使用指定身份执行命令,不会切换身份。
    • 不指定身份,默认切换到root
  • 示例:su - root

finger

  • 说明:查看用户账号相关信息
  • 用法:finger [options] [user ...] [user@host ...]
  • 选项:
    • -s:显示用户的登录名用户名使用的终端最后登录时间办公室位置办公电话
  • 示例:finger root

passwd

  • 说明:修改用户认证信息
  • 用法:passwd [-k] [-l] [-u [-f]] [-d] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]
  • 选项:
    • -l:锁定账户。
    • --stdin:从标准输入中读取密码,常用于使用脚本批量修改密码。
    • -u:解锁账户。
    • -d:删除密码。
    • -n:密码最少使用时间。
    • -x:密码最多使用时间。
    • -w:警告时间。
    • -i:密码过期后锁定时间。
  • 示例:
    • 修改自己的密码:passwd
    • 锁定账户:passwd -l tom
    • 从标准输入读取密码:echo 'xxx' | passwd --stdin

groupadd

  • 说明:添加组
  • 用法:groupadd [options] group
  • 选项:
    • -g GID:指定gid,,不指定默认是取j最近加添的gid+1。
    • -r:添加为系统组。
    • -p PASSWORD:设定密码,不推荐。
  • 示例:groupadd hadoop

groupdel

  • 说明:删除组
  • 用法:groupde group
  • 示例:groupdel hadoop

groupmod

  • 说明:修改组信息
  • 用法:groupmod [options] GROUP
  • 选项:
    • -g GID:修改gid。
    • -n NEW_GEOUP:修改组名。
    • -p PASSWORD:修改密码,不推荐。
  • 示例:groupmod -g 1000 root

gpasswd

  • 说明:修改组密码(组密码是在用户临时切换到该组时用的)
  • 用法:gpasswd [option] group
  • 选项:
    • -a user:向组中添加用户。
    • -d user:从组中删除用户。
    • -r:删除密码。
  • 示例:gpasswd root

newgrp

  • 说明:临时切换基本组。
  • 用法:newgrp [-] [group]
  • 示例:newgrp root