1、linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示
文件管理命令常用有:cp mv rm
(1) cp命令:
cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。
语法:cp (选项) (参数)
选项:-a:此参数的效果和同时指定"-dpR"参数相同;
-d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;
-f:强行复制文件或目录,不论目标文件或目录是否已存在;
-i:覆盖既有文件之前先询问用户;
-l:对源文件建立硬连接,而非复制文件;
-p:保留源文件或目录的属性;
-R/r:递归处理,将指定目录下的所有文件与子目录一并处理;
-s:对源文件建立符号连接,而非复制文件;
-u:使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件;
-S:在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀;
-b:覆盖已存在的文件目标前将目标文件备份;
-v:详细显示命令执行的操作。
参数:
源文件:制定源文件列表。默认情况下,cp命令不能复制目录,如果要复制目录,则必须使用-R选项;
目标文件:指定目标文件。当“源文件”为多个文件时,要求“目标文件”为指定的目录。
实例:
如果把一个文件复制到一个目标文件中,而目标文件已经存在,那么,该目标文件的内容将被破坏。此命令中所有参数既可以是绝对路径名,也可以是相对路径名。通常会用到点.或点点..的形式。例如,下面的命令将指定文件复制到当前目录下:
cp../mary/homework/assign .
所有目标文件指定的目录必须是己经存在的,cp命令不能创建目录。如果没有文件复制的权限,则系统会显示出错信息。
将文件file复制到目录/usr/men/tmp下,并改名为file1:
cpfile /usr/men/tmp/file1
将目录/usr/men下的所有文件及其子目录复制到目录/usr/zh中:
cp -r/usr/men /usr/zh
交互式地将目录/usr/men中的以m打头的所有.c文件复制到目录/usr/zh中:
cp -i/usr/men m*.c /usr/zh
我们在Linux下使用cp命令复制文件时候,有时候会需要覆盖一些同名文件,覆盖文件的时候都会有提示:需要不停的按Y来确定执行覆盖。文件数量不多还好,但是要是几百个估计按Y都要吐血了,总结了一个方法:
cp aaa/*/bbb 复制目录aaa下所有到/bbb目录下,这时如果/bbb目录下有和aaa同名的文件,需要按Y来确认并且会略过aaa目录下的子目录。
cp -raaa/* /bbb 这次依然需要按Y来确认操作,但是没有忽略子目录。
cp -r-a aaa/* /bbb 依然需要按Y来确认操作,并且把aaa目录以及子目录和文件属性也传递到了/bbb。
cp -r-a aaa/* /bbb 成功,没有提示按Y、传递了目录属性、没有略过目录。
(2)mv命令
mv命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。source表示源文件或目录,target表示目标文件或目录。如果将一个文件移到一个已经存在的目标文件中,则目标文件的内容将被覆盖。 mv命令可以用来将源文件移至一个目标文件中,或将一组文件移至一个目标目录中。源文件被移至目标文件有两种不同的结果: 如果目标文件是到某一目录文件的路径,源文件会被移到此目录下,且文件名不变。如果目标文件不是目录文件,则源文件名(只能有一个)会变为此目标文件名,并覆盖己存在的同名文件。如果源文件和目标文件在同一个目录下,mv的作用就是改文件名。当目标文件是目录文件时,源文件或目录参数可以有多个,则所有的源文件都会被移至目标文件中。所有移到该目录下的文件都将保留以前的文件名。注意事项:mv与cp的结果不同,mv好像文件“搬家”,文件个数并未增加。而cp对文件进行复制,文件个数增加了。
语法:
mv (选项) (参数)
选项:
--backup=<备份模式>:若需覆盖文件,则覆盖前先行备份;
-b:当文件存在时,覆盖前,为其创建一个备份;
-f:若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录;
-i:交互式操作,覆盖前先行询问用户,如果源文件与目标文件或目标目录中的文件同名,则询问用户是否覆盖目标文件。用户输入”y”,表示将覆盖目标文件;输入”n”,表示取消对源文件的移动。这样可以避免误将文件覆盖。
--strip-trailing-slashes:删除源文件中的斜杠“/”;
-S<后缀>:为备份文件指定后缀,而不使用默认的后缀;
--target-directory=<目录>:指定源文件要移动到目标目录;
-u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。
参数:
源文件:源文件列表。
目标文件:如果“目标文件”是文件名则在移动文件的同时,将其改名为“目标文件”;如果“目标文件”是目录名则将源文件移动到“目标文件”下。
实例:
将文件ex3改名为new1:mv ex3 new1
将目录/usr/men中的所有文件移到当前目录(用.表示)中:
mv /usr/men/* .
(3)rm命令:
rm命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。注意:使用rm命令要格外小心。因为一旦删除了一个文件,就无法再恢复它。所以,在删除文件之前,最好再看一下文件的内容,确定是否真要删除。rm命令可以用-i选项,这个选项在使用文件扩展名字符删除多个文件时特别有用。使用这个选项,系统会要求你逐一确定是否要删除。这时,必须输入y并按Enter键,才能删除文件。如果仅按Enter键或其他字符,文件不会被删除。
语法:
rm (选项) (参数)
选项:
-d:直接把欲删除的目录的硬连接数据删除成0,删除该目录;
-f:强制删除文件或目录;
-i:删除已有文件或目录之前先询问用户;
-r或-R:递归处理,将指定目录下的所有文件与子目录一并处理;
--preserve-root:不对根目录进行递归操作;
-v:显示指令的详细执行过程。
参数:
文件:指定被删除的文件列表,如果参数中含有目录,则必须加上-r或者-R选项。
实例:
交互式删除当前目录下的文件test和example
rm -i test example
Remove test ?n(不删除文件test)
Remove example ?y(删除文件example)
删除当前目录下除隐含文件外的所有文件和子目录:
# rm -r *
应注意,这样做是非常危险的!
2、bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示
(1) bash命令执行状态返回值:
Bash 命令执行后,会对执行状态返回一个值。 如果命令执行成功则返回0,如果执行不成功,就会返回一个1—255的数字。
Bash使用特殊变量$?保存最近一条命令的执行状态结果:($? 在Bash中是特殊变量)
命令的执行结果状态(状态只有2种,要么成功要么失败)0:成功,1-255:失败。
[root@localhost ~]# ll /etc/passwd
-rw-r--r--. 1 root root 1438 Jul 26 05:35 /etc/passwd
[root@localhost ~]# echo $?
0
[root@localhost ~]# ll /etc/passwdd
ls: cannot access /etc/passwdd: No such file or directory
[root@localhost ~]# echo $?
2
(2) 命令行展开特性:
“~” 展开为用户的家目录。使用方法:~username // 展开为指定的用户的主目录
[root@localhost ~]# cd ~gentoo
[root@localhost gentoo]# pwd
/home/gentoo
使用花括号,里面用逗号分隔的列表,并将其展开为多个路径
例如:/tmp/{a,b} =/tmp/a, /tmp/b
[root@localhost ~]# mkdir -p /tmp/{a,b}
[root@localhost ~]# tree /tmp/
/tmp/
├── a
└── b
2directories, 0 files
3、请使用命令行展开功能完成以下练习:
(1)、创建/tmp目录下的:a_c,a_d,b_c, b_d
Mkdir –v {a,b}_{c,d}
(2)、创建/tmp/mylinux目录下的:
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},}
4、文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息。
文件的元数据包含文件本身的一些属性信息,如:文件名、文件的各类权限、各类时间戳、链接次数等。 文件包括三个时间戳:atime,mtime,ctime,可以使用touch命令来修改时间戳,用法如下:
文件时间戳管理工具:touch
文件:metadata, data
三个时间戳:
access time:访问时间--->简写为atime,读取文件内容
modify time: 修改时间--->简写为mtime,改变文件内容(数据)
change time: 改变时间--->简写为ctime,元数据发生改变
查看时间戳命令:stat
[root@localhost~]# stat /etc/passwd
File: `/etc/passwd'
Size: 1438 Blocks: 8 IO Block: 4096 regular file
Device:805h/2053d Inode: 262888 Links: 1
Access:(0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access:2016-07-28 18:40:01.824678351 -0400
Modify:2016-07-26 05:35:32.110304187 -0400
Change:2016-07-26 05:35:32.111304187 -0400
手动指定修改时间戳命令:touch
touch[OPTION]... FILE...
-a: only atime (指定修改访问时间)
-m: only mtime (指定修改修改时间)
-t STAMP:(自己指明时间戳)
[[CC]YY]MMDDhhmm[.ss]
-c: 如果文件不存在,则不予创建
5、如何定义一个命令的别名,如何在命令中引用另一个命令的执行结果?
(1)定义一个命令的别名
[root@bogon~]# alias cdnet='cd /etc/sysconfig/network-scripts'
(2)在命令中引用另一命令的执行结果
[root@bogon~]# alias cdnet='cd /etc/sysconfig/network-scripts'
[root@bogon~]# cdnet
[root@bogonnetwork-scripts]#
6、显示/var目录下所有开头以l开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其他字符)的文件或目录。
ls/var/l*[0-9]*[[:lower:]]
7、显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录
ls/etc/[0-9]*[^[:alpha:]]
8、显示/etc目录下,以非字母开头,后面跟了一个字母以及其他任意长度任意字符的文件或目录。
ls /etc/[^[:alpha:]][[:alpha:]]*
9、在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22.
touchfile-`date "+%Y-%m-%d-%H-%M-%S"`
10、 复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中
Cp –rf /etc/p*[^[:alpha:]] /tmp/mytest1
11、 复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest2目录中。
Cp –rf/etc/*.d /tmp/mytest2
12、 复制/etc目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中
Cp/etc/[1mn]*.conf