Linux 文件管理命令
cp命令
功能
Linux 系统中cp命令是用来复制目录/文件的。
概要
单源复制
cp [OPTION]... [-T] SOURCE DEST
-
DEST不存在
则事先创建此文件,并复制源文件的数据流至DEST中; -
DEST存在
-
DEST是非目录文件:则覆盖目标文件;
-
DEST是目录文件:则先在DEST目录下创建一个与源文件同名的文件,并复制其数据流;
多源复制
cp [OPTION]... SOURCE... DIRECTORY cp [OPTION]... -t DIRECTORY SOURCE...
-
DEST不存在
错误 -
DEST存在
-
DEST是非目录文件:错误;
-
DEST是目录文件:分别复制每个文件至目标目录中,并保持原名;
选项
-
-a,–archive 保留链接和文件属性,递归拷贝目录,相当于下面的d、p、r三个选项组合。
-
-d 拷贝时保留链接。
-
-f,–force 如果目标文件无法打开则将其移除并重试(当 -n 选项 存在时则不需再选此项)。
-
-i,–interactive 覆盖目标文件前将给出确认提示,属交互式拷贝。
-
-p,–preserve 复制源文件内容后,还将把其修改时间和访问权限也复制到新文件中。
-
-P,–no-dereference 不跟随源文件中的符号链接
-
-r 若源文件是一目录文件,此时cp将递归复制该目录下所有的子目录和文件。当然,目标文件必须为一个目录名。
-
-l,–link 不作拷贝,只是链接文件。
-
-s 只创建符号链接而不复制文件。
-
-u 只在源文件文件比目标文件新,或目标文件不存在时才进行复制 。
举例
-
单源复制
# cp /etc/fstab abc # cp /etc/fstab . # ll 总用量 8 -rw-r--r-- 1 root root 465 12月 11 16:27 abc -rw-r--r-- 1 root root 465 12月 11 16:27 fstab
-
多源复制
# cp /etc/fstab /etc/init.d/functions dasheng/ # ll dasheng/ 总用量 20 -rw-r--r-- 1 root root 465 12月 11 16:29 fstab -rw-r--r-- 1 root root 13948 12月 11 16:29 functions
mv 命令
功能
移动目录/文件和更改目录/文件名。
概要
mv [OPTION]... [-T] SOURCE DEST mv [OPTION]... SOURCE... DIRECTORY mv [OPTION]... -t DIRECTORY SOURCE..
选项
-
-f, –force 覆盖前不询问
-
-i, –interactive 覆盖前询问
举例
# mv abc dasheng/ # mv fstab dasheng/fstab.dasheng # ll dasheng/ 总用量 28 -rw-r--r-- 1 root root 465 12月 11 16:27 abc -rw-r--r-- 1 root root 465 12月 11 16:29 fstab -rw-r--r-- 1 root root 465 12月 11 16:27 fstab.dasheng -rw-r--r-- 1 root root 13948 12月 11 16:29 functions
rm 命令
功能
删除目录或者文件。
概要
rm [OPTION]... FILE...
选项
-
-f, –force 忽略不存在的文件,从不给出提示。
-
-i, –interactive 进行交互式删除
-
-r, -R, –recursive 指示rm将参数中列出的全部目录和子目录均递归地删除。
举例
# rm dasheng/abc rm:是否删除普通文件 "dasheng/abc"?y # rm -r dasheng/ rm:是否进入目录"dasheng/"? y rm:是否删除普通文件 "dasheng/fstab"?y rm:是否删除普通文件 "dasheng/functions"?y rm:是否删除普通文件 "dasheng/fstab.dasheng"?y rm:是否删除目录 "dasheng/"?y
在上面的使用中如果选项不带-f 则需要我们输入y来确认是否删除文件。出现这种情况是由于安装系统后CentOS 会自动将root用户的alias 添加alias mv='mv -i'
和alias rm='rm -i'
这两个。而普通用户并不会定于这两个alias,所以我们在日常使用中如果使用了删除的命令一定要慎重,在Linux中是没有回收站这个东西的,如果误删除重要数据请立即停止该系统的数据写入操作,找相关的人员进行恢复。在日常维护中我们可以把rm 命令改成mv 命令来自定义文件的回收站。
自定义回收站
# tail -2 ~/.bashrc myrm(){ D=/tmp/$(date +%Y%m%d); mkdir -p $D; mv "$@" $D && echo "moved to $D ok"; } alias rm='myrm' # ls fstab grub2.cfg # rm -f ./* moved to /tmp/20161211 ok # ll /tmp/20161211/ 总用量 12 -rw-r--r--. 1 root root 465 5月 1 2016 fstab -rw-r--r-- 1 root root 4265 12月 11 17:24 grub2.cfg
将配置写入到本地用户的.bashrc中,然后重新进入shell 进行删除操作就可以实现自定义回收站的操作了。如果不想使用此功能则在删除时候使用/bin/rm 进行删除。
命令的执行状态结果
在shell中 执行命令的状态返回结果分为成功和失败,根据执行的成功与否从而使返回的状态码分为下面两类:
-
成功:0
-
失败:1-255
在命令执行完成之后,其状态返回值保存于bash的特殊变量$?中;我们可以在命令执行完成以后立即使用echo $?
来查看上条命令执行的成功与否。
# date 2016年 12月 11日 星期日 18:05:46 CST # echo $? # cat /etc/abcde cat: /etc/abcde: 没有那个文件或目录 # echo $? 1
命令行展开
特性
-
~:自动展开为用户的家目录,或指定的用户的家目录;
-
{}:可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径;
举例
# cp /etc/init.d/functions{,.bak} # ll /etc/init.d/functions* -rw-r--r--. 1 root root 13948 9月 16 2015 /etc/init.d/functions -rw-r--r-- 1 root root 13948 12月 11 18:10 /etc/init.d/functions.bak
练习
-
创建/tmp/test/目录下的:a_c, a_d, b_c, b_d
# mkdir /tmp/test/{a,b}_{c,d} # ls /tmp/test/ a_c a_d b_c b_d
-
创建/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
使用tree 命令之前请yum 安装tree 命令。
# 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}} # 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 24 directories, 0 files
Linux 文件的元数据
任何文件系统中的数据分为数据和元数据。数据是指普通文件中的实际数据,而元数据指用来描述一个文件的特征的系统数据,诸如访问权限、文件拥有者以及文件数据块的分布信息(inode…)等等。
通过ls 命令查文件的元数据
# ll abc -rw-r--r-- 1 root root 14 12月 7 23:07 abc
上面通过ls 命令显示的元数据可以分为:文件的使用权限、属主、属组、文件大小、时间戳、文件名。如果想详细的查看文件的元数据可以使用stat命令。
# stat abc 文件:"abc" 大小:14 块:8 IO 块:4096 普通文件 设备:fd00h/64768d Inode:34907362 硬链接:1 权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root) 最近访问:2016-12-07 23:07:19.996507082 +0800 最近更改:2016-12-07 23:07:17.934411393 +0800 最近改动:2016-12-07 23:07:17.936411487 +0800 创建时间:-
修改文件时间戳touch
选项
-
-a 只更改访问时间
-
-c, –no-create 不创建任何文件
-
-d, –date=字符串 使用指定字符串表示时间而非当前时间
-
-m 只更改修改时间
-
-r, –reference=文件 使用指定文件的时间属性而非当前时间
-
-t STAMP 使用[[CC]YY]MMDDhhmm[.ss] 格式的时间而非当前时间
举例
# stat abc File: ‘abc’ Size: 14 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768d Inode: 34907362 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-12-11 18:53:13.591961660 +0800 Modify: 2016-12-11 18:53:57.793059882 +0800 Change: 2016-12-11 18:53:57.793059882 +0800 Birth: - # touch -a abc # stat abc File: ‘abc’ Size: 14 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768d Inode: 34907362 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-12-11 18:59:58.232381499 +0800 Modify: 2016-12-11 18:53:57.793059882 +0800 Change: 2016-12-11 18:59:58.232381499 +0800 Birth: - # touch -m abc # stat abc File: ‘abc’ Size: 14 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768d Inode: 34907362 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-12-11 18:59:58.232381499 +0800 Modify: 2016-12-11 19:00:41.378414225 +0800 Change: 2016-12-11 19:00:41.378414225 +0800 Birth: -
通过上面的例子我们可以通过 -a来修改Access time或者-m修改Modify time,其文件的Change time都会改变。
命令别名和执行结果
命令别名
-
获取所有可用别名的定义:
# alias
-
定义别名:
alias NAME='COMMAND'
-
撤销别名:
unalias NAME
上面的别名只是在当前shell有效,如果想全局有效,请把别名写在/etc/bashrc中,如果只想让当前用户有效则写在~/.bashrc 文件中。
举例
# alias cdnet='cd /etc/sysconfig/network-scripts/' # alias alias cdnet='cd /etc/sysconfig/network-scripts/' alias cp='cp -i' alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l.='ls -d .* --color=auto' alias ll='ls -l --color=auto' alias ls='ls --color=auto' alias mv='mv -i' alias rm='rm -i' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' [root@hpf-centos7 ~]# cdnet [root@hpf-centos7 network-scripts]#
命令引用
在shell中使用命令的执行结果可以使用下面的方法:
-
$(COMMAND)
-
`COMMAND`
举例
# rpm -qf `which tree` tree-1.6.0-10.el7.x86_64
练习题
1.显示/var目录下所有以l开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其它字符)的文件或目录。
# ls -d /var/l*[[:lower:]]
2.显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录。
# ls -d /etc/[[:digit:]][^[:digit:]]
3.显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录。
# ls -d /etc/[^[:alpha:]][[:alpha:]]*
4.在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22。
# touch /tmp/tfile-$(date "+%F-%H-%M-%S") # touch /tmp/tfile-$(date "+%Y-%m-%d-%H-%M-%S" )
5.复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。
# mkdir /tmp/mytest1 # cp -r /etc/p[^[:digit:]] /tmp/mytest1/
6.复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest2目录中。
# mkdir /tmp/mytest2 # cp -r /etc/*.d /tmp/mytest2/
7.复制/etc/目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中。
# mkdir /tmp/mytest3 # cp /etc/[lmn]*.conf /tmp/mytest3/
原创文章,作者:profibus,如若转载,请注明出处:http://www.178linux.com/63296
评论列表(1条)
赞,自定义回收站的功能不错~~继续加油~