1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。
命令:cp、mv、rm
1.1 cp命令
用法:
- cp [OPTIONS]…[-T] SOURCE DEST
- cp SRC DEST而言,SRC是文件时
- 如果目标不存在:
- 新建DEST,并将SRC中内容填充至DEST中
- 如果目标存在:
- 如果DEST是文件:将SRC中的内容覆盖至DEST中,此时建议为cp命令使用-i选项
- 如果DEST是目录:在DEST下新建与原文件同名的文件,并将SRC中文件的数据流导出一份填充至新文件中
- 对于管理员来说,默认会有-i选项;对于普通用户是不具备的
- cp SRC DEST而言,SRC是目录时
- 如果DEST不存在:
- 创建指定目录,赋值SRC目录中所有文件至DEST中,不包括SRC目录
- 如果DEST存在:
- 如果DEST是文件:
- 报错:显示无法以SRC源目录来覆盖文件
- 如果DEST是目录:在目标目录下创建一个与源目录同名的目录,并且把源目录文件复制到目标目录中去
- 如果DEST是文件:
- 此时使用选项:-r。因为原来是个目录,会忽略这个操作。说明cp命令默认情况下不支持目录复制
- cp [OPTION]…SOURCE… DIRECTORY
- SRC…:多个文件
- DEST必须存在,且为目录,其他情形均会出错,错误提示这不是一个目录
- SRC…:多个文件
OPTION:
- -i:交互式
- -r,-R:递归复制目录及内部的所有内容
- -a:归档,相当于-dR –preserve=all
- -d:–no-dereference(不追踪符号链接),–preserv=links
- –preserve [=ATTR_LIST]
- 保留你所指定的属性。如果没使用=,就只保留默认的前三项;如果使用了=,则添加保留你所指定的项。
- mode:权限
- ownership:属主属组
- timestamp:时间戳
- links:链接本身的属性
- xattr:扩展属性
- context:安全上下文
- all:所有属性
- –no-dereference:不跟踪符号链接,就复制符号链接本身,而不复制符号链接所指向的内容
//归档:复制时必须把每一个文件保留它原来的样子
- –preserve=links:原来是一个链接,还给它保留为符号链接的类型
- -p:–perserv=mode,ownership,timestamp保留权限,属主属组,时间戳
- -v:–verbose显示全过程
- -f:–force强制式执行
1.2 mv命令
用法:
- mv [OPTION]… [-T] SOURCE DEST
- 如果SRC是单个文件:
- 如果DEST不存在:
- 新建DEST,并将SRC中内容填充至DEST中,并且删除源文件。
- 如果DEST存在:
- 如果DEST是文件:将SRC中的内容覆盖至DEST中,并删除SRC
- 如果DEST是目录:在DEST下新建与原文件同名的文件,并将SRC中文件的数据流导出一份填充至新文件中,并删除源文件(即剪切)
- 如果源是目录:
- mv [OPTION]… -t DIRECTORY SOURCE…
- 包括目录会添加指定目录下
- mv [OPTION]… SOURCE… DIRECTORY
- SRC…:多个文件
- DEST必须存在,且为目录,其他情形均会出错,错误提示这不是一个目录
OPTION:
- -i:交互式
- -f:强制
1.3 rm命令
rm [OPTION]…FILE
OPTION:
- -i:交互式
- -f:强制删除
- -r:递归
- 默认是不允许删除根目录的,如果你确实是想删除根目录,就用–no-perserve-root
- –no-preserve-root:do not treat ‘/’ specially不特殊对待“/”
- –preserve-root:do not remove ‘/’ (default)不允许删除”/”(默认)
- bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示。
2.1 命令执行状态返回值
命令执行状态返回值:
- bash使用特殊变量$?保存最近一条命令的执行状态结果
- 0:成功
- 1-255:失败
- 程序执行有两类结果:
- 程序的返回结果:成功时,命令执行的结果应该是什么就是什么;失败时,则可能是报错信息
- 程序的执行状态结果:成功或者失败
- NOTE:在bash中一个命令执行的状态结果对我们而言肯定有不同的意义,失败了可以帮助我们判断这种结果是不是符合我们的期望。所以说失败了未必对我们来说没有什么作用。
2.2 命令行展开所涉及的内容
命令行展开所涉及的内容:
- ~:展开为当前用户的主目录
- ~USERNAME:展开为指定用户的主目录
- {}:可承载以逗号分隔的列表,并将其展开为多个路径
/tmp/{a,b} = /tmp/a,/tmp/b
/tmp/{tom,jerry}/hi = /tmp/tom/hi , /tmp/jerry/hi
3、请使用命令行展开功能来完成以下练习:
(1)、创建/tmp目录下的:a_c, a_d, b_c, b_d
(2)、创建/tmp/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
3.1 创建/tmp目录下的:a_c, a_d, b_c, b_d
[root@Mauro ~]# mkdir -pv /tmp/{a,b}_{c,d}
mkdir: 已创建目录 “/tmp/a_c”
mkdir: 已创建目录 “/tmp/a_d”
mkdir: 已创建目录 “/tmp/b_c”
mkdir: 已创建目录 “/tmp/b_d”
3.2 创建/tmp/mylinux目录下的信息
[root@Mauro ~]# mkdir -pv /tmp/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@Mauro ~]# tree /tmp/mylinux/
/tmp/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
4、文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息。
[root@Mauro ~]# ls -l /etc/fstab
-rw-r–r–. 1 root root 805 9月 9 2016 /etc/fstab
元数据信息:
- -rw-r–r–.:前三个表示属主的读写执行权限;中间三个表示属组的读写执行权限;最后三个表示其他人的读写执行权限;“.”表示跟selinux有关的权限
- root root:前一个root表示文件所属用户;后一个root表示文件所属用户组
- 805:文件大小
- 9月 9 2016:文件的修改日期
4.2 修改文件的时间戳
每一个文件在文件系统上都由元数据(metadata)和数据(data)组成。查看文件状态命令:stat。
三个时间戳:
- Access time:访问时间,atime。读取文件内容
- cat/more查看或者可执行程序的执行会改变访问时间
- Modify time:修改时间,mtime,改变文件内容
- Change time:改变时间,ctime,元数据发生改变
touch命令能以手动指定的方式来修改这三个时间戳中的前两个。当access和modify元数据发生改变,change也一定会发生改变。一旦文件发生了修改,就一定会改变;而改变不一定修改。
stat – display file or file system status,显示文件或者文件系统状态
[root@Mauro tmp]# stat yum.log
File: “yum.log”
Size: 0 Blocks: 0 IO Block: 4096 普通空文件
Device: fd00h/64768d Inode: 261634 Links: 1
Access: (0600/-rw——-) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-03-05 15:11:14.719874775 +0800
Modify: 2017-03-02 21:17:50.981999944 +0800
Change: 2017-03-02 21:17:50.981999944 +0800
OPTION:
- -a:only atime。只改变访问时间戳。修改时间戳不改变,改变时间戳也会发生改变
- 修改访问时间为当前时间:touch -a 文件
- -m:only mtime。只改变修改时间戳。访问时间戳不改变,改变时间戳也会发生改变
- 修改修改时间为当前时间:touch-m 文件
- -t STAMP:指明时间戳
- [[CC]YY]MMDDhhmm[.ss],后面那个精度你没有办法控制
- -c:如果文件不存在,则不予创建
[root@Mauro tmp]# touch -m -t 201508152201.35 fstab
Note:touch的主要目的是修改时间戳,而不是创建文件
5、如何定义一个命令的别名,如何在命令中引用另一个命令的执行结果?
5.1 定义一个命令的别名
alias使用:
- alias:显示当前shell进程所有可用的命令别名
- alias NAME=’VALUE’。定义别名NAME:其相当于执行命令VALUE
Note:如果别名同原命令的名称,则如果要执行原命令,可使用“\COMMAND”
5.2 在命令中引用另一个命令的执行结果
强引用:’’;引号内内容不解释,按照原样进行显示
弱引用:””等同于${},解释引号中的内容为变量的值
命令引用:“等同于$(),解释命令并引用命令输出后的结果
6、显示/var目录下所有以l开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其它字符)的文件或目录。
[root@Mauro ~]# ls -d /var/l*[0-9]*[[:lower:]]
7、显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录。
[root@Mauro ~]# ls -d /etc/^[0-9]*[^0-9]$
8、显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录。
[root@Mauro ~]# ls -d /etc/^[^[:alpha:]][:alpha:]*
9、在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22。
[root@Mauro ~]# ls -d /tmp/tfile-`date +%Y-%m-%d-%H-%M-%S`
10、复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。
[root@Mauro ~]# cp -r /etc/p*[^0-9] /tmp/mytest1
11、复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest2目录中。
[root@Mauro ~]# cp -r /etc/*.d /tmp/mytest2
//.不进行转义解释,仅表示一点
12、复制/etc/目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中。
[root@Mauro ~]# cp -r /etc/{l,m,n}*.conf /tmp/mytest3
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/90122
评论列表(1条)
第8小题有点问题,在提交答案的时候,可以先测试一下哈~加油~