1.ls指令
【语法】ls + 目录/普通文件
- 对于目录,列出目录中的所有文件
- 对于普通文件,列出文件的基本属性
选项:
- -l 详细列出文件的属性
- -a 列出当前目录下的文件和隐藏文件
- -i 显示文件的索引信息
- -R 以递归的方式显示目录下的文件
1.1 [ls -l]
- 列出文件更详细的内容
关于文件的扩展内容:
不管是在windows,还是Linux下,文件都被分为两个部分,文件 = 内容 + 属性
未来我们对文件进行操作,要么修改文件属性,要么修改内容
在Linux底下,使用ls指令仅仅列出文件属性中的文件名,想要查看一个文件更详细的属性,要用[ls -l]
1.2 [ls -a]
- 列出隐藏文件
在Linux中,以[.]开头的文件表示该文件是隐藏文件,需要用[ls -a]指令才能显现出来,同时每个目录中都默认有两个文件[.]和[..]
其中,[.]表示当前目录,[..]表示上级目录
为什么要自带[.]和[..]两个文件呢?
- [.]是为了方便查找当前目录下的文件
- [..]是为了方便返回上级目录
2.pwd指令
- 显示当前用户所在的路径
3.cd指令
【语法】cd + 绝对路径/相对路径
选项:
- cd .. 返回上级目录
- cd /home/code 进入选定目录
- cd ~ 直接回到用户家目录
- cd - 回到最近一次操作的目录下
绝对路径和相对路径的扩展内容:
Linux的目录结构是一颗树
也就是说任何一个目录或文件,如果从根目录开始,有且仅有一条路径与它对应;如果从其他目录开始,可以有多条路径与它对应
- 绝对路径:从根目录开始,到一个文件/目录的路径,每个文件/目录有且只有一个绝对路劲
- 相对路径:以其他目录为参照,到一个文件/目录的路径,每个文件/目录可以有多个相对路劲
比如:
假设我在etc目录下,要找到Code.c文件
绝对路径:/home/byh/Code.c
相对路径:../home/byh/Code.c
3.1 [cd ~]
- 进入家目录
Linux开机时,默认进入家目录,如果你是root用户,会进入root的家目录;如果你是普通用户,会进入普通用户的家目录
使用[cd ~]指令可以快速的进入家目录
3.2 [cd -]
- 进入最近一次所处的路径下
4.touch指令
【语法】touch + 选项 + 文件名
- 创建一个普通文件
5.which指令
【语法】which + 指令
- 打印指令所处的路径
重新认识指令:
指令的本质其实是一个程序;系统在执行一个指令时,首先需要找到该指令的可执行程序,再执行该程序;每个指令都对应着一个文件,which就是显示一个指令所处文件的路径
6.mkdir指令
【语法】:mkdir + 选项 + 目录名
- 创建一个目录
选项:
- -p:递归创建多个目录
7.rmdir和rm指令
7.1 rmdir
【语法】rmdir + 选项 + 目录名
- 和mkdir相对应,mkdir是创建目录,rmdir是删除目录,只不过直接rmdir只能删除空目录,如果需要递归删除,需要加上-p选项
选项:
- -p:递归删除一系列目录
7.2 rm
【语法】rm + 选项 + 文件名/目录名
选项:
- -r:删除目录及其下的所有文件,并在删除时进行确认
- -f:如果要删除,不进行确认,直接删除
- -i:删除每一个文件都需要确认
- 如果rm不加任何选项,只能删除普通文件,不能删除目录,且在删除普通文件时会进行确认
8.man指令
【语法】man + 选项 + 指令
选项:
- -a 将章节全部显示出来
- num 只在第num章节找
- -k 根据关键字查找
Linux中,有这么多的指令,我们不可能全部记住;man就相当于一个帮助手册,当不知道一个指令怎么用时,man一下指令,就会显示该指令的用法
我们也可以[man man]来查看man手册怎么用;在查找一个指令的用法时,如果不加num,会默认从头开始找,只要找到跟指令重名的就停下来,但找到的不一定是我们要的指令,因此在man时最好加上num,你想查找的指令在哪个章节
9.cp指令
【语法】cp + 源头 + 目的地
- 拷贝源头的文件/目录到目的地
选项:
- -r:如果想拷贝一个目录及其下的所有文件,需要递归拷贝
10.mv指令
【语法】mv + 源头 + 目的地
- 剪切源头的文件/目录到目的地
选项:
- -f:强制剪切,如果目的地存在和源文件同名的文件,不会询问,直接覆盖
11.cat指令
【语法】cat + 文件名
选项:
- -n:输出时带上序号
- 查看文件中的内容
11.1 tac
- 逆向查看文件中的内容
cat指令只适合查看小文件的内容,不方便查看大文件的内容;想要查看大文件的内容,一般用more指令
在将more指令之前,跟大家讲些额外知识
echo指令:
【语法】echo + 字符串
- 输出指定的内容到屏幕上
输出重定向:
我们接下来看看这样的操作
首先,我们的当前目录没有任何文件;接着我们使用了[echo "hello Linux" > file.txt]这样一串指令,发现当前目录多个一个file.txt的文件;我们再[cat file.txt],发现[file.txt]中的内容是我们刚刚echo指定的内容
经过上面一番操作,本来应当在显示器显示的内容,跑到了我们指定的文件中了,上面的符号[>]我们称为输出重定向
怎么理解输出重定向?这里再跟大家说一个概念,在Linux中,一切皆文件,在屏幕上打印了内容,本质上是因为我们向显示器文件写入了内容,显示器文件再按某种方式输出到我们的屏幕上,让我们看见;通过键盘输入内容本质上是因为键盘文件读取了我们输入的内容
默认状况下,echo向显示器文件写入我们指定的内容,但是通过[>],我们把原本应当向显示器文件写入的内容写到了我们指定的文件中,这就叫做重定向
我们再来看看下面的操作
输入[echo "abcdefg" > file.txt],我们发现,之前文件中的内容都没了;因此输出重定向的作用:
- 输出指定内容到指定文件中,如果指定文件不存在,则会先自动创建一个文件,再输出内容
- 每次重定向都会删除原有的数据,再输出新的数据
仔细想想,是不是跟C语言中的写文件操作有点相似;
以后我们创建一个文件和删除文件的内容可以这样写了:[>filename],这个指令相当于我打开一个文件,写空内容到文件中,打开文件时,如果该文件不存在,则会创建该文件,达到了创建文件的效果;如果该文件存在,则先删除文件内容,再往文件写入空内容,达到了删除文件内容的效果
追加重定向:
看了上面的操作,我们发现file.txt中的内容不像刚才那样,每次重定向都会先删除原本数据;这次不会删除原本数据,而是在原文追加相应的内容
此时,我们将[>>]符号叫做追加重定向,有点像C语言文件操作中以“a”的方式打开文件
输入重定向:
上面我们简单的介绍的一下cat的用法,是显示一个文件中的内容;来看看下面的操作
可以看到,如果cat后面什么都不加,默认是向键盘文件读取数据,而输入[cat < file.txt]指令后,cat就向我们指定的文件读取数据了,再以某种方式输出到我们的屏幕上;我们把[<]叫做输入重定向
可以看到,[cat file.txt]和[cat < file.txt]向屏幕输出的内容都是一样的,但要知道,这两个指令在原理上是完全不同的
- 前面说到,在Linux中,一切皆文件,向显示器打印了数据实质上是因为向显示器文件写入了数据,那能不能在Linux中证明上述内容是正确的
[/dev/pts/0]就对应着我们当前屏幕的显示器文件,可以看到,我们将"Linux"内容重定向到该文件,结果在屏幕上打印了"Linux",进一步证明Linux中一切皆文件
Linux中,为什么要设计一切皆文件这样的理念?可以以统一的方式来对文件/设备访问
12.more指令
【语法】more + 选项 + 文件
- 显示文件中的内容(适合显示大文件)
选项:
- q:退出
[i=1; while [ $i -le 10000 ]; do echo "hello Linux $i"; let i++; done > big.txt]我们利用这样的代码创建一个有一万行内容的文件;这时,如果用cat查看big.txt的内容,就会将内容全部显示到屏幕上,如果向查看上面的内容,还要用鼠标去翻,很麻烦;
- 用more指令,会只显示big.txt的前面一部分内容(中间的是被我剪掉了,原本不是这样输出的)
但用more指令还有问题,就是要查看下面的内容需要不停的按enter,还是不方便
13.less指令
【语法】less + 选项 + 文件
- 显示文件中的内容(适合显示大文件)
- 打开文件后提供搜索功能
选项:
- -N:输出时显示行号
- -i:搜索时不区分大小写进行搜索
- /字符串:向下搜索字符串
- ?字符串:向上搜索字符串
- q:退出
- n:执行上一次搜索
同样是显示文件内容,与more不同的是,使用键盘上的方向键就可以任意访问文件中的内容;因此,在日后学习过程中,想要访问一个文件的内容推荐使用less指令
14.head指令
【语法】head + -n<行数> + 文件
- 显示文件的前n行
15.tail指令
【语法】tail + -n<行数> + 文件
- 显示文件的后n行
问:现在有一个100行的文件,我想要查看50~60行的数据,利用head和tail指令,怎么实现?
方法1:先用head前60行,输出到file1.txt中,此时file1.txt中是前60行的内容;再对file1.txt使用tail后11行的内容,输出到file2.txt中,file2.txt就是要查看的50~60行的内容
方法2:使用管道符号[|]
所谓管道,就是将上一次命令处理完的数据交给下一个命令进一步处理;有点像生活中的流水线,一个人处理完东西后交给下一个人加工
16.时间相关的指令
16.1 date
【语法】date + 选项 + 格式
格式:
- %Y:年
- %m:月
- %d:日
- %H:时
- %M:分
- %S:秒
- date不加任何选项,以英文的方式显示日期
- 可以通过选项自己修改打印日期的格式,每两个格式之间可以加符号来调整格式
16.2 时间戳
由于地区的不同,我们日常使用的时间表示在另一个国家可能是错误的,因此,为了统一化时间,设计出了时间戳这样的概念;时间戳一直在递增
- 当前时间转化为时间戳:date +%s
- 时间戳转化为一个时间:date -d@时间戳
17.cal指令
【语法】cal + 选项/月份和年份
- 如果cal后面只有一个参数,表示年份,显示指定年份的日立
- 如果cal后面有两个参数,第一个参数表示月,第二个参数表示年,显示指定年份中指定月的日立
选项:
- -3:显示当前月,上一个月和下一个月的日立
- -y:显示当前年份的日立
- -j:显示当前天处于该年中的哪一天
18.find指令
【语法】find + 开始查找的路径 + 选项[-name] + 文件
- 从指定路径开始,以指定的方式(名字)查找文件
19.grep指令
【语法】grep + 选项 + 字符串 + 文件名
- 文本过滤指令,留下有指定字符串的行,并打印到屏幕上
选项:
- -n:打印时输出行号
- -i:查找时不区分大小写
- -v:反向查找,比如要查找“linux”,会显示所有没有“linux”的行
20.zip/unzip指令
20.1 zip
【语法】zip + xxx.zip + 目录
- 压缩一个目录
选项:
- -r:递归压缩一个目录中的所有文件
如果zip不加任何选型,默认只压缩一个空目录,想要压缩一个目录中的所有文件,要加上-r选项
20.2 unzip
【语法】unzip + xxx.zip
- 解压一个压缩文件
为什么要压缩文件?
- 压缩文件大小,方便下载
- 压缩在一起,文件不容易丢失