[Linux Shell学习系列三]常用Shell(Bash)命令-操作文件和目录

D7

1. touch命令

touch命令可用于创建、变更和修改文件的时间戳。是Linux操作系统的标准程序。有如下选项:

-a——只改变访问时间;

-c——不创建任何文件;

-m——只改变修改时间;

-r——使用指定文件的时间替代当前时间;

-t——使用[[CC]YY]MMDDhhmm[.ss]替代当前时间。

$ touch effy1 #创建一个空文件

$ touch effy1 effy2 effy3 #同时创建多个文件

$ touch -a effy1 #如果effy1存在则改变其最新访问时间,不存在则创建新的空文件

$ touch -c effy1 #不创建新文件,用当前时间更新文件的时间戳

$ touch -m effy1 #只改变文件的修改时间,不改变访问时间

$ touch -c -t 2005121044 effy1 #将文件的访问时间和修改时间设置为指定的日期和时间,格式为YYMMDDHHMM,表示2020年5月12日10点44分

$ touch -r effy1 effy2 #用effy1的时间戳更新effy2的时间戳

 

 

2. mkdir命令

mkdir命令用于创建新目录。

$ mkdir backup #基本命令

$ mkdir backup/old #使用相对路径创建目录

$ mkdir /home/ntrade/backup/old #使用绝对路径创建目录

$ mkdir -p backup/old #使用-p选项,自动创建所有还不存在的父目录(递归的创建backup和old)

$ mkdir -p backup #使用-p选项阻止已存在错误
$ mkdir backup #不使用-p选项,会报错:
mkdir: cannot create directory 'backup': File exists

$ mkdir -p -m 777 backup/old #使用-m选项,设置要创建的目录的权限(注意:如果目录已经存在,因为使用-p选项不会报错,但权限不会被修改)

$ mkdir -p -m a=rwx backup/old #使用-m选项,设置要创建的目录的权限

 

3. cp命令

cp命令用于将文件从一个地方复制到另一个地方。原来的文件保持不变,新文件可以保持原名或重命名。有如下格式:

cp [OPTION] SOURCE DEST #复制源到目标

cp [OPTION] SOURCE... DIR #复制一个或多个源文件到一个目录

cp [OPTION] -t DIR SOURCE... #同上

$ cp c.txt newc.txt #创建文件副本

$ cp c.txt ~/backup/ #复制文件到目标目录

$ cp * ~/backup/ #复制当前目录下所有文件到目标目录

$ cp -p c.txt ~/backup/ #使用-p选项,可以复制一个文件到新文件时,保留源文件的所有者、用户组、权限、修改和访问时间,以及一些扩展属性等信息

$ cp -R * ~/backup/ #使用-R或-r选项,可以递归地复制一个目录,即将一个目录及其下所有文件和子目录都复制到另一个目录

$ cp -a * ~/backup/ #使用-a选项进行归档模式复制,相当于-dpR(-d:保留软链接),通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。

注:文中没有列出所有可能的选项,如-f,-i等。

 

D8

4. ln命令

ln命令用于创建软链接或硬链接。

1)区别软链接和硬链接:

类型 文件名A和B 关系 inode节点号 指向的数据块 删除B 删除A
软链接 A是B的软链接 从属 不同

A:B的路径(相对路径或绝对路径)

B:文件内容

A仍然存在,但指向的是一个无效的链接 对B没有影响
硬链接 A是B的硬链接 平等 相同 A和B通过相同的inode节点指向同一个数据块,保存的是文件内容

inode节点链接数减1,对A没有影响;

直到链接数为0,回收inode和数据块

inode节点链接数减1,对A没有影响;

直到链接数为0,回收inode和数据块

注意:

软链接可链接文件或目录,可以链接不同文件系统的文件;

硬链接只能链接文件,且是同一个文件系统中的文件。

$ ln run.sh runln #默认建立硬链接
$ ll| grep run #可以看到runln的类型也是文件
-rwxrwxr-x. 2 ntrade ntrade   58 May 12 09:50 run.sh
-rwxrwxr-x. 2 ntrade ntrade   58 May 12 09:50 runln

$ ln -s run.sh runlns #使用-s选项为文件创建软链接
$ ll| grep run #可以看到runlns的类型是软链接,指向文件
-rwxrwxr-x. 2 ntrade ntrade   58 May 12 09:50 run.sh
-rwxrwxr-x. 2 ntrade ntrade   58 May 12 09:50 runln
lrwxrwxrwx. 1 ntrade ntrade    6 May 13 09:24 runlns -> run.sh

$ ls -i run.sh #查看文件的inode编码
265179 run.sh
$ ls -i runln #硬链接的inode编码与文件相同
265179 runln
$ ls -i runlns #软链接的inode编码与源文件不同
262321 runlns

$ ln -s a/test atestlns #使用-s为目录创建软链接
$ ll|grep a #可以看到atestlns 类型是软链接,指向目录
drwxrwxr-x. 3 ntrade ntrade 4096 May 13 09:25 a
lrwxrwxrwx. 1 ntrade ntrade    6 May 13 09:27 atestlns -> a/test

$ ln -s c.txt testlns #创建软链接时,发现已有同名的文件
ln: failed to create symbolic link 'testlns': File exists
$ ln --backup -s c.txt testlns #此时可以使用--backup选项备份已经存在的同名文件
$ ll #查看
-rw-rw-r--. 1 ntrade ntrade  991 May 12 09:48 c.txt
lrwxrwxrwx. 1 ntrade ntrade    5 May 13 09:33 testlns -> c.txt #这个是新建的软链接
-rw-rw-r--. 1 ntrade ntrade   21 May 13 09:33 testlns~ #这个是之前的testlns的备份

 

5. mv命令

mv命令将文件和目录从一个位置移到另外一个位置,或修改文件或目录的名字。

$ mv d.txt backup #将文件d.txt移到backup目录下

$ mv c backup #将目录c移到目录backup下

$ mv f.txt newf.txt #将文件f.txt更名为newf.txt

$ mv b b-new #将目录b更名为b-new

$ mv -i e.txt c.txt #默认情况下,mv不会提示目标文件或目录已存在,会直接将其重写覆盖
$ mv -i e.txt c.txt #使用-i选项,让mv命令在重写覆盖目标文件或目录前给出提示
mv: overwrite 'c.txt'? n #这里输入n则拒绝操作,输入y则接受操作

$ mv * backup #移动所有文件和目录到backup目录下

$ mv -u * backup #使用-u选项只移动目标目录中不存在的文件到目标目录

 

6. rm命令

rm命令用于删除指定的文件和目录。

$ rm e.txt d.txt #删除多个文件

$ rm * #删除当前目录下所有文件

$ rm test/* #删除指定目录下所有文件

$ rm -i test/* #使用-i选项,在删除每个文件和目录前提醒用户确认

$ rm *effy* #删除当前目录下所有文件名中包含effy字符串的文件

$ rm effy* #删除当前目录下所有文件名中以effy字符串开头的文件

$ rm ???  #删除当前目录下整个文件名只有3个字符的文件

$ rm *.?? #删除当前目录下扩展名有2个字符的文件

$ rm [ab].txt #删除a.txt和b.txt,[]中可以匹配其中的任意一个字符

$ rm *.[ch] #删除*.c和*.h

$ rm -rf /tmp/* #删除/tmp目录下所有文件和子文件,-r(或-R)选项:递归地删除目录及其下的内容,-f选项:删除前不提示用户确认,并忽略不存在的文件

 

本节结束

 

posted @ 2020-05-12 11:35  workingdiary  阅读(545)  评论(0)    收藏  举报