[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选项:删除前不提示用户确认,并忽略不存在的文件
本节结束
欢迎大家评论交流,发现博文中存在的问题一定要留言哦

浙公网安备 33010602011771号