原版英文书籍《Linux命令行》阅读记录4 | 操作文件和目录
背景:
阅读英文原作只为了更好地理解书中的精髓,当然也是为了更好地掌握书中的技巧。我们会坚持阅读全书,并记录书中的精髓。
从本章节开始,开始真正的实战。
主要学习以下命令:
- cp
- mv
- mkdir
- rm
- ln
- 一些练习
以上命令用来操作文件和目录。
图形化界面,可以简单且轻松的完成文件的复制粘贴等操作,为什么我们还要学习使用命令行呢?一些简单的任务,图形化界面更占优势,但是当遇到很复杂的操作时,使用命令行更加方便。比如复制当前目录下以 .html 结尾的文件,图形化界面是不是要一个一个用手去选择?命令行就很简单了
cp -u *.html destination
通配符
在开始学习上述命令之前,先来了解一下通配符的重要性以及用法。因为 shell 频繁地使用 文件名,shell 提供了特殊字符来帮助你快速指定一组文件名。这些特殊字符叫做通配符。列一个表格:
通配符 | 意义 |
---|---|
* | 匹配任意多个字符(包括零个或一个) |
? | 匹配任意一个字符(不包括零个) |
[characters] | 匹配任意一个属于字符集中的字符 |
[!characters] | 匹配任意一个不是字符集中的字符 |
[[:class:]] | 匹配任意一个属于指定字符类中的字符 |
普遍使用的字符类:
字符类 | 意义 |
---|---|
[:alnum:] | 匹配任意的字母或数字 |
[:alpha:] | 匹配任意的字母 |
[:digit:] | 匹配任意一个数字 |
[:lower:] | 匹配任意一个小写字母 |
[:upper:] | 匹配任意一个大写字母 |
我们可以借助通配符来构建复杂的文件名查找规则。下面举一些例子:
*
代表查找所有文件
g*
代表查找所有以 “g” 开头的文件
b*.txt
代表查找以 “b” 开头,中间任意字符,以 .txt 结尾的文件
Data???
代表查找以 Data 开头,后面紧跟 3 个字符的文件
[a, b, c]*
代表查找以 a 或 b 或 c 开头的文件
g[0-9][0-9][0-9]
代表查找以 g 开头,并且紧跟着三个数字的文件
[[:lower:]123]
代表查找以小写字母结尾 或者 以 1 或 2 或 3 结尾的文件
mkdir 创建目录
用法:
mkdir directory...
mkdir dir
此时会创建一个目录,名为 dir。
注意表示法: 在描述一个命令时(如上所示),当有三个圆点跟在一个命令的参数后面, 这意味着那个参数可以重复,就像这样:
mkdir dir1 dir2 dir3
此时会创建三个目录,名为 dir1, dir2, dir3。
有用的参数说明:
-m
指定权限
-p
用于创建多级目录,若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录
cp 复制文件和目录
复制,有两种用法:
1.复制单个项目
2.复制多个项目
cp item1 item2
复制 文件或目录 item1 到文件或目录 item2
cp item... directory
复制多个项目到一个目录下。
有用的参数:
-a , --archive , 复制文件时,带上属性。
-i , --interactive, 重写文件之前,会提示用户是否重写,默认 cp 是重写文件的。
-r , --recursive , 递归地复制目录以及目录里面的内容。
-u , --update ,当把文件从一个目录复制到另一个目录中时,只复制不存在的文件。或者文件内容更新于已存在的文件中。
-v, --verbose, 显示详细的复制操作。
cp 命令的几个例子展示:
- cp file1 file2 如果file2 存在的话,cp 命令把 file1 的内容重写到 file2 中。如果 file2 不存在,则创建。
- cp -i file1 file2 如果 file2 存在,在重写之前会提示用户确认 “是否重写?”,其他的,同上。
- cp file1 file2 dir1 复制 file1 和 file2 到目录 dir1 中,目录 dir1 必须存在。
- cp dir1/* dir2 使用通配符,将 dir1目录下的内容全部复制到 dir2 目录下,目录 dir2 必须存在。
- cp -r dir1 dir2 复制目录 dir1 中的内容到目录 dir2目录中,目录 dir 不存在则创建。
mv 移动和重命名
mv 的使用方法和 cp 一样。
mv item1 item2
移动(重命名)item1 为 item2
mv item... directory
移动多个项目到一个目录下。
有用的参数:
-i , --interactive, 重写文件之前,会提示用户是否重写,默认 cp 是重写文件的。
-u , --update ,当把文件从一个目录移动到另一个目录中时,只移动不存在的文件。或者文件内容更新于已存在的文件中。
-v, --verbose, 显示详细的操作信息。
mv的例子:
- mv file1 file2 如果file2 存在的话,cp 命令把 file1 的内容重写到 file2 中。如果 file2 不存在,则创建。
- mv -i file1 file2 如果 file2 存在,在重写之前会提示用户确认 “是否重写?”,其他的,同上。
- mv file1 file2 dir1 移动 file1 和 file2 到目录 dir1 中,目录 dir1 必须存在。
- mv dir1 dir2 如果目录 dir2 不存在,则创建目录 dir2 ,并且移动 dir1 的内容到目录 dir2 中,同时删除目录 dir1 。如果存在 dir2 , 移动目录 dir1以及它的内容到目录 dir2 。
rm 删除文件和目录
rm 命令用来删除文件和目录。
rm item...
前面提到过这种表达方式,代表参数可以一个或多个,可以删除一个或多个项目。
有用的参数
-i, --interactive, 删除的时候,提示用户确认信息,如果不带此参数,rm 会默默直接删掉文件。
-r, --recursive, 递归的删除文件。要删除目录时,必须要指定此参数,代表全部清空。
-f, --force, 忽视不存在的信息,不显示提示信息,会覆盖 -i
参数
-v,verbose, 显示详细的操作信息。
提个醒!
类 Unix 的操作系统,比如说 Linux,没有复原命令。一旦你用 rm 删除了一些东西, 它就消失了。Linux 假定你很聪明,你知道你在做什么。尤其要小心使用通配符。
ln 创建链接
ln 既可以创建硬链接,也可以创建符号链接(软链接)。
硬链接是最初 Unix 创建链接的方式。每个文件都默认都有一个硬链接,这个硬链接给予文件名字。我们每建立一个硬链接,都相当于新增一个额外的目录项。硬链接有两个额外的局限性:
1.一个硬链接不能关联不同文件系统 的文件。2.硬链接不能关联目录符号链接是为了解决上述局限性,通过创建一个特殊类型的文件,这个文件包含一个关联文件或目录的文件指针。这种方式和 Windows 的快捷方式差不多,但是比 Windows 要早很多年!删除符号链接的时候,只是链接被删除,而不是文件本身。如果文件先被删除,链接依然会存在,只是不指向任何东西。
练习
首先创建一个领地,执行命令 mkdir playground
[me@linuxbox ~]$ mkdir playground
然后,进入 playground 目录创建两个目录 dir1 和 dir2
[me@linuxbox ~]$ cd playground
[me@linuxbox playground]$ mkdir dir1 dir2
接下来,复制一些数据来这个目录。
[me@linuxbox playground]$ cp /etc/passwd .
再次执行上面的命令,只不过这一次加上了参数 -v
来显示详细的操作信息:
[me@linuxbox playground]$ cp -v /etc/passwd .
`/etc/passwd' -> `./passwd'
如果换成参数 -i 会显示上面呢?来试试
[me@linuxbox playground]$ cp -i /etc/passwd .
cp: 是否覆盖 './passwd'?
接着输入 y 就会被重写,输入背的字符(n什么的),会保留。
这样,我们就有了 一个 playground
目录下 有一个文件 passwd
和 两个目录 dir1
和dir2
。
我们给 passwd
改一个名字:改成 dog
[me@linuxbox playground]$ mv passwd dog
首先把 dog 文件移动到 dir1 木目录中。
me@linuxbox playground]$ mv dog dir1
接着把 dir1 移动到目录 dir2 中。
me@linuxbox playground]$ mv dir1 dir2
因为 dir2 存在,所以 dir1 以及它里面的内容都会移动到 dir2中。
如果 dir2 不存在, dir1 会重命名为 dir2 。
最后将 dog 文件再移动到 playground 目录下。
me@linuxbox playground]$ cd dir2/dir1
me@linuxbox dir1]$ mv dog ~/playround
建立符号链接(软链接)
me@linuxbox playground]$ ln -s /home/me/playground/dog dog-system
使用ll
,查看一下:
lrwxrwxrwx 1 me me 6 2008-01-15 15:17 dog-system -> /home/me/playground/dog
根据我们前面所学的文件解析,可知这一个符号链接文件,指向 /home/me/playground/dog
文件。
提示:创建符号链接的时候,最好使用绝对路径。
上面演示的是创建文件的符号链接,同样也可以创建的目录的符号链接。
对于符号链接,有一点值得记住,执行的大多数文件操作是针对链接的对象,而不是链接本身。 而 rm 命令是个特例。当你删除链接的时候,删除链接本身,而不是链接的对象。
原版英文书籍《Linux命令行》阅读记录4 | 操作文件和目录相关推荐
- 【转】Linux命令行下svn ignore忽略文件或文件夹用法
转自:Linux命令行下svn ignore忽略文件或文件夹用法 - 陌上归人的博客 - 博客园 一.忽略单个目录 1.忽略文件夹 假如目录oa.youxi.com是从svn checkout出来的, ...
- 如何在Linux命令行中替换多个文件中的字符串
本文翻译自:How to replace a string in multiple files in linux command line I need to replace a string in ...
- linux 命令行看图片,骚操作:用终端打开图片
导读 Linux 上有许多 GUI 图片浏览器.但我尚未听说或使用过任何在终端中显示图片的应用程序.幸运的是,我刚刚发现了一个可用于在终端中显示图像的名叫 FIM 的图像查看器.FIM 引起了我的注意 ...
- linux命令行u盘备份,linux命令行挂载U盘拷贝文件
挂u盘之前,运行命令cat /proc/partitions,看看现在系统中有哪些分区.插上u盘以后,再次运行上述命令,看看多出来什么分区(通常是sda1,PS由于偶是在虚拟机下装的,所以是sdb1) ...
- linux命令行下的ftp 多文件下载和目录下载
目标ftp服务器是一个非标准端口的ftp 1.通过shell登录#ftp //shell下输入ftp命令,进入到ftp提示符>open IP PORT //IP ,PORT对应为服务 ...
- python程序命令行输出记录到log文件中
$ python xxx.py args1 >> data/log.txt第一条命令的含义是:将xxx.py这个python文件中print()原本输出到console的内容重定向到&qu ...
- du 查看使用 linux命令,Linux命令(17)du 查看文件和目录磁盘使用情况
Linux du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的. 1.命令格式: du [选项][文件] 2.命令功能 ...
- Linux 命令之 chown -- 用来变更文件或目录的拥有者或所属群组
命令介绍 Linux/Unix 属于多用户多任务操作系统,所有的文件皆有拥有者.利用 chown 命令可以将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID,组可以是组名或者组ID,文 ...
- L9.linux命令每日一练 -- 第二章 文件和目录操作命令 -- ln和readlink命令
2.11.1 命令详解 [命令星级] ★★★★★ [功能说明] ln命令可用理解为英文单词link的缩写,其功能是创建文件间的链接(make links between files),链接 ...
最新文章
- 假如时光倒流,你依然会变成现在的你
- C语言字符串排序!_只愿与一人十指紧扣_新浪博客
- ESP8266/ESP32自动下载电路分析
- linux 进程数量限制,LINUX下每进程限制线程数量
- Linux防火墙iptables学习
- 若计算机内存的地址从00H,2003计算机科学导论课程试卷A
- Deep learning:十九(RBM简单理解)
- redis为什么这么火该怎么用
- 8.Using Categorical Data with One Hot Encoding
- 牛逼,Java中表达式引擎工具就用它!建议收藏,一定用的到!!
- mysql 备库,【MySQL】数据库备库策略与脚本
- 面试官:你对Redis缓存了解吗?面对这11道面试题是否有很多问号?
- Android将ScrollView移动到最底部
- 【bzoj5133】[CodePlus2017年12月]白金元首与独舞 并查集+矩阵树定理
- Pictures Test
- php求add函数,PHP函数每日一贴之字符串函数-addcslashes()函数
- 拓端tecdat|R语言马尔可夫转换模型研究交通伤亡人数事故预测
- DockPanel的使用
- vrep中接近开关与激光雷达
- 分享好用的日常记账软件