一、 Linux上的文件管理类命令有哪些,其常用的使用方法及相关示例演示
1. rmdir: 删除空目录,如果目录里面有内容,需要删除的话,则需要使用rm命令
格式: rmdir [options] directory...
选项: -p: 递归删除
示例:在 /tmp下创建了a/b/c的目录,首先,我们删除/tmp/a目录,看系统如何提示。 第二步,使用-p选项删除这些目录。
[root@localhost tmp]# mkdir -p /tmp/a/b/c
[root@localhost tmp]# tree /tmp/a
/tmp/a
└── b
└── c
[root@localhost tmp]# rmdir a
rmdir: 删除 "a" 失败: 目录非空
[root@localhost tmp]# rmdir -p a/b/c
2. mkdir: 创建目录
格式: mkdir [选项] 目录...
选项: -m MODE: 创建目录时,设定目录的访问权限,默认权限为755,可以使用此选项更改目录的权限,权限可以是8进制数字格式,也可以指定ugo的权限
-p: 递归创建目录,创建一个目录,如果其父目录不存在,则递归创建其父目录
示例:
[root@localhost tmp]# mkdir -m 777 a
[root@localhost tmp]# ls -ld a
drwxrwxrwx. 2 root root 6 12月 10 20:06 a
[root@localhost tmp]# mkdir -m u=rwx,g=rw,o=rw b
[root@localhost tmp]# ls -ld b
drwxrw-rw-. 2 root root 6 12月 10 20:07 b
[root@localhost tmp]# mkdir /e/f/g
mkdir: 无法创建目录"/e/f/g": 没有那个文件或目录
[root@localhost tmp]# mkdir -p /e/f/g
[root@localhost tmp]#
3. touch: 创建文件或者修改文件的时间属性
atime和mtime都可以更改,但ctime不能使用命令更改,通过更改atime和mtime,ctime会自动修改。
格式: touch [-acm][-r ref_file(参照文件)|-t time(时间值)] file(文件名)...
用法描述: touch 修改每个指定文件 file 的存取(access)和/或修改(modifica‐ tion)时间戳记. 除非使用-r或-t选项,这些时间戳记都将修改为当前的时间. 使用-r选项时,这些戳记将按照文件--ref_file的时间戳记来修改(即变得和ref_file时间戳记值相同).使用-t选项,则这些戳记将按照给定的时间值 time 进行修改.同时使用或同时不使用选项-a和-m,存取和修改两个戳记都将被更改.若只使用选项-a,则只修改存取戳记.同样,只使用选项-m,则只修改修改戳记.若要修改戳记的文件尚不存在,除非使用-c选项,touch将创建它(作为空文件,并赋予0666的模式且受umask值的限制)
选项:
-a, --time=atime, --time=access, --time=use
只修改存取时间.
-c, --no-create
如果要修改的文件不存在,此选项使touch不去创建它.
-m, --time=mtime, --time=modify
只修改修改时间.
-r file, --reference=file
使用参照文件 file 的时间戳记值修改指定文件的时间戳记.
-t decimtime
这里时间值 decimtime 的格式为MMDDhhmm[[CC]YY][.ss]
从左至右分别是月份,日期,小时,分钟,可选的世纪和
年,以及可选的秒. touch 将用这组数值修改指定文件的
时间戳记.请注意,这个格式与POSIX标准所规定的格式并
不一样.
实际的时间格式为年年年年月月日日时时分分[秒秒]
示例:
1) 使用touch创建文件file1
[root@localhost tmp]# touch file1
[root@localhost tmp]# ll file1
-rw-r--r--. 1 root root 0 12月 10 20:16 file1
[root@localhost tmp]#
[root@localhost tmp]# stat file1
文件:"file1"
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:67167337 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:user_tmp_t:s0
最近访问:2017-12-10 20:16:52.075000000 +0800
最近更改:2017-12-10 20:16:52.075000000 +0800
最近改动:2017-12-10 20:16:52.075000000 +0800
创建时间:-
2) 修改file1的atime为2012年10月20日19点16分
[root@localhost tmp]# touch -a -t 201210201916 file1
[root@localhost tmp]# stat file1
文件:"file1"
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:67167337 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:user_tmp_t:s0
最近访问:2012-10-20 19:16:00.000000000 +0800
最近更改:2017-12-10 20:16:52.075000000 +0800
最近改动:2017-12-10 20:33:04.285000000 +0800
创建时间:-
3) 使用touch -c,并不真正创建文件,但如果文件存在,会更新文件的三个时间戳
[root@localhost tmp]# touch -c file1
[root@localhost tmp]# stat file1
文件:"file1"
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:67167337 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:user_tmp_t:s0
最近访问:2017-12-10 20:34:47.505000000 +0800
最近更改:2017-12-10 20:34:47.505000000 +0800
最近改动:2017-12-10 20:34:47.505000000 +0800
创建时间:-
[root@localhost tmp]# touch -c file2
4) 修改文件file1的mtime时间为2012年10月20日19点16分
[root@localhost tmp]# touch -m -t 201210201916 file1
[root@localhost tmp]# stat file1
文件:"file1"
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:67167337 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:user_tmp_t:s0
最近访问:2017-12-10 20:34:47.505000000 +0800
最近更改:2012-10-20 19:16:00.000000000 +0800
最近改动:2017-12-10 20:42:13.486000000 +0800
创建时间:-
5) 使用file1的时间戳来创建file3,注意ctime没有同步
[root@localhost tmp]# stat file1
文件:"file1"
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:67167337 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:user_tmp_t:s0
最近访问:2017-12-10 20:34:47.505000000 +0800
最近更改:2012-10-20 19:16:00.000000000 +0800
最近改动:2017-12-10 20:42:13.486000000 +0800
创建时间:-
[root@localhost tmp]# touch -r file1 file3
[root@localhost tmp]# stat file3
文件:"file3"
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:67167358 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:user_tmp_t:s0
最近访问:2017-12-10 20:34:47.505000000 +0800
最近更改:2012-10-20 19:16:00.000000000 +0800
最近改动:2017-12-10 21:03:39.538000000 +0800
创建时间:-
4. cp: 复制文件和目录
格式: cp SOURCE DEST
说明:
复制文件时,如果目录是目录,则将文件复制到目录下,使用原文件名;如果目标是文件,且文件不存在,则会创建这个文件,将源文件的内容复制到目标文件中; 如果目标是文件且存在,则会提 示是否覆盖
多源复制,指源为多个文件时,指定的目标应该是一个目录, 如果目标目录不存在,则报错
如果目标目录存在,是非目录文件,则报错,如果目标目录存在,是目录文件,则将源复制到这个目录下
选项:
-i: 覆盖之前提醒用户进行确认,有的版本,使用 cp命令时,别名有加-i选项
-f: force 如果目标文件存在,则强制覆盖
-r: recursive,递归复制目录及目录中的内容到目标目录
-d: 在复制符号链接作为符号链接而不是复制它指向的文件,并且保护在副本中原文件之间的硬链接
-a: 复制时,尽可能保持文件的结构和属性,(但不保持目录 结构)等同于-dpR archive,用于实现归档;
--preserv=
mode 权限
ownership 属主属组
timestamps 时间戳
context 安全标签
xattr: 扩展属性
all: 上述所有属性
示例:
1) 使用单源复制时,如果目标是目录,则将文件复制到目录中,不改名; 如果目标是文件,且不存在,则会创建文件,将源文件中的数据流复制到目标文件;如果目标文件存在,则会提示是否覆盖
[root@localhost ~]# cp /etc/fstab /tmp
[root@localhost ~]# cd /tmp
[root@localhost tmp]# ls
fstab ks-script-rDmdoC yum.log
[root@localhost tmp]# cp /etc/fstab /tmp/fstab2
[root@localhost tmp]# cp /etc/fstab /tmp/fstab2
cp:是否覆盖"/tmp/fstab2"?
2) 在CentOS中,cp命令是使用了alias的,默认添加了-i选项,即目标存在时,会提示是否覆盖
3) 使用-r选项,会强制覆盖已经存在的目标文件
[root@localhost tmp]# ls /tmp
fstab passwd
[root@localhost tmp]# cp -r /etc/fstab /tmp
cp:是否覆盖"/tmp/fstab"? n
[root@localhost tmp]# \cp -r /etc/fstab /tmp
4) 带权限复制文件,复制文件时,默认不复制文件的相关属性,使用-a选项,带属性复制。 非管理员不能复制文件的相关属性。
[root@localhost tmp]# cp -a fstab2 fstab3
[root@localhost tmp]# ll
总用量 16
-rw-r--r--. 1 root root 541 12月 10 21:54 fstab
-rw-r--r--. 1 liuqing liuqing 541 12月 10 22:05 fstab2
-rw-r--r--. 1 liuqing liuqing 541 12月 10 22:05 fstab3
-rw-r--r--. 1 root root 1151 12月 10 21:38 passwd
[root@localhost tmp]# cp fstab2 fstab4
[root@localhost tmp]# ll
总用量 20
-rw-r--r--. 1 root root 541 12月 10 21:54 fstab
-rw-r--r--. 1 liuqing liuqing 541 12月 10 22:05 fstab2
-rw-r--r--. 1 liuqing liuqing 541 12月 10 22:05 fstab3
-rw-r--r--. 1 root root 541 12月 10 22:05 fstab4
-rw-r--r--. 1 root root 1151 12月 10 21:38 passwd
5. rm: 移除文件或者目录
格式: rm [options] file...
选项:
-f: force,在删除时,不出现提示
-i: 进行确认提示,在删除文件时,会提示
-r: 递归地移除目录中的内容
示例:
# 显示/tmp目录下的的文件及目录
[root@localhost ~]# tree /tmp
/tmp
├── a
│ └── b
│ └── c
│ └── d
│ └── e
├── fstab
├── fstab2
├── fstab3
├── fstab4
└── passwd
5 directories, 5 files
# 使用rm不带参数来删除一个目录,显示无法删除
[root@localhost ~]# rm /tmp/a
rm: 无法删除"/tmp/a": 是一个目录
# 使用fm -rf来强制删除一个目录,且递归进行删除
[root@localhost ~]# rm -rf /tmp/a
[root@localhost ~]# tree /tmp
/tmp
├── fstab
├── fstab2
├── fstab3
├── fstab4
└── passwd
6. mv: 移动文件或者对文件改名
格式: mv [选项]... 源文件 目标文件
mv [选项]... 源文件... 目录
mv [选项]... --target-directory=DIRECTORY SOURCE...
示例:
#将当前目录下的fstab移动到当前目录下,改名叫fstab
[root@localhost tmp]# ll
总用量 20
-rw-r--r--. 1 root root 541 12月 10 21:54 fstab
-rw-r--r--. 1 liuqing liuqing 541 12月 10 22:05 fstab2
-rw-r--r--. 1 liuqing liuqing 541 12月 10 22:05 fstab3
-rw-r--r--. 1 root root 541 12月 10 22:05 fstab4
-rw-r--r--. 1 root root 1151 12月 10 21:38 passwd
[root@localhost tmp]# mv fstab fstab5
[root@localhost tmp]# ll
总用量 20
-rw-r--r--. 1 liuqing liuqing 541 12月 10 22:05 fstab2
-rw-r--r--. 1 liuqing liuqing 541 12月 10 22:05 fstab3
-rw-r--r--. 1 root root 541 12月 10 22:05 fstab4
-rw-r--r--. 1 root root 541 12月 10 21:54 fstab5
-rw-r--r--. 1 root root 1151 12月 10 21:38 passwd
# 将当前目录下的fstab5移动到下一级目录a下
[root@localhost tmp]# mv fstab5 a/
[root@localhost tmp]# ll
总用量 16
drwxr-xr-x. 2 root root 20 12月 11 18:29 a
-rw-r--r--. 1 liuqing liuqing 541 12月 10 22:05 fstab2
-rw-r--r--. 1 liuqing liuqing 541 12月 10 22:05 fstab3
-rw-r--r--. 1 root root 541 12月 10 22:05 fstab4
-rw-r--r--. 1 root root 1151 12月 10 21:38 passwd
[root@localhost tmp]# tree
.
├── a
│ └── fstab5
├── fstab2
├── fstab3
├── fstab4
└── passwd
# 使用--target-directory长选项移动文件
[root@localhost tmp]# mv --target-directory='/tmp/a' fstab3
[root@localhost tmp]# tree a
a
├── fstab3
├── fstab4
└── fstab5
二、bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示
1. bash的工作特性之命令执行状态返回值:
命令执行状态的返回值不同于命令的执行结果,当命令在bash中正常完成,其值为0,如果命令在bash中运行出错,其值为1-255,使用 echo $?来查看结果
# 命令运行成功,其执行状态结果为0
[root@localhost ~]# ls /tmp &> /dev/null
[root@localhost ~]# echo $?
0
# 命令执行不成功,其结果为1-255之间的一个值
[root@localhost ~]# ls /tmpp &> /dev/null
[root@localhost ~]# echo $?
2
2. bash的工作特性之命令行展开
在bash中,可以使用一些特定的字符来代替参数
1) ~表示用户的家目录
# 快速切换到用户的家目录
[root@localhost tmp]# pwd
/tmp
[root@localhost tmp]# cd ~
[root@localhost ~]# pwd
/root
2) {}可以承载一个以逗号为分割符的列表,进行展开
# 使用{}进行命令行展开
[root@localhost ~]# mkdir {a,b}_{c,d}
[root@localhost ~]# ls
a_c a_d anaconda-ks.cfg b_c b_d
三、使用命令行展开功能来完成以下练习
1. 创建/tmp目录下的a_c,a_d,b_c,b_d
[root@localhost tmp]# mkdir {a,b}_{c,d}
2. 创建/tmp/mylinux目录下的以下目录
[root@localhost tmp]# mkdir -p mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,usr/local/{bin,sbin},var/{lock,log,run}}
[root@localhost tmp]# tree mylinux
mylinux
├── bin
├── boot
│ └── grub
├── dev
├── etc
│ ├── rc.d
│ │ └── init.d
│ └── sysconfig
│ └── network-scripts
├── lib
│ └── modules
├── lib64
├── proc
├── sbin
├── sys
├── tmp
├── usr
│ └── local
│ ├── bin
│ └── sbin
└── var
├── lock
├── log
└── run
转载于:https://blog.51cto.com/liu008qing/2055587