在Linux中有许多基本的指令,对应的是Windows操作系统的图形化操作。例如在Windows系统下双击文件等价于Linux系统的某些指令。操作系统的操作无非就是在图形化界面或者命令行进行操作。其中命令行是我们学习Linux操作系统的重要手段。
大多数指令是对文件进行操作的,这里的文件该如何理解呢?
在Linux操作系统中,一切的一切都是文件,所有能和系统交互的资源,都统一抽象成文件,用同一套读写接口操作。
Windows里面有分文件,文件夹、硬盘、网卡、显示器、串口各自的用法都不同。
Linux全部抽象为文件,读写等操作共有一套逻辑。
当创建一个空文件时,此文件的大小并不是0字节,而是比0字节大。依旧占用磁盘空间。文件包括文件内容和文件属性,两者都是文件的数据。
1.ls指令
语法:ls+选项+目录或文件
功能:对于目录,该命令列出该目录下所有子目录与文件;对于文件,将列出文件名及其其他信息。
基础作用:ls的全称是list,作用是查看当前或指定文件、文件
bash
ls # 查看当前目录文件
ls /home # 查看/home目录
常用参数:
ls -l
bash
ls -l #显示完整信息:权限、所有者、大小、修改时间

如上代码ls-l显示出了home目录下的文件详细的信息:权限、所有者、大小、修改时间。
ls -a
bash
ls -a #显示隐藏文件

如上述代码ls-a会显示当前目录下的隐藏文件,隐藏文件一般是前缀是"."的文件,在Linux操作系统中就可以通过上述指令显示隐藏文件。在Windows操作系统下,可以通过在文件资源管理器的上方设置操作,具体操作如下:

ls -lh
bash
ls -lh #这里的h是human的意思,文件大小自动显示KB/MB,不用看纯数字字节。类似于单位换算

如上述代码ls-lh命令会让操作系统在显示文件具体信息的基础上,将文件的大小从字节单位换算成更易读的单位。例如上述文件大小从开始的4096变成了4k,增强了信息的可读性。
ls-lh其实是ls-l加上ls-h,首先显示文件的具体信息,随后将文件大小的单位换算。
ls -i
bash
ls -i #显示每个文件的inode编号

如上代码ls-i指令会显示文件的inode编号,上面文件的inode编号为70,可这里的inode编号又是什么呢?
inode编号是Linux文件系统底层用来存储文件元数据的结构,inode编号就是每个inode在分区内唯一的整数ID。通俗点的解释就是:文件名是给用户看的,操作系统识别文件只认准inode编号。
这里的inode里面存储着文件大小、文件修改时间、文件访问时间、文件的权限、文件类型、文件在磁盘上的存储位置。(这里面的存储内容不包括文件名和文件内容)
ls -lt
bash
ls -lt #按照修改时间排序,最新文件放在最上面
如上代码ls-lt就是先进行ls-l,然后进行ls-t。该指令的作用是将文件按照修改的时间顺序进行排列。将最新的文件放在最上面。
ls -R
bash
ls -R #递归列出所有子目录里的文件
如上代码ls-R会将该目录下的所有子目录文件递归列出来,供下面使用。这里需要注意的是R是大写,小写的r是对文件反向排列。
常用选项:
- -a:列出目录下的所有文件,包括以点开头的隐含文件。
- -d:将目录像文件一样显示,而不是显示其下的文件
- -i:输出文件的i节点的索引信息,显示文件的inode编号
- -k:以k字节的形式表示文件的大小
- -l:列出文件的详细信息
- -n:用数字的UID、GID代替名称
- -F:在每个文件名后附上一个字节说明该文件的类型
- -r:对目录反向排序
- -t:以时间顺序对文件进行排序
- -s:在文件名后输出该文件的大小
- -R:列出所有子目录下的文件
- -1:一行只输出一个文件(更清晰显示文件)
2.pwd命令
语法:pwd
解释:pwd的全称是print working directory,意思是打印工作目录,这里的工作目录就是用户当前所处的目录
功能:显示用户当前的目录
常见选项:
pwd -L:
显示文件的逻辑路径,遇到软链接时,输出链接名称,不是真正的物理路径。默认不加参数的pwd就等同于pwd-L。
pwd -P:
显示文件的物理路径,输出文件的原始真实目录。直接给出硬盘真实文件夹的路径
3.cd指令
Linux操作系统中,磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件。相当于学过的数据结构的多叉树。下面是磁盘上文件和目录的目录树显示:

