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