-
-
- Linux文件查看和管理类命令
- 1. cp命令
- 2. mv命令
- 3. rm命令
- 4. install命令
- 5. stat命令
- 6. touch命令
- Linux文件查看和管理类命令
-
1. cp命令
cp – copy files and directories
cp [OPTION]… [-T] SOURCE DEST
cp [OPTION]… SOURCE… DIRECTORY
cp [OPTION]… -t DIRECTORY SOURCE…
- 命令使用描述
copy操作分为单源复制和多源复制两种。- 单源复制
cp [OPTION]… [-T] SOURCE DEST
两种情况:- 如果DEST不存在,则实现创建此文件,并复制源文件的数据流至DEST中;
- 如果DEST存在:
1) DEST是目录文件:则现在目录下创建一个源文件同名文件,并复制其数据流至目标文件。非目录文件:则覆盖目标文件;
2) DEST是非目录文件:则覆盖目标文件。
- 多源复制(目标必须为目录)
cp [OPTION]… SOURCE… DIRECTORY
cp [OPTION]… -t DIRECTORY SOURCE…
两种情况:- 如果DEST不存在:无法执行
- 如果DEST存在:
1) DEST是目录文件:分别复制每个文件至目标目录中,并保持原名
1) DEST是非目录文件:无法执行
- 单源复制
- 常用选项
-i:–interactive:交互式复制,覆盖前提醒用户确认;
-f:–force:强制覆盖目标文件;
-r,-R:–recursive:递归复制目录;
-d:复制符号链接文件本身,而非其指向的源文件;
-a:=-dR,=–preserve=all,archive,用于实现归档(完全复制);
–preserve=mode:权限
ownership:属主和属组
timestamp:时间戳
context:安全标签
xattr:扩展属性
links:符号链接
all:上述所有属性
- 举例
- 复制/tmp/cpdir/cptest到/tmp下,并保留其所有属性
使用-a或–preserve=all- cp -a /tmp/cpdir/cptest /tmp/
[root@localhost ~]# ll /tmp/cpdir/cptest
-rw-rw-r--. 1 test1 test1 0 Mar 11 17:00 /tmp/cpdir/cptest
[root@localhost ~]# cp -a /tmp/cpdir/cptest /tmp
[root@localhost ~]# ll /tmp/cptest
-rw-rw-r--. 1 test1 test1 0 Mar 11 17:00 /tmp/cptest - cp –preserve=all /tmp/cpdir/cptest /tmp/
[root@localhost ~]# cp --preserve=all /tmp/cpdir/cptest /tmp/
[root@localhost ~]# ll /tmp/cptest
-rw-rw-r--. 1 test1 test1 0 Mar 11 17:00 /tmp/cptest
- cp -a /tmp/cpdir/cptest /tmp/
- 复制/tmp/cptest.lnk链接文件本身(而非源文件)至/tmp/cpdir/
使用-d或–preserve=links- cp -d /tmp/cptest.lnk /tmp/cpdir/
[root@localhost tmp]# ll cptest.lnk
lrwxrwxrwx. 1 root root 6 Mar 11 17:06 cptest.lnk -> cptest
[root@localhost tmp]# cp -d /tmp/cptest.lnk /tmp/cpdir/
[root@localhost tmp]# ll /tmp/cpdir/cptest.lnk
lrwxrwxrwx. 1 root root 6 Mar 11 17:07 /tmp/cpdir/cptest.lnk -> cptest - cp –preserve=links /tmp/cptest.lnk /tmp/cpdir/
[root@localhost tmp]# cp --preserve=links /tmp/cptest.lnk /tmp/cpdir/
[root@localhost tmp]# ll cpdir/cptest.lnk
-rw-r--r--. 1 root root 0 Mar 11 17:11 cpdir/cptest.lnk
这个命令执行了,但是cptest.lnk显示是普通文件,而不是链接文件,不得其解。
- cp -d /tmp/cptest.lnk /tmp/cpdir/
- 复制/tmp/cpdir/cptest到/tmp下,并保留其所有属性
2. mv命令
mv [OPTION]… [-T] SOURCE DEST
mv [OPTION]… SOURCE… DIRECTORY
mv [OPTION]… -t DIRECTORY SOURCE…
- 常用选项
-i:交互
-f:force强制
- 举例
- 更改/tmp/mvtest文件名为mvtest1,要求使用交互方式。
使用-i选项- mv -i /tmp/mvtest /tmp/mvtest1
[root@localhost tmp]# mv -i /tmp/mvtest /tmp/mvtest1
[root@localhost tmp]# ls mvtest1
mvtest1
因为目标文件不存在,所以没有询问。
再次创建一个文件mvtest,将它更名为mvtest1,因为这时mvtest1已经存在,所以出现询问:
[root@localhost tmp]# touch mvtest
[root@localhost tmp]# mv /tmp/mvtest /tmp/mvtest1
mv: overwrite ‘/tmp/mvtest1’? y
mv本身是mv -i的alias,所以不用加-i也同样会询问。
[root@localhost tmp]# alias mv
alias mv='mv -i'
- mv -i /tmp/mvtest /tmp/mvtest1
- 用/tmp/mvtest2强制覆盖/tmp/mvtest1。
使用-f选项- mv -f /tmp/mvtest2 /tmp/mvtest1
[root@localhost tmp]# cat mvtest1 mvtest2
I am mvtest1
I am mvtest2
[root@localhost tmp]# mv -f mvtest2 mvtest1
[root@localhost tmp]# ls mvtest*
mvtest1
[root@localhost tmp]# cat mvtest1
I am mvtest2
- mv -f /tmp/mvtest2 /tmp/mvtest1
- 更改/tmp/mvtest文件名为mvtest1,要求使用交互方式。
3. rm命令
rm [OPTION]… FILE…
- 常用选项
-i:interactive
-f:force
-r:recursive
- 举例
- 强制删除/tmp/rmdir下的所有文件和子目录
使用选项-r(递归)和-f(强制)- rm -rf /tmp/rmdir
[root@localhost /]# ls rmdir
passwd pcp.conf pcp.sh php.ini printcap protocols
passwd- pcp.env pear.conf pinforc profile
[root@localhost /]# rm -rf rmdir
[root@localhost /]# ls rmdir
ls: cannot access rmdir: No such file or directory
- rm -rf /tmp/rmdir
- rm在bash中是rm -i的alias
[root@localhost /]# alias rm
alias rm='rm -i'
-i选项的使用都一样,不做示例。
- 强制删除/tmp/rmdir下的所有文件和子目录
4. install命令
install – copy files and set attributes
单源复制:
install [OPTION]… [-T] SOURCE DEST
多源复制:
install [OPTION]… SOURCE… DIRECTORY
install [OPTION]… -t DIRECTORY SOURCE…
创建目录:
install [OPTION]… -d DIRECTORY…
- 命令使用描述
install命令类似于cp,但可以复制文件的同时设置目标文件的属性。 - 常用选项
-m:–mode=MODE:设定目标文件权限(默认为755)
-o:–owner=OWNER:设定目标文件属主
-g, –group=GROUP:设定目标文件属组
- 举例
- 比如现在复制/etc/vimrc到/tmp/installtest/路径下,并设置文件的权限为属主可读写可执行、属组可读可执行、其他只读,设置文件属主为user2,属组为test1
- install -m 754 -o user2 -g test1 /etc/vimrc /tmp/installtest
[root@localhost tmp]# install -m 754 -o user2 -g test1 /etc/vimrc /tmp/installtest
[root@localhost tmp]# ll installtest/vimrc
-rwxr-xr--. 1 user2 test1 1982 Mar 17 20:54 installtest/vimrc
如果不指定-m参数,默认设置文件权限为755:
[root@localhost installtest]# install -o user2 -g test1 /etc/vimrc /tmp/installtest
[root@localhost installtest]# ll
total 4
-rwxr-xr-x. 1 user2 test1 1982 Mar 17 20:57 vimrc
- install -m 754 -o user2 -g test1 /etc/vimrc /tmp/installtest
- 比如现在复制/etc/vimrc到/tmp/installtest/路径下,并设置文件的权限为属主可读写可执行、属组可读可执行、其他只读,设置文件属主为user2,属组为test1
- Tips
- install命令不能复制目录。
5. stat命令
stat – display file or file system status
stat [OPTION]… FILE…
- 命令使用描述
每一个文件都有两类数据:元数据和数据本身- 元数据
metadata,使用stat
看到的就是元数据。
元数据描述文件的属性,如访问权限、文件拥有者、文件数据块的分布信息(inode)、时间戳等。
文件的时间戳信息由三种:- atime:access time:访问时间
- mtime:modify time:更改时间(数据本身改变)
- ctime:change time:改动时间(元数据改变),不能手动修改
- 数据
data,使用cat
等命令查看的是数据。
- 元数据
- 举例
- 使用stat命令查看/tmp/stattest文件的元数据
- stat /tmp/stattest
[root@localhost tmp]# stat stattest
File: ‘stattest’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 801h/2049d Inode: 1166347 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:user_tmp_t:s0
Access: 2018-03-17 20:13:40.790174621 +0800
Modify: 2018-03-17 20:13:40.790174621 +0800
Change: 2018-03-17 20:13:40.790174621 +0800
Birth: -
Access、Modify、Change分别是访问时间、更改时间和改动时间,因为文件时刚创建的,没有被访问、更改和改动,三个时间是一样的。
- stat /tmp/stattest
- 使用stat命令查看/tmp/stattest文件的元数据
6. touch命令
touch
touch – change file timestamps
touch [OPTION]… FILE…
可以改变文件的atime和mtime,无法改变ctime
- 命令使用描述
touch命令用来创建文件、修改目录或文件的时间戳信息。 - 常用选项
-c:指定的文件路径不存在时,不予创建;
-a:只更改access time;
-m:只更改modify time;
-t STAMP:更改为指定时间,而不是当前时间use [[CC]YY]MMDDhhmm[.ss] instead of current time
- 举例
- 在/tmp下创建一个空文件touchtest
- touch /tmp/touchtest
[root@localhost tmp]# touch /tmp/touchtest
[root@localhost tmp]# ll /tmp/touchtest
-rw-r--r--. 1 root root 0 Mar 17 20:25 /tmp/touchtest
- touch /tmp/touchtest
- 分别修改/tmp/touchtest的访问时间和修改时间为当前时间
- touch -a /tmp/touchtest
- touch -m /tmp/touchtest
[root@localhost tmp]# touch -a touchtest
[root@localhost tmp]# stat touchtest
File: ‘touchtest’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 801h/2049d Inode: 1166348 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:user_tmp_t:s0
Access: 2018-03-17 20:26:29.480238254 +0800
Modify: 2018-03-17 20:25:02.158231025 +0800
Change: 2018-03-17 20:26:29.480238254 +0800
Birth: -
可以看到访问时间已被更改,而且,因为修改了访问时间,相当于对文件做了改动,所以改动时间也随之更改。
- 修改/tmp/touchtest的访问时间和修改时间为2018-3-10-08:08:08
- touch -mat 201803100808.08 /tmp/touchtest
[root@localhost tmp]# touch -mat 201803100808.08 /tmp/touchtest
[root@localhost tmp]# stat touchtest
File: ‘touchtest’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 801h/2049d Inode: 1166348 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:user_tmp_t:s0
Access: 2018-03-10 08:08:08.000000000 +0800
Modify: 2018-03-10 08:08:08.000000000 +0800
Change: 2018-03-17 20:30:59.678260621 +0800
Birth: -
- touch -mat 201803100808.08 /tmp/touchtest
- 在/tmp下创建一个空文件touchtest
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/92595