语法:cd+目录名
解释:cd命令的全程是change directory,翻译过来就是改变目录、改变当前所在的文件夹。
功能:改变工作目录,将当前工作目录改变到指定目录下。
常见选项:
- cd ..:返回上级目录
- cd /home/litao/linux/:绝对路径,将当前目录改到输入目录名的位置
- cd ../day01/:相对路径,将当前目录改到输入目录名的位置
- cd ~:进入用户家目录,家目录就是home目录
- cd -:返回最近访问的目录,类似于撤销操作
绝对路径:
定义:从根目录/开始写出的完整整条路径,具有的特点是唯一且不会出错。
特点:一定以/开头,不论当前在哪个文件夹,输入这个绝对路径都会准确无误的找到该目录下的文件。
相对路径:
定义:不以/开头,以当前所在的目录位置为起点去找文件。
特点:不以/开头
常用符号:.表示当前目录(很少用);..表示上一级目录
具体解释:用相对路径表示的文件位置可以简单看成当前目录位置+输入的文件位置,例如假设当前的文件路径是:/home/student/code/day02,那么cd ../day01/的意思是在/home/student/code/day02路径上返回上级目录后,在day01目录。总结下来的文件目录就是:/home/student/code/day01
home目录:
作用:/home是系统存放普通用户专属目录的顶层文件夹。系统每创建一个普通用户,就会在/home下自动生成一个同名的文件夹,这个文件夹就是该用户的家目录。家目录中存储的是用户自己所有的私人文件:文档、代码、图片、配置文件,其中普通用户在家目录下默认有完整的读写权限,但是在系统的其他目录下只有只读权限。
4.touch指令
语法:touch+选项+文件
功能:touch指令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者创建一个不存在的空普通文件。
常用选项:
- -a -a=access,只修改文件的访问时间,不改变文件的修改时间和文件内容,文件不存在时,会创建一个普通空文件,等价于无选项touch
- -c -c=no create,当文件不存在时,什么也不做;当文件存在时,更新该文件的时间戳
- -d 手动自定义文件的时间戳,不再使用当前的系统时间,可以指定任意日期来修改文件的访问时间和修改时间
- -f 此参数将忽略不予处理,写不写是一样的效果。仅负责解决BSD版本的touch指令的兼容性问题
- -m -m=modify,作用是只修改文件的内容修改时间,不改变文件的访问时间
- -r 将一个已有文件的时间戳赋值给目标文件,使两个文件的访问时间和修改时间一致
- -t 用数字格式手动指定时间戳,修改文件的访问时间和修改时间。和-d功能类似,但是-t只能使用纯数字自定义时间戳;而-d可以使用类似于yesterday、next day文字时间
touch qigai1469.txt:创建一个以qigai1469.txt命名的空普通文件。
5.mkdir指令
语法:mkdir+选项+目录名
解释:mkdir指令的全称是:make directory,作用是创建文件夹/目录(这是与touch指令的区别,touch指令是创建空文件;而该命令是创建文件夹/目录)
功能:在当前目录下创建一个新的目录。
常用选项:
-p: p指的是parent翻译过来就是父目录。如果test文件不存在,就会递归创建多个目录
bash
mkdir --p test/test1 #递归建立多个目录
如上述代码当test不存在的话,该命令就是递归建立多个目录
6.rmdir指令和rm指令
rmdir是一个与mkdir相对应的命令,mkdir是建立目录,而rmdir是删除目录。
语法:rmdir+选项+目录名
适用对象:具有当前目录操作权限的所有者
功能:删除空目录
常用选项:
-p: 当子目录被删除后如果父目录也变成空目录的话,就连着父目录一起删除。
rm命令可以同时删除文件或目录
语法:rm+选项+目录名
适用对象:所有的使用者
功能:删除文件或目录
常用选项:
- -f:即使文件属性为只读,也直接进行删除
- -i:删除前逐一询问进行确认是否进行删除
- -r:删除目录及其以下所有的文件
7.man指令
上面我们学习了很多的Linux操作系统的命令,当然接下来还有很多的命令没有了解,这么多的Linux命令怎么记住的呢?这就引入了man指令。
语法:man+选项+命令名
常用选项:
- -k:根据关键字搜索手册
- num:只在第num章节查找相关手册
- -a:将所有章节都显示出来,例如:man printf,它缺省从第一章开始搜素,用a选项,当按下q退出,他会继续往后面搜索,直到所有章节都搜索完毕。
注意:手册分为8章
- 普通的命令
- 系统调用,如open、write(通过这个,可以方便查到调用这个函数需要添加什么头文件)
- 库函数,如printf、friend
- 特殊文件,也就是/dev下的各种设备文件
- 文件的格式,比如passwd就会说明这个文件中各个字段的含义
- 给游戏留的,由各个游戏自己定义
- 是附件,还有一些变量,比如像environ这种全局变量在这里就有说明
- 是系统管理的命令,这些只能由root用户使用,如ifconfig
8.cp指令
语法:cp+选项+源文件/目录 目标文件或目录
功能:复制文件或目录
说明:该指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已经存在的目录,则会出现错误。
常见选项:
-f:强制覆盖目标文件,当目标文件存在且无写的权限时,先删除文件再新建写入,全程不弹窗询问
-i:覆盖文件前交互式询问用户进行确认
-r:递归处理,将指定目录下的文件与子目录一并复制。若源文件或目录的形态不属于目录或符号链接,则一律视为普通文件处理
-R:递归处理,将指定目录下的文件及子目录一并处理
9.mv指令
mv命令是move单词的缩写,可以用来移动文件或将文件改名,该命令是Linux系统下常用的命令,经常用来备份文件或目录。
语法:mv+选项+源文件或目录 目标文件或目录
功能:
- 视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新目录中
- 当第二参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名
- 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移动到目标文件中。
常用选项:
-f:如果目标文件已经存在,不会询问而且直接覆盖源文件
-i:若目标文件已经存在时,就会询问是否覆盖
bash
将rm改造成mv
vim ~/.bashrc #修改这个文件
mkdir -p ~/.trash
alias rm=trash
alias ur=undelfile
undelfile() {
mv -i ~/.trash/\$@ ./
}
trash() {
mv $@ ~/.trash/
}
上述代码书写了类似于Windows操作系统回收站功能的东西,可以帮助我们Linux系统中误删文件的恢复操作
10.cat指令
语法:cat+选项+文件
功能:查看目标文件的内容
常用选项:
-b:对非空白行输出对应行的编号
-n:对输出的所有的行编号
-s:压缩连续的空白行,只保留一行空白行
11.more指令
语法:more+选项+文件
功能:more命令功能类似于cat命令,cat命令是一次性的输出文件的内容,没有翻页功能;而more命令是分页查看长文件的工具,支持翻页查看
常用选项:
-n:对输出的所有行编号(q退出)
举例:
bash
[atong@LiWenTong ~]$ ls -l / | more
total 162
drwxr-xr-x 2 root root 4096 Apr 25 05:39 bin
drwxr-xr-x 4 root root 1024 Apr 25 04:11boot
drwxr-xr-x 9 root root 3820 May 4 23:20 dev
drwxr-xr-x 84 root root 4096 May 5 00:37 etc
利用管道符将前面的ls-l作为more指令的输入,将/文件的详细信息打印出来(分页展示出来)
管道符的介绍:
符号:|
作用:把前面的命令的标准输出直接当作后面命令的标准输入,实现命令的拼接,数据在两个命令之间传输。
例子:命令1|命令2
解释例子:先运行命令1,将结果传给命令2,将命令2的最终结果输出到屏幕上
12.less指令
less工具是对文件或其他输出进行分页显示的工具,是Linux正统查看文件内容的工具,功能极其强大。less的用法比起more更加有弹性,在使用more命令的时候,我们并没有办法向前面翻,只能往后看,但若使用了less命令时,就可以使用pageuppagedown等按键的功能来往前往后翻看文件,更容易用来查看一个文件的内容。
除此之外,在less里可以拥有更多的搜索功能,不止可以向下搜素,也可向上搜索。
语法:less+参数+文件
功能:less与more类似,但使用less可以随意浏览文件,而more仅能向前移动,却不能向后移动,但是less在查看之前不会加载整个文件。
常用选项:
-i:搜索时忽略内容的大小写
-N:显示每行的行号
/字符串:向下搜索字符串的功能,从当前光标位置向文件末尾查找文本
?字符串:向上搜索字符串的功能,从当前光标位置向文件开头查找文本
n:重复前一个搜索(与/或?有关),上次用/向下搜索:按n继续向下搜索;上次用?向上搜索,按n继续向上搜索
N:反向重复前一个搜索(与/或?有关)。上次用/向下搜索:按n继续向上搜索;上次用?向上搜索,按n继续向下搜索