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

目录管理命令 mkdir rmdir ls cd pwd cp
文件管理命令 touch rm mv file cp
文本内容显示命令 cat tac head tail more less nl
文本处理命令 grep cut tr > |
 
(1) 目录管理命令
——ls:列出指定目录下的内容
格式:ls [OPTION]... [FILE]...
   -a:显示所有文件包括隐藏文件
   -A:显示除.和..之外的所有文件
   -l,--long:显示文件的详细属性信息
   -h:对文件大小进行单位换算,可能影响精度
   -d:查看目录本身而非其内部的文件
   -r:逆序显示文件
   -R:递归显示文件
示例:ls -lah / --详细显示/目录下的所有文件(包括隐藏文件)
   ls -ldh /etc --详细显示/etc目录本身
   ls -lhv / --倒序显示/目录下所有文件(包括隐藏文件)
   ls -R /etc    --递归显示/etc下所有文件
——mkdir:创建目录
格式:mkdir [OPTION]... DIRECTORY...
   -p:自动按需创建父目录 (parent),注意不是用r或者R
   -m:创建目录时给定权限
示例:mkdir -p /data/test/A/B --在/data目录下递归创建/test/A/B三个目录
   mkdir -m 711 -p /data/test1/A --在/data目录下递归创建test1/A两个目录同时指定目录A的权限为711
——rmdir:删除目录
格式:rmdir [OPTION]... DIRECTORY...
   -p:删除目录后如果其父目录为空,则一并删除
示例:rmdir -p /data/test/A --删除A目录后,test目录为空,一并删除
——cd:切换目录
示例:cd ..:切换到上级目录
   cd ~:切换回自己的家目录
   cd -:在上一次目录与当前目录直接来回切换
——pwd:显示当前目录
相关变量$PWD、$OLDPWD 分别存放当前目录路径和上一次路径
综合演示
[root@localhost ~]# mkdir -p test1/test2/test3 -m 777
[root@localhost ~]# touch test1/{a,b}
[root@localhost mytest1]# ls -R test1
test1:
a b test2

test1/test2:
test3

