前面已经提到,touch也可以改变文件的时间,那么touch指令改变的是哪个时间呢?答案是:三个时间都会改变。
mkdir指令
主要功能就是在Linux下用于创建空目录。
语法: mkdir [选项] dirname…
功能: 在当前目录下创建一个名为 “dirname”的目录
常见选项:
-p, --parents 可以建立一个路径。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录
rmdir指令 && rm 指令
rmdir指令
语法: rmdir [ -p ] [dirName]
适用对象: 具有当前目录操作权限的所有使用者
功能: 删除空目录,只能删除空目录
常用选项
-p 当子目录被删除后如果父目录也变成空目录的话,就连带父目录一起删除
随后我又新建了一个空目录c,再使用rmdir指令,这次很明显删除成功了
当我们使用rmdir指令时总能看到这样的提示:
没关系,Linux下还有一个更好用的删除指令那就是:rm,这个指令可以删除文件或目录。
rm指令
语法: rm [ -f-i-r-v] [dirName/dir]
适用对象: 所有使用者
功能: 删除文件或目录
常用选项
f 即使文件属性为只读(即写保护),亦直接删除
-i 删除前逐一询问确认
-r 删除目录及其下所有文件
前面已经提到过,几乎所有的操作系统文件目录的组织结构都是一棵多叉树,根据我们前面学习树形结构的经验可以知道,递归几乎贯穿二叉树的始终。因此在这里我们也使用:rm -r(递归删除),可以直接从将一整个目录删除,无论这个目录中有多少个文件或目录
这里可以看到,很顺利的将a目录删除了,但是在删除期间操作系统一直询问我们是否要删除该文件(y代表是,n代表否),如果这个目录下有一万个文件,难道我要输入一万个y或者n吗?当你不想让操作系统询问时,可以再带上”f“选项,表示强制递归删除。
可以看到,这次删除时操作系统没有再问我们是否确定要删除文件。我们之前说过” / “也是目录,那么是否可以有 “ rm -rf / ”的操作出现呢?前面说过” /“是根目录,所有文件或目录的绝对路径都是从根目录中开始的,这意味着,当你输入这个操作并按下回车以后,你操作系统中所有文件都将被删除,包括系统文件,随后你的操作系统就会挂掉。这里强调,不可以写“ rm -rf /”或者“ sudo rm -rf /”这样的代码。
话都说到这里了,我们都知道删库跑路这个梗。可是如果当你真的不小心在Linux下执行了该操作,特别是你有root权限时,删掉的不只是你的数据,更有公司的用户数据,这个时候你想跑路都不见得能跑掉。因为Linux不像Windows那样有回收站,一旦删除再想恢复的成本实在过于巨大。删掉了公司的用户数据致使公司蒙受损失,那就只能承担责任。这也是为什么你在删除文件时操作系统总要问你是否确认删除,这是操作系统在免责。但是,如果你作为一个实习生不小心删掉了公司的数据,那这只是你的责任吗?答案是否定的,这只能说明你是第一责任人,除了你之外,包括你的上司和公司的权限设置人也要承担责任,因为你作为一个实习生,本不该有这么高的权限。
man指令
Linux有很多命令参数,这些命令我们很难完全记住,当我们忘记某个命令的用法时就可以通过查看联机手册来获取信息。
语法: man [选项] 命令
常用选项:
-k 根据关键字搜索联机帮助
-num 只在第num章节找
-a 将所有章节的都显示出来,比如 man printf 它缺省从第一章开始搜索,知道就停止,用a选项,当按下q退出,他会继续往后面搜索,直到所有章节都搜索完毕
可以看到printf后面跟着一个数字,这个数字代表的是这个联机手册的章节,手册的各个章节代表:
-数字 | -意义 |
1 | 普通命令 |
2 | 系统调用 |
3 | C语言库函数 |
4 | 设备或特殊文件 |
5 | 文件格式和规则 |
6 | 游戏及其他 |
7 | 宏、包及其他杂项 |
8 | 系统管理员相关的命令 |
1.man指令是需要安装的,安装命令:“ yum install -y man-pages",且只能由root用户安装。
2.如果man指令不带数字,也就是不指定章节,会默认从第一章节开始查找,如果指定章节则会直接从该章节中查找。
3.前面说了Linux是由C语言实现的,因此Linux中是可以直接查询C语言的库函数的,如果要查其他语言则需要现在Linux中安装,不过还是建议直接去各大语言官网中查询。
4.man手册其实有汉化版,不过目前只能汉化一号章节,而且我也不建议各位使用汉化版,作为一个程序员,看英文文档是我们逃不过的命运,所以还是接受吧。
5.在进入手册之后,按下”q“键退出。
cp指令
语法: cp [选项] 源文件或目录 目标文件或目录
功能: 复制文件或目录,相当于Windows下的复制粘贴。
说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息。
常用选项
f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在
-i 或 --interactive 覆盖文件之前先询问用户
-r递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理
-R 或 --recursive递归处理,将指定目录下的文件及子目录一并处理
复制不重名文件:
复制重名文件:
dir是刚创建出来的空目录,将1.10.txt这个文件复制到该目录下很明显的成功了,但如果在dir目录下已经存在1.10.txt文件的前提下,再将该文件复制一次呢?
发现操作系统只是询问了我一下,当我再输入”y“时,原文件便被覆盖了。如果我们不希望操作系统向我询问可以带上”-f“选项,这一点和” rm“指令是一样的。
复制目录:
cp指令和rm指令有诸多相似,当我需要复制目录或多个文件时,需要带” -r “选项递归复制。并且因为cp指令时复制指令,因此是不影响原文件的。
mv指令
语法: mv [选项] 源文件或目录 目标文件或目录
功能: mv 是 move 的缩写,可以用来移动文件或者将文件改名(move (rename) files),相当于Windows下的剪切。
前面提到Linux下是没有回收站的,删了就是真的删了。但其实可以利用shell脚本将rm指令改造成类mv指令,从而达到类似于回收站的功能。
常用选项
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖;
这里可以看出cp指令和mv指令的区别,cp指令只是复制粘贴并不影响原文件,而mv指令会改变原文件所处的路径。这点从指令名称中也可以看出,cp其实是copy的缩写,mv却是move的缩写,所谓move就是要移动的。
目前已经有了类似于Windows下的复制粘贴和剪切功能了,那重命名是怎么个说法呢?其实mv指令也是可以重命名文件的:
补充:
- 视mv命令中第二个参数类型的不同(是目标文件还是目标目录), mv命令将文件重命名或将其移至一个新的目录中。
- 当第二个参数类型是文件时, mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。
- 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个, mv命令将各参数指定的源文件均移至目标目录中 。
cat指令
语法: cat [选项] [文件]
功能: 查看目标文件的内容,将文件中的内容从上到下全部显示到终端(屏幕)上
其实还有一个tac指令,tac指令和cat指令不但名字相反,打印出来的内容顺序也是相反的,tac指令是逆向打印。
常用选项
-b 对非空输出行编号
-n 对输出的所有行编号
-s 不输出多行空行
拓展:
在讲解cat指令前,先讲一个echo指令,这个指令主要用于打印字符或者回显,当echo配合’’ > (重定项指令)''使就可以往一个文件中写入内容,如果该文件不存在,则会建立该文件。
前面说cp指令对于同名文件是覆盖粘贴的。如何证明?
为了方便解下来的演示,我先用shell脚本快速生成一万条“hello Linux"并将其重定向到test.txt文件中
cnt=0; while [ $cnt -le 10000 ] ; do echo "hello linux [$cnt]"; let cnt++; done > test.txt
可以使用cat指令查看是否生成成功:
可以看到是生成成功了,但是cat指令这样加载方式,不太适合去查看大文件。除此之外,对于查看文件内容我们更趋向于使用nano/vim,这里说一下nano,第一次使用nano指令需要安装(安装命令:yum install -y nano ),nano后我们会进入一个这样的界面
注意在nano查看文件时,我们不能使用鼠标滚轮来上下查看,而是应该使用上下键。当你想要退出nano是要使用CTRL+x键。
more指令
前面说cat指令并不适合查看大文件,那么是否存在一个指令适合查看大文件?答案是肯定的,这个指令就是more指令。
语法: more [选项] [文件]
功能: more 命令功能类似 cat,都是将文本中的内容显示到终端上,但是与 cat 不同的是,more 会以全屏幕的方式按页显示文本文件的内容,当我们按空白键(space)时就往下一页显示,按 b 键时就会往回(back)一页显示,而且 more 还有搜寻字串的功能;同时,由于 more 命令从前向后读取文件,因此在启动时就加载整个文件;
常用选项
-n 对输出的所有行编号
q 退出more
前面提到more指令是显示到撑满终端(屏幕)时就不再继续加载,除非我们主动按下回车或者空格键(按一下回车键则会增加一条,按一下空格则会往下一页显示)
此外more命令还可以指定页面行数显示:
1.但是more指令只能往下查看,不能往回退。可能这就是好马不吃回头草吧(bushi)。
2.more指令下的退出也是q键。