学前补充
在上一篇文章:Linux的基本指令(一) 中我们学习了tree指令,但是当我用tree指令查看根目录”/“下的目录结构时,会出现疯狂打印的情况:
此时我们可以使用ctrl+c操作终止打印过程:
touch指令
语法:touch [选项] 文件名
功能:创建文件、更改文件或目录的日期时间
常用选项:
- -a或--time=atime或--time=access或--time=use:只更改存取时间。
- -c或--no-create:不建立任何文档。
- -d:使用指定的日期时间,而非现在的时间。
- -f:此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。
- -m或--time=mtime或--time=modify:只更改变动时间。
- -r:把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。
- -t:使用指定的日期时间,而非现在的时间
常见使用方式:
一般情况下,我们在创建文件的时候并不会用到这些选项,我们可以直接通过以下两种方式来创建文件:
1、touch 文件名
2、touch 文件名1 文件名2 ...... 文件名n
3、touch {文件名1,文件名2 ...... 文件名n}.文件后缀
如果想为当前目录下的子目录中创建文件可以写成touch 子目录名/文件名形式:
mkdir指令
语法:mkdir [选项] 目录名
功能:创建目录
常用选项
-p
: 如果父级文件夹不存在,则递归地创建所有必需的父级文件夹。
常见使用方式:
mkdir创建目录的两种办法:
1、mkdir 目录名
2、mkdir 目录名1 目录名2 ...... 目录名n
3、mkdir {目录名1,目录名1}.任意后缀
这样写出来的test8.c和test9.c都是可以进入的目录而非文件
如果想为当前目录下的子目录中创建子目录可以写成mkdir -p 子目录名/目录名形式:
若写成mkdir 子目录名/目录名/目录名的形式会报错
-m
: 设置所需权限模式(权限位)来控制新建立文件夹的访问权限。
rmdir指令
语法:rmdir [选项] 目录名
功能:删除空目录
常用选项
- -p:当子目录被删除后若父目录也变为空,则连带父目录一起删除
常见使用方式:
rmdir指令只能删除空目录,若删除不为空则提示:“ Directory not empty”
有了-p的rmdir指令,可以实现当子目录被删除后若父目录也变为空,则连带父目录一起删除
rm指令
语法:rm [选项] 目录/文件名
功能:删除文件或目录
常用选项
- -f 强制删除文件
在 root用户中 rm 文件名指令在删除文件时系统会询问是否真的要删除,但 rm -f 文件名指令会使系统在删除文件时直接删除不询问,在 普通用户中使用 rm 文件名指令删除文件时系统也会直接删除不询问:
- -i 删除前逐一询问确认
- -r 递归删除目录及其下所有文件
rm 目录名并不能删除空目录以及非空目录,必须使用rm -r 目录名指令才可以:
rm不搭配选项时,只能与文件名结合,用于删除文件,而不能与目录名结合:
使用rm -r 目录名指令删除目录时,系统会逐层递归进入子目录中,然后从最里面的目录/文件处开始选择是否删除:
注意必须完全执行完"descend into directory"操作后再进行remove操作,才会删除目录或文件,提前结束该操作则无效:
在remove的某个阶段,选择y删除该文件,选择n不删除该文件,但要注意y和n的使用是否合理:
请注意,不要去尝试做一些奇怪的操作,它们必定是无效的,比如这里你想要尝试将目录4保留,目录三删除,系统会在你选择保留目录四时直接退出递归:
是否对上面的一长串关于删除目录或文件的要求内容感到无聊甚至厌烦?我们来点痛快的
- -rf:强制删除目录及其中的文件和子目录
同样也可以用于直接删除文件
最后想说一句,不加f是对自己负责🙄
还有就是一旦有不确定的文件,宁可备份,不可删除🤣
通配符*
功能:表示一个通配符,陪陪任意文件名
我们创建1 2 3 4 5 6 一共6文件,如果我们想要将这六个文件一起删除,则可以用*来代表这些文件,直接执行rm -rf * 指令即可:
此外,由*参与组成的文件名,*可以是任意长度的任意内容,同时*必须位于文件名的中间,表示除了*表示的内容外只要文件的头部与尾部与该含*的文件名重复,就将这些文件视为相同文件一起删除:
因此,在根目录下执行rm -rf *是一件十分危险的事情
Linux的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助
man指令
语法:man [选项] 命令
功能:查看辅助信息
常用选项
- -k:根据关键字搜索联机帮助。
- num:选择要查找的子手册
- -a:将所有章节的都显示出来
在查看man手册时可以通过输入q退出手册,使用上下键翻看手册
man手册又分为9个子手册:
- 子手册1:包含用户可以直接在终端中运行的常规命令的信息。例如:ls、cd、cp 等
- 子手册2:包含与操作系统内核进行交互时使用的系统调用接口文档。例如:open、read、write 等。
- 子手册3:包含 C 编程语言标准库提供的各种功能函数文档。例如:printf、malloc、strcpy 等。
- 子手册4:包含有关设备驱动程序和特殊文件(如 /dev 目录下的设备)相关信息
- 子手册5:描述不同文件格式以及配置文件和数据文件所遵循的约定。例如:passwd 文件格式等。
- 子手册6:可以找到有关游戏和屏幕保护程序的文档。例如:nethack、xlock 等。
- 子手册7:包含了一些杂项主题,如标准文件、协议、宏等。例如:ascii、ip 等。
- 子手册8:包含系统管理员使用的管理命令和守护进程相关信息。例如:mount、cron 等。
- 子手册9:包含内核开发者使用的非标准内核例程文档。通常只在开发环境中可用。
在后面的学习中我们主要使用的就是前三个手册,尤其是第二个手册
不建议用子手册3作为查看c库函数的主要方式,因为它的版本较老,这里可以作为顺手查找
如果发现无法使用man -num 指令来查找某个指令的某个子手册:
那么是因为未安装man指令,可以通过以下指令下载man指令:
yum -y install man-pages
若还是不能使用emm,我们后续在讲解yum指令时会讲述如何解决该问题
cp指令
语法:cp [选项] 源文件名或目录名 目标文件名或目录名
功能:复制文件或目录
常用选项
-u
,或-
-update
: 只复制比目标更新或不存在于目标中的文件。- -f 或 --force:强制覆盖已存在的目标文件。
- -r或 --recursive:递归复制整个目录及其内容。
常见使用方式:
1、cp -r 源目录名 目的目录名,复制子目录到另一个目录中:
2、cp 文件名 目录名/新文件名,将文件拷贝至子目录中并重命名该文件:
3、cp 文件名 ../ 将文件拷贝至上一级的目录中:
4、cp -f 源文件名 目标目录名或文件名,强制覆盖同目录下的文件或目标目录下的文件,若同目录下的目标文件不存在则直接创建新文件,若目标目录下存在若存在同名文件则直接覆盖若不存在则也创建新文件:
5、cp -rf 源文件名或目录名 目标文件名或目录名,递归复制源文件名或目录名只目标文件名或目录名中,且如果目标位置已经存在同名文件或目录,则会被强制覆盖:
总结:
- 适用cp命令时并不需要处于源文件或目录所在的位置,可以在任何目录下执行
cp
命令,只需提供正确的源文件路径和目标位置即可,但是我们还是推荐进入源文件或源目录所在位置再进行复制,可以减少代码量- 当你需要拷贝一个目录及其内容时,可以使用
-r
或--recursive
选项来递归地复制整个目录树。这样会将源目录下的所有文件和子目录都复制到目标位置。- 当你想要强制覆盖已存在的同名文件时,可以使用
-f
或--force
选项。它会在执行拷贝操作时忽略任何警告或确认提示,并直接覆盖已存在的文件。- 如果你希望同时递归地拷贝一个目录并且在必要时强制覆盖同名文件,则可以将两个选项组合起来使用,即
-rf
。这样做能够简化命令,并确保在执行过程中不会被询问确认提示。- 三者中较为常用的就是-r 和 -rf指令
mv指令(重要)
语法:mv [选项] 源文件或目录 目标文件或目录
功能:备份文件或者目录
常用选项
- -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
- -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖
常见使用方式:
1、mv 源文件/目录名 目标目录/文件名,在当前目录下对一个文件或者目录重命名
2、mv 源文件/目录名 目标目录名,将当前目录下的文件或目录,剪切到指定目录下:
3、mv 源文件/目录名 目标目录名/新名字,在剪切的同时重命名:
补充内容:
1、如何快速在Linux中写出代码
具体内容不再演示,大致步骤如下:
- 下载nano指令:yum install -y nano
- nano 以.c后缀的源文件
- 编写源文件
- ctrl x -> y -> 回车
- gcc 以.c后缀的源文件
- ./a.out
2、如何看待如此多的Linux指令
- 指令本身并不用刻意记住,忘了就查在后续练习中使用频率高了的自然而然就可以记住
- 额外补充的知识才是最重要的,比如家目录,绝对相对路径等知识
cat指令
语法:cat [选项] [文件]
功能:查看目标文件的内容
常用选项
- -b 对非空输出行编号
- -n 对输出的所有行编号
- -s 不输出多行空行
常见使用方式:
1、cat -s 源文件名,将原来文件中存在的多行空行变为只显示一行空行:
2、cat -n 源文件名,显示打印文件中代码的行号:
3、tac 源文件名,逆向打印文件内容:
~over~