test1/test2/test3:
[root@localhost mytest1]# tree test1
test1
├── a
├── b
└── test2
└── test3
[root@localhost test1]# rmdir -p test2/test3
[root@localhost test1]# ls
a b
test3和test2同时被删除,注意写rmdir -p /test/mytest1/test1/test2/test3,它会一层层往上找空的父目录:
[root@localhost test1]# rm -rf a b
[root@localhost test1]# rmdir -p /test/mytest1/test1/test2/test3
rmdir: failed to remove directory `/test/mytest1': Directory not empty
[root@localhost test1]# ls
[root@localhost test1]# pwd
/test/mytest1/test1 实际上test1,2,3目录均已被删除了
 
(2) 文件管理命令
——touch:创建文件或修改文件/目录的时间戳
格式:touch [option] file
   无选项:若文件不存在,则创建新的空文件,access time,modify time和change    time均为当前时间;若文件存在,则将三个时间戳均修改为当前时间
  -a:只修改文件的access time
   -m:只修改文件的modify time
   -c:不创建不存在的文件(当touch后操作多个文件时,不存在的文件将不会被创建)
   -d:使用指定的日期时间,而非现在的时间,可以使用各种不同的格式。
   -t:将时间修改为参数指定的日期
   -r file:使用指定file文件的时间戳(access,modify)更新文件的时间戳(access,modify)
   注意,使用-a,-m,-d,-t等时,文件状态变化,change time也被修改为当前时间
示例(取部分结果):
[root@localhost mytest1]#touch -d '1 year ago 11:11:11' f1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-11-25 11:11:11.000000000 +0800
Modify: 2017-11-25 11:11:11.000000000 +0800
Change: 2018-11-25 16:21:42.195006914 +0800
[root@localhost mytest1]# touch -at 201912121750.30 f1
Access: 2019-12-12 17:50:30.000000000 +0800
Modify: 2017-11-25 11:11:11.000000000 +0800
Change: 2018-11-25 16:23:11.761007329 +0800
——file:辨识文件类型
——stat:文件/文件系统的详细信息显示
格式: stat [OPTION]... FILE...
   -f  不显示文件本身的信息,显示文件所在文件系统的信息
   -Z 打印SElinux安全上下文信息
   -c 自定义输出格式 -c选项可加各种可选的文件及分区信息输出格式,例如%F 文件类型 %g 文件所有者的组ID %G 文件所有者的组名 %h 硬链接的数量(文件本身算1个)
——cp:复制
格式:单源复制:cp [OPTION]... [-T] SOURCE DEST(如果DEST不存在则创建,存在则覆盖)
   多源复制:cp [OPTION]... SOURCE... DIRECTORY(DEST必须为directory)
   -i:交互式复制,即覆盖前提醒用户确认
   -f:强制覆盖目标文件
   -r,-R:递归复制目录
示例:cp -if /data/[1-3].txt /data/test --test必须为目录,把三个文件一起复制到test中
   cp -r /data /practice --把data目录及目录下的内容一起复制到practice中
——mv:剪切(移动)、重命名
格式:单源复制:mv [OPTION]... [-T] SOURCE DEST(如果DEST不存在则创建,存在则覆盖,因此可以用来重命名)
   多源复制:mv [OPTION]... SOURCE... DIRECTORY(DEST必须为directory)
   -i:交互式复制,即覆盖前提醒用户确认
   -f:强制覆盖目标文件
示例:mv -i /data/[1-3].txt /practice --把/data目录下三个txt文件剪切到/practice下
——rm:删除
格式:rm [OPTION]... FILE...
   -i:交互式复制,即覆盖前提醒用户确认
   -f:强制覆盖目标文件
   -r,-R:递归处理,将制定目录下的所有文件包括目录一并删除
示例:rm -rf /practice --递归删除/practice目录
 
(3)文本内容显示命令
——cat:正向查看文本内容
格式:cat [OPTION]... [FILE]...
   -n:给显示的文本行编号
   -A:造价于-vET,-E显示行结束符号$,-T显示tab符号^I,-v用^和M标记回车?
示例:cat -n /etc/fstab --查看/etc/fatab内容并显示行号
——tac:倒叙查看文本内容
格式:tac [OPTION]... [FILE]...
示例:tac /etc/passwd --倒叙查看文本内容
——head:显示文本内容,默认显示头10行
格式:head [OPTION]... [FILE]...
   -n #:显示文本头#行内容
示例:head -5 /etc/passwd --显示/etc/passwd文件头5行内容
——tail:显示文本内容,默认显示后10行
格式:tail [OPTION]... [FILE]...
   -n #:显示文本后#行内容
   -f:查看文件尾部内容结束后不退出,跟随显示新增的行
示例:tail -8 /etc/passwd --显示/etc/passwd文件后8行内容
——more:分屏显示文本内容,每次显示一屏显示完停止
格式:more [options] file [...]
   Space键:显示文本下一屏内容
   Enter键:只显示文本下一行内容
   b键:显示文本上一屏内容
   q键:退出
——less:分屏显示文本内容,不主动退出
格式:less [options] file [...]
   Space键:显示文本下一屏内容
   Enter键:只显示文本下一行内容
   b键:显示文本上一屏内容
   q键:退出
——nl:显示文本内容,默认显示后10行
格式:nl [选项]... [文件]...
-b  :指定行号指定的方式,主要有两种:
   -b a :表示不论是否为空行,也同样列出行号(类似 cat -n);
   -b t :如果有空行,空的那一行不要列出行号(默认值);
-n  :列出行号表示的方法,主要有三种:
   -n ln :行号在萤幕的最左方显示;
   -n rn :行号在自己栏位的最右方显示,且不加 0 ;
   -n rz :行号在自己栏位的最右方显示,且加 0 ;
-w  :行号栏位的占用的位数。

(4) 文本处理命令
grep

cut

tr > | (略)
 

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

mkdir -p /tmp/a{1/{a,b},2} 这里是创建目录,而非创建文件,用touch报错
mkdir /tmp/{x,q}_{y,z}
 

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

(1)Linux文件的数据分为两类,一类为数据,即文件的实际内容(数据本身);一类为元数据,用来描述文件的特征(描述数据的属性)。
(2)通过 stat 命令可以查看文件的元数据
  可以看到文件的元数据包括文件名(File)、大小(Size)、数据块(Blocks)、IO块(IO Block)、设备(Device)、节点号(Inode)、硬链接(Links)、权限(Access)、文件所属主(Uid)、文件所属组(Gid)、最近访问时间(Access Time)、最近文件修改时间(Modify Time)、最近文件属性更改时间(Change Time)。
在windows下,一个文件有:创建时间、修改时间、访问时间。
(3)linux文件的三种时间属性分别为:
Atime=access time(访问时间),显示的是文件中的数据最后被访问的时间,读一次这个文件的内容,这个时间就会更新,比如被系统的进程直接使用或者通过一些命令和脚本间接使用。(执行一些可执行文件、脚本)或对这个文件运用 more、cat等命令。ls、stat命令都不会修改文件的访问时间
Mtime=modify time(修改时间),显示的是文件的内容被改变时的最后时间,比如用vi编辑时就会改变(也就是Block的内容),ls -l列出的时间就是这个时间。
Ctime=change time(状态改动时间),显示的是文件的权限,拥有者,所属的组,链接数发生改变时的时间。当然当内容改变时,也会改变。(也就是Inode内容发生改变和Block内容发生改变时),通过chmod、chown命令修改一次文件属性,这个时间就会更新。
 
在Linux下没有创建时间的概念,也就是不能知道文件的建立时间,但
如果文件建立后就没有修改过,修改时间=建立时间;
如果文件建立后,状态就没有改动过,那么状态改动时间=建立时间;
如果文件建立后,没有被读取过,那么访问时间=建立时间,因为不好判断文件是否被改过、读过、其状态是否变过,所以判断文件的建立时间基本上为不可能。
 

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

[root@localhost ~]# touch /test/tfile-date +%F-%H-%M-%S
[root@localhost ~]# !ls
ls /test/
tfile-2018-11-19-21-38-35
 

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

[root@localhost test]# cp -R /etc/p*[^0-9] /test/mytest1
[root@localhost test]# ls mytest1/
pam.d pcmcia pm-utils-hd-apm-restore.conf ppp profile
pango pinforc pnm2ppa.conf prelink.cache profile.d
passwd pki popt.d prelink.conf protocols
passwd- plymouth portreserve prelink.conf.d pulse
pbm2ppa.conf pm postfix
 

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

[root@localhost test]# groupadd jack
[root@localhost test]# useradd -u 5001 -d /test/tom -s /bin/zsh -G jack tom [root@localhost test]# tail -1 /etc/passwd
tom:x:5001:5001::/test/tom:/bin/zsh
[root@localhost test]# id tom
uid=5001(tom) gid=5001(tom) groups=5001(tom),501(jack)
 

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

常见用户管理命令:Useradd usermod userdel passwd chage
常见用户组管理命令:groupadd groupmod groupdel groupmems groups gpasswd
常见文件管理命令:chown chgrp chmod rm cp getfacl setfacl
其它:getent
——useradd:新建用户
格式:useradd [-d home] [-s shell] [-c comment] [-m [-k template]] [-f inactive] [-e expire ] [-p passwd] [-r] name
  -c:加上备注文字,备注文字保存在passwd的备注栏中。
  -d:指定用户登入时的主目录,替换系统默认值/home/<用户名>
  -e:指定账号的失效日期,日期格式为MM/DD/YY,例如06/30/12。缺省表示永久有效。
  -f:指定在密码过期后多少天即关闭该账号。如果为0账号立即被停用;如果为-1则账号一直可用。默认值为-1。
  -g:指定用户所属的群组。值可以使组名也可以是GID。用户组必须已经存在的,期默认值为100,即users。
  -G:指定用户所属的附加群组。
  -n:取消建立以用户名称为名的群组。
  -r:建立系统账号。(默认不建其家目录和邮箱,不登录)
  -s:指定用户登入后所使用的shell。默认值为/bin/bash。
  -u:指定用户ID号。该值在系统中必须是唯一的。0~499默认是保留给系统用户账号使用的,所以该值必须大于499。
——usermod:修改系统帐户
格式:usermod [options] user_name   参数与useradd大多相同
  -a|--append   把用户追加到某些组中,仅与-G选项一起使用
  -c|--comment   修改/etc/passwd文件第五段comment
  -d|--home   修改用户的家目录通常和-m选项一起使用
  -e|--expiredate   指定用户帐号禁用的日期,格式YY-MM-DD
  -f|--inactive    用户密码过期多少天后采用就禁用该帐号,0表示密码已过期就禁用帐号,-1表示禁用此功能,默认值是-1
  -g|--gid   修改用户的gid,改组一定存在
  -G|--groups   把用户追加到某些组中,仅与-a选项一起使用
  -l|--login   修改用户的登录名称
  -L|--lock   锁定用户的密码
  -m|--move-home   修改用户的家目录通常和-d选项一起使用
  -s|--shell   修改用户的shell
  -u|--uid   修改用户的uid,该uid必须唯一
  -U|--unlock    解锁用户的密码
——passwd:设置修改系统帐户密码
格式:passwd [-k] [-l] [-u [-f]] [-d] [-S] [username]
  -d 删除密码
  -f 强制执行
  -k 更新只能发送在过期之后
  -l 停止账号使用
  -S 显示密码信息
  -u 启用已被停止的账户
  -x 设置密码的有效期
  -g 修改群组密码
  -i 过期后停止用户账号
——chage:设置用户密码策略
格式:chage [参数] [账号]
   -d, --lastday 最近日期        将最近一次密码设置时间设为“最近日期”
    -E, --expiredate 过期日期     将帐户过期时间设为“过期日期”
    -h, --help                    显示此帮助信息并推出
    -I, --inactive INACITVE       过期 INACTIVE 天数后,设定密码为失效状态
    -l, --list                    显示帐户年龄信息
    -m, --mindays 最小天数        将两次改变密码之间相距的最小天数设为“最小天数”
    -M, --maxdays 最大天数        将两次改变密码之间相距的最大天数设为“最大天数”
    -R, --root CHROOT_DIR         chroot 到的目录
    -W, --warndays 警告天数       将过期警告天数设为“警告天数”
示例:
[root@localhost ~]# chage -m 0 -M 8 -W 5 -I 3 tomcat
[root@localhost ~]# chage -l tomcat
Last password change : Nov 21, 2018
Password expires : Nov 29, 2018
Password inactive : Dec 02, 2018
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 8
Number of days of warning before password expires : 5

——gpasswd:设置修改用户组密码
——groupmems:设置修改用户组成员
下面均将tomcat用户追加到lidan组,格式不同方法不同
[root@localhost ~]# groupmems -g lidan -a tomcat
[root@localhost ~]# gpasswd -a tomcat lidan
Adding user tomcat to group lidan
[root@localhost ~]# gpasswd -M sh,bash lidan 设置lidan组的成员列表
[root@localhost ~]# groupmems -g lidan -l 查看lidan组的成员列表
sh bash tomcat
——userdel :会查询系统账户文件,例如 /etc/password 和 /etc/group。那么它会删除所有和用户名相关的条目。需要root权限
格式:
   -f:强制删除用户,即使用户当前已登录;
   -r:删除用户的同时,删除与用户相关的所有文件。
   不带选项使用 userdel,只会删除用户。/home下仍有用户的家目录,/var/mail下将有用户的邮件。
——chmod :控制档案权限
格式:chmod [-cfvR] [--help] [--version] mode file...
   mode : 权限设定字串,格式如下 : [ugoa...][[+-=][rwxX]...][,...],其中
   u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
   + 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
   r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。
   -R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)
示例:
[root@localhost test]# chmod u=rwx,g=rw,o=rw acl.txt
[root@localhost test]# ll
-rwxrw-rw-. 1 lidan lidan 213 Nov 21 19:39 acl.txt
[root@localhost test]# chmod 640 acl.txt
[root@localhost test]# ll
-rw-r-----. 1 lidan lidan 213 Nov 21 19:39 acl.txt
——chown :修改文件的所属信息
格式:[-cfhvR] [--help] [--version] user[:group] file...
示例:
[root@localhost test]# ll
-rw-r--r--. 1 root root 213 Nov 21 19:39 acl.txt
[root@localhost test]# chown lidan:lidan acl.txt    修改文件属主和属组
[root@localhost test]# ll
-rw-r--r--. 1 lidan lidan 213 Nov 21 19:39 acl.txt