linux的文件管理类命令
linux系统下的涉及到目录管理命令,主要有 mkdir
,rmdir
linux系统下也会用到许多文件查看类命令,包括cat
,tac
,head
,tail
,more
,less
等
linux系统下涉及的文件管理类命令主要有cp
,mv
,rm
本节我们主要说明文件管理类命令的使用方法。
cp命令的使用方法
首先,cp这个命令的作用是可以复制文件或目录,且支持多个文件同时复制。
cp命令的语法格式:
SYNOPSIS cp [OPTION]... [-T] SOURCE DEST cp [OPTION]... SOURCE... DIRECTORY cp [OPTION]... -t DIRECTORY SOURCE...
单源复制:cp [OPTION]…SOURCE DEST
-
如果dest文件不存在则创建文件,并复制源文件数据流到DEST文件中(这里源,目的都是文件)
-
如果dest文件存在,则复制源文件数据覆盖目标文件(这里源,目标都是文件)
-
如果dest是一个目录,则在dest目录中创建相同的文件和内容(这里源是文件,目的是目录)
-
如果源是目录,需要加选项-t,这这时候dest必须是目录,将其源目录下所有文件复制到目标目录下!
多源复制:cp [OPTION]… SOURCE… DIRECTORY
-
多源复制的目标必须是目录
-
可以复制多个文件,到同一个目录下。
常用选项option:
-
-i:覆盖之前提醒用户确认 。cp的别名就是cp -i
-
-f:强制覆盖目标文件
-
-r:递归复制目录,复制目录和目录中的内容到目标位置
-
-d:复制一个符号链接本身,不会其指向的真正的源文件。
-
-a: 表示连源文件源文件属性都复制过去
-
–preserv=
-
mode 权限
-
ownership 属主属组
-
timestamps:时间戳
-
context:安全标签
-
xattr:扩展属性
-
links:符号链接
-
all:所有文件
示例:
[root@localhost ~]# cat cpdoc.txt Are you kidding me ? I 'm angry! [root@localhost ~]# cat cpdoc1.txt no, i am not I'am sorry~ [root@localhost ~]# cp cpdoc1.txt cpdoc2.txt [root@localhost ~]# cat cpdoc2.txt no, i am not I'am sorry~ [root@localhost ~]# cp cpdoc.txt cpdoc1.txt cp: overwrite `cpdoc1.txt'? Y [root@localhost ~]# cat cpdoc1.txt Are you kidding me ? I 'm angry! [root@localhost ~]# cp cpdoc.txt cpdoc1.txt hahaha [root@localhost ~]# ls hahaha cpdoc1.txt cpdoc.txt text.txt [root@localhost ~]# [root@localhost ~]# [root@localhost ~]# cp hahaha -r test [root@localhost ~]# [root@localhost ~]# [root@localhost ~]# tree test test |-- 1p2a |-- 28pa |-- Pa99 |-- hahaha | |-- cpdoc.txt | |-- cpdoc1.txt | `-- text.txt |-- p,a |-- pa |-- pa12 `-- papi 1 directory, 10 files [root@localhost ~]# cp --preserv=mode cpdoc.txt test [root@localhost ~]# ls -l test/cpdoc.txt -rw-r--r-- 1 root root 34 Sep 25 01:05 test/cpdoc.txt [root@localhost ~]# ls -l cpdoc.txt -rw-r--r-- 1 root root 34 Sep 25 00:46 cpdoc.txt [root@localhost ~]#
mv的使用方法
mv和cp使用方式基本一样,只是mv命令完成cp操作之后,会把原来的source文件删除。
注意:mv一个目录时不需要加-r选项即可实现递归移动
命令格式:
SYNOPSIS mv [OPTION]... [-T] SOURCE DEST mv [OPTION]... SOURCE... DIRECTORY mv [OPTION]... -t DIRECTORY SOURCE...
常用选项:
-
-i:交互式;
-
-f:force
示例:
[root@localhost ~]# tree test test |-- 1p2a |-- 28pa |-- Pa99 |-- cpdoc.txt |-- hahaha | |-- cpdoc.txt | |-- cpdoc1.txt | `-- text.txt |-- p,a |-- pa |-- pa12 `-- papi 1 directory, 11 files [root@localhost ~]# mv test/1p2a test/hahaha [root@localhost ~]# tree test test |-- 28pa |-- Pa99 |-- cpdoc.txt |-- hahaha | |-- 1p2a | |-- cpdoc.txt | |-- cpdoc1.txt | `-- text.txt |-- p,a |-- pa |-- pa12 `-- papi 1 directory, 11 files [root@localhost ~]# mv test/hahaha test/mvtest [root@localhost ~]# tree test test |-- 28pa |-- Pa99 |-- cpdoc.txt |-- mvtest | |-- 1p2a | |-- cpdoc.txt | |-- cpdoc1.txt | `-- text.txt |-- p,a |-- pa |-- pa12 `-- papi 1 directory, 11 files [root@localhost ~]#
rm的用法
rm主要是做命令删除用的,删除操作非常危险,linux系统无回收站。可以不用这个命令,只是将其mv到某个位置。
语法:
SYNOPSIS rm [OPTION]... FILE...
常用选项:
-
-i:交互式
-
-r:递归操作
-
-f:强制操作
[root@localhost ~]# rm /tmp/ .esd/ .gdm_socket issue keyring-pDpnGb/ mysysroot/ virtual-root.0ghOid/ .X0-lock .font-unix/ .gdmZYIZNY issue.tee keyring-TNKNhD/ test.1363 virtual-root.pLN0g0/ .X11-unix/ functions grub.conf keyring-0QvdsM/ keyring-VIDgg7/ test.1365 VMwareDnD/ gconfd-root/ hahaha/ keyring-LcHTXN/ mapping-chenjianhang test.1413 vmware-root/ .gdm5PIVNY .ICE-unix/ keyring-nhUcNx/ mapping-root test.etc vmware-root-2084385593/ [root@localhost ~]# rm -r /tmp/hahaha rm: descend into directory `/tmp/hahaha'? y rm: remove regular empty file `/tmp/hahaha/text.txt'? [root@localhost ~]# ls /tmp functions hahaha keyring-0QvdsM keyring-pDpnGb mapping-chenjianhang test.1363 test.etc VMwareDnD gconfd-root issue keyring-LcHTXN keyring-TNKNhD mapping-root test.1365 virtual-root.0ghOid vmware-root grub.conf issue.tee keyring-nhUcNx keyring-VIDgg7 mysysroot test.1413 virtual-root.pLN0g0 vmware-root-2084385593 [root@localhost ~]#
bash的工作特性之命令执行状态返回值
bash通过状态返回值来输入命令的执行结果
成功:0
失败:1-255
命令执行完成后,状态返回值保存在bash的特殊变量?
中.
演示内容:
[root@localhost ~]# ls 06:13:04 2016 a.out asasx.txt cpdoc2.txt Desktop grep.txt install.log like.txt qq qq.save.1 test Thu 15 anaconda-ks.cfg asas cpdoc1.txt cpdoc.txt grep hahaha install.log.syslog PDT qq.save Sep testdir vimtext [root@localhost ~]# echo $? 0 [root@localhost ~]# lss -bash: lss: command not found [root@localhost ~]# echo $? 127 [root@localhost ~]# cd /xasmxaiosjxo -bash: cd: /xasmxaiosjxo: No such file or directory [root@localhost ~]# echo $? 1 [root@localhost ~]#
需要注意,bash只能获取最近一次状态结果。
bash的工作特性之命令行展开
-
~:自动展开为用户的家目录,或指定用户的家目录
-
{}:可承载一个逗号分隔的路径列表,并能将其展开为多个路径
示例:
[root@localhost ~]# cd /tmp [root@localhost tmp]# cd ~ [root@localhost ~]# pwd /root [root@localhost ~]#
创建/tmp目录下的:a_c,a_d,b_c,b_d
[root@localhost ~]# ls -a /tmp . functions .gdmZYIZNY issue keyring-nhUcNx mapping-chenjianhang test.1365 virtual-root.pLN0g0 .X0-lock .. gconfd-root grub.conf issue.tee keyring-pDpnGb mapping-root test.1413 VMwareDnD .X11-unix .esd .gdm5PIVNY hahaha keyring-0QvdsM keyring-TNKNhD mysysroot test.etc vmware-root .font-unix .gdm_socket .ICE-unix keyring-LcHTXN keyring-VIDgg7 test.1363 virtual-root.0ghOid vmware-root-2084385593 [root@localhost ~]# [root@localhost ~]# [root@localhost ~]# touch /tmp/{a,b}_{c,d} [root@localhost ~]# ls -a /tmp . b_c functions .gdmZYIZNY issue keyring-nhUcNx mapping-chenjianhang test.1365 virtual-root.pLN0g0 .X0-lock .. b_d gconfd-root grub.conf issue.tee keyring-pDpnGb mapping-root test.1413 VMwareDnD .X11-unix a_c .esd .gdm5PIVNY hahaha keyring-0QvdsM keyring-TNKNhD mysysroot test.etc vmware-root a_d .font-unix .gdm_socket .ICE-unix keyring-LcHTXN keyring-VIDgg7 test.1363 virtual-root.0ghOid vmware-root-2084385593 [root@localhost ~]#
创建/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
[root@localhost ~]# mkdir -pv /tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,user/local/{bin,sbin},var/{lock,log,run}} mkdir: created directory `/tmp/mylinux' mkdir: created directory `/tmp/mylinux/bin' mkdir: created directory `/tmp/mylinux/boot' mkdir: created directory `/tmp/mylinux/boot/grub' mkdir: created directory `/tmp/mylinux/dev' mkdir: created directory `/tmp/mylinux/etc' mkdir: created directory `/tmp/mylinux/etc/rc.d' mkdir: created directory `/tmp/mylinux/etc/rc.d/init.d' mkdir: created directory `/tmp/mylinux/etc/sysconfig' mkdir: created directory `/tmp/mylinux/etc/sysconfig/network-scripts' mkdir: created directory `/tmp/mylinux/lib' mkdir: created directory `/tmp/mylinux/lib/modules' mkdir: created directory `/tmp/mylinux/lib64' mkdir: created directory `/tmp/mylinux/proc' mkdir: created directory `/tmp/mylinux/sbin' mkdir: created directory `/tmp/mylinux/sys' mkdir: created directory `/tmp/mylinux/tmp' mkdir: created directory `/tmp/mylinux/user' mkdir: created directory `/tmp/mylinux/user/local' mkdir: created directory `/tmp/mylinux/user/local/bin' mkdir: created directory `/tmp/mylinux/user/local/sbin' mkdir: created directory `/tmp/mylinux/var' mkdir: created directory `/tmp/mylinux/var/lock' mkdir: created directory `/tmp/mylinux/var/log' mkdir: created directory `/tmp/mylinux/var/run' [root@localhost ~]# tree /tmp/mylinux /tmp/mylinux |-- bin |-- boot | `-- grub |-- dev |-- etc | |-- rc.d | | `-- init.d | `-- sysconfig | `-- network-scripts |-- lib | `-- modules |-- lib64 |-- proc |-- sbin |-- sys |-- tmp |-- user | `-- local | |-- bin | `-- sbin `-- var |-- lock |-- log `-- run 24 directories, 0 files [root@localhost ~]#
文件的元数据信息
文件的数据有2类:数据本身和元数据,元数据相当于对文件的一个摘要,通过stat命令可以查看文件的元数据。
例子:
[root@localhost ~]# stat /tmp/mylinux File: `/tmp/mylinux' Size: 4096 Blocks: 16 IO Block: 4096 directory Device: 802h/2050d Inode: 784934 Links: 14 Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-09-25 02:19:22.000000000 -0700 Modify: 2016-09-25 02:19:05.000000000 -0700 Change: 2016-09-25 04:02:05.000000000 -0700 [root@localhost ~]#
主要显示了以下内容:
-
文件名
-
文件大小
-
文件块
-
文件类型
-
文件链接数
-
文件权限
-
UID
-
GID
-
文件最后一次被查看的时间
-
文件数据最后一次被修改的时间
-
文件数据和元数据最后一次被改动的时间
通过touch命令可以改变文件的时间戳,touch命令的用法如下:
-
-c:指定文件不存在时不予以创建
-
-a:只改访问时间access time
-
-m:只改更改时间modify time
-
-t:指定改成什么时间,年月日时分.秒
[root@localhost ~]# stat /tmp/mylinux File: `/tmp/mylinux' Size: 4096 Blocks: 16 IO Block: 4096 directory Device: 802h/2050d Inode: 784934 Links: 14 Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-09-25 02:19:22.000000000 -0700 Modify: 2016-09-25 02:19:05.000000000 -0700 Change: 2016-09-25 04:02:05.000000000 -0700 [root@localhost ~]# touch -a /tmp/mylinux [root@localhost ~]# stat /tmp/mylinux File: `/tmp/mylinux' Size: 4096 Blocks: 16 IO Block: 4096 directory Device: 802h/2050d Inode: 784934 Links: 14 Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-09-25 08:12:44.000000000 -0700 Modify: 2016-09-25 02:19:05.000000000 -0700 Change: 2016-09-25 08:12:44.000000000 -0700 [root@localhost ~]# touch -m /tmp/mylinux [root@localhost ~]# stat /tmp/mylinux File: `/tmp/mylinux' Size: 4096 Blocks: 16 IO Block: 4096 directory Device: 802h/2050d Inode: 784934 Links: 14 Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-09-25 08:12:44.000000000 -0700 Modify: 2016-09-25 08:13:26.000000000 -0700 Change: 2016-09-25 08:13:26.000000000 -0700 [root@localhost ~]# touch -mt 201011111111.11 /tmp/mylinux [root@localhost ~]# stat /tmp/mylinux File: `/tmp/mylinux' Size: 4096 Blocks: 16 IO Block: 4096 directory Device: 802h/2050d Inode: 784934 Links: 14 Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-09-25 08:12:44.000000000 -0700 Modify: 2010-11-11 11:11:11.000000000 -0800 Change: 2016-09-25 08:15:31.000000000 -0700 [root@localhost ~]#
注意:文件中任何信息改动了,change time肯定会变动,包括数据本身和元数据。
如何定义一个命令别名
通过alias命令可以定义和查看命令的别名,别名也可以与原名相同,也可以通过/COMMAND运行原名。
如果不想继续用别名,可以通过unalias取消别名。
这里下面定义的别名只在本次bash进程中有效,如果想永久的定义别名,需要在配置文件/etc/bashrc或者用户家目录下的bashrc.d中设置。
[root@localhost ~]# clr -bash: clr: command not found [root@localhost ~]# [root@localhost ~]# alias alias cp='cp -i' alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l.='ls -d .* --color=tty' alias ll='ls -l --color=tty' alias ls='ls --color=tty' alias mv='mv -i' alias rm='rm -i' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' [root@localhost ~]# alias clr='clear' [root@localhost ~]# alias alias clr='clear' alias cp='cp -i' alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l.='ls -d .* --color=tty' alias ll='ls -l --color=tty' alias ls='ls --color=tty' alias mv='mv -i' alias rm='rm -i' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' [root@localhost ~]# clr [root@localhost ~]#
如何在命令中引用一个命令的执行结果
可以通过$(COMMAND)或者$'COMMAND'方式引用命令的执行结果
[root@localhost ~]# echo $(date +%Y) 2016 [root@localhost ~]# mkdir $(date +%Y) [root@localhost ~]# ls ??。?????? anaconda-ks.cfg asasx.txt cpdoc.txt grep.txt install.log.syslog qq Sep Thu 06:13:04 a.out cpdoc1.txt Desktop hahaha like.txt qq.save test vimtext 2016 asas cpdoc2.txt grep install.log PDT qq.save.1 testdir [root@localhost ~]#
globbing文件通配
显示/var目录下所有以l开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其它字符)的文件或目录。
[root@localhost ~]# ls /var/1*[[:digit:]]*[[:lower:]] /var/1text2x [root@localhost ~]# ls /var/1*[0-9]*[a-z] /var/1text2x [root@localhost ~]#
显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录。
[root@localhost ~]# ls /etc/[[:digit:]]*[^[:digit:]] /etc/2xaskm [root@localhost ~]#
显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录。
[root@localhost ~]# ls /etc/[^[:alpha:]]* /etc/2xaskm [root@localhost ~]#
在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22。
[root@localhost ~]# touch /tmp/tfile-$(date "+%G-%m-%d-%k-%M-%S") [root@localhost ~]# ls /tmp a_c gconfd-root keyring-0QvdsM keyring-VIDgg7 test.1363 virtual-root.0ghOid a_d grub.conf keyring-LcHTXN mapping-chenjianhang test.1365 virtual-root.pLN0g0 b_c hahaha keyring-nhUcNx mapping-root test.1413 VMwareDnD b_d issue keyring-pDpnGb mylinux test.etc vmware-root functions issue.tee keyring-TNKNhD mysysroot tfile-2016-09-25-19-09-26 vmware-root-2084385593 [root@localhost ~]#
复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。
[root@localhost ~]# cp -R /etc/p*[^[:digit:]] /tmp/mytest1
复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest2目录中。
[root@localhost ~]# cp -R /etc/*.d /tmp/mytest2
复制/etc/目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中。
[root@localhost ~]# cp -R /etc/[1mn]*.conf /tmp/mytest3 [root@localhost ~]#
原创文章,作者:Theo,如若转载,请注明出处:http://www.178linux.com/49109
评论列表(1条)
总结的非常的详细