淮安做网站 卓越凯欣谁有推荐的网址
Linux操作系统又被称之为“核心(kernel)” 。但一般的用户,不能直接使用kernel,而要通过kernel的“外壳”程序——命令行解释器shell,来与 kernel 沟通。这是因为 kernel 对于一般的用户来说太过复杂,且不让用户直接使用 kernel 而提供 shell 给用户,也进一步保障了操作系统的安全性。从技术的角度,shell 能将用户的指令翻译给 kernel 处理。 同时,将kernel 的处理结果翻译给使用者。
对比windows GUI,我们操作windows 也不是直接操作windows内核,而是通过点击图形接口,从而达到操作的目的(例如要进入D盘,一般通过直接双击D盘盘符,或者通过一个应用程序)。shell 对于Linux,也是类似的作用,主要是对我们的指令进行解析,解析指令给 kernel。反馈结果在通过内核运行出结果,通过shell解析给用户。
Linux操作系统都采用纯命令行的方式进行操作,虽然也有图形化界面,但是一般不用。这是因为无论图形还是指令,本质其实都是一样的,而指令操作更贴近操作系统。
所以说,Linux指令是 Linux操作系统中的基本操作,而它们是在命令行上运行的程序或实用程序。命令行是一个界面,它接受文本行并将其处理为计算机的指令。通俗来讲,我们所输入的指令就是一个可执行程序,当用户要运行一条指令时,系统会在相应文件下找相应的指令,然后再执行它。这个过程就相当于执行了一个可执行程序,同时也意味着,所有的指令操作都与文件相关,换句话说,Linux下,一切皆文件。
Linux中的文件基本分为两种:目录文件和普通文件,其中,目录文件相当于Windows中的文件夹,普通文件就相当于Windows中的普通文件。一个文件包含了文件内容和文件属性,其中,文件属性跟文件内容一样,也是数据,也需要存储。这就决定了,指令本质就是对文件内容的操作或对文件属性的操作。
本篇博客整理了Linux的常见指令,旨在让读者熟悉Linux操作的同时理解“Linux下一切皆文件”。
(这些指令已在上篇博客中提及:与用户相关,文件的创建、显示、访问、删除,详情请见:【Linux入门】Linux简史,本篇恕不赘述)
目录
一、指令的使用手册
· 调取使用手册:man
二、文件的移动和重命名
· 移动目录或文件:mv
三、内容输出与重定向
· 打印字符串:echo
· 输出重定向: >
· 追加重定向:>>
四、小文本查看与重定向
· 显示文件的所有内容:cat
· 输入重定向:<
· 倒着打印文件内容:tac
五、大文本查看与管道
· 显示部分大文本:more
· 上下翻页大文本:less
· 查看文本前N行:head
· 查看文本后N行:tail
· 级联多个指令:管道 |
六、时间相关
· 显示日期和时间:date
· 显示日历:cal
七、文件的查找
· 在磁盘中查找文件:find
· 查找指令所在的路径:which
· 在文件中查找内容:grep
八、文件的拷贝
· 拷贝一个目录或文件:cp
九、文件的压缩和解压
· 压缩文件:zip
· 解压文件:unzip
· 压缩、解压与查看:tar
十、其他
· 热键:Tab
· 热键:ctrl + r
· 通配符:*
· 计算器:bc
· 查看Linux体系结构和内核版本:uname
· 关机:shutdown
一、指令的使用手册
· 调取使用手册:man
Linux的指令十分丰富,每个指令也有它特殊的参数(例如ls指令有参数-a、-l等),使用时难免会记不清,当一定需要使用它们的时候,可以通过man查看联机手册,获得它们的详细信息。除此之外,man还可以查看系统调用接口、C语言库函数、环境变量、系统管理指令的详细信息。
(注:man这条指令需要先在超级用户下或用管理员权限输入“yum install -y man-pages”下载)
联机手册一共有8章,而其中最常用的是前3章:
- 可执行程序,如基本指令、shell的脚本指令
- 系统调用接口,这是一些由Linux内核提供的函数,如open、write之类的(通过man,至少可以很方便的查找到调用这个函数,需要加什么头文件)
- 库函数,主要为c语言的库函数,如printf、fread
- 特殊文件,也就是/dev目录下的各种设备文件
- 文件的格式化和约定,例如在/etc/passwd,就会说明这个文件中各个字段的含义
- 游戏,由各个游戏自己定义
- 附件,包含宏包、约定和一些变量,例如像environ这种全局变量在这里就有说明
- 系统管理指令,这些命令只能由root使用,如ifconfig
语法:man + (选项)
【补】选项:
- 指令:获取指令的详细信息
- 库函数:获取库函数的详细信息(大多是c语言的库函数。这是因为Linux是由c实现的)
- 章节编号 + 查询目标:在某章下获取查询目标的详细信息
- man:获取man的详细信息
- -k + 查询目标:根据关键字搜索联机帮助
- -a + 查询目标:将所有章节的都显示出来,如man printf是从第一章开始搜索的,找到就停止,加上-a后,按一下q退出,还会继续往后面搜索,直到所有章节都搜索完毕。
1
2
3
4
二、文件的移动和重命名
· 移动目录或文件:mv
在Windows中移动目录或文件可以直接通过鼠标拖动图标,还可以右键单击文件,点击剪切,然后粘贴到目标位置(剪切并粘贴后,原来的位置就没有目录和文件了,而移动到目标位置了)。
Linux中,指令mv(move)可以移动源目录或源文件到目标目录下,还可以将移动后的源文件重新命名,经常用来备份目录或文件。
语法:mv + (选项)
【补】选项:
- 源路径 + 目标路径:移动源路径下文件至目标路径(可以直接在目标路径上对文件重命名)
- 旧文件名 + 新文件名:重命名当前工作目录下的一个文件(相当于原地移动,且新文件名不可以是旧文件名)
- 旧目录名 + 新目录名:重命名当前工作目录下的一个目录(新目录名不可以是旧目录名)
- 源文件名 + 目标路径:移动源文件至目标路径下(也可以用这个方式覆盖同名的空文件)
- 源目录名 + 目标路径:移动源目录至目标路径下(也可以用这个方式覆盖同名的空目录)
- -f / -force + 源目录名/源文件名 + 目标路径:强制覆盖重名的目录或文件,如果目标文件已经存在,不会询问而直接覆盖
- -i + 源目录名/源文件名 + 目标路径 :覆盖时添加询问(root用户在操作时不添加-i也会询问)。若目标路径下存在同名目录或文件,就会询问是否覆盖
1
2
3
4
三、内容输出与重定向
· 打印字符串:echo
echo指令可以将指定的字符串打印到屏幕上(其实是将字符串放到显示器文件中)。
语法:echo + 字符串
· 输出重定向: >
> 一般与echo指令配合使用,可以将指定的内容覆盖到文件中,如果文件中原本有内容,新指定的内容会将其全部覆盖。
1
2
· 追加重定向:>>
> >一般与echo指令配合使用,可以将内容追加到指定文件的内容的末尾。
四、小文本查看与重定向
· 显示文件的所有内容:cat
cat指令会将指定文件的所有内容打印在窗口中,可以以此查看这个文件的所有内容。但cat只适合看小文本,不适合看大文本(比如几万行的文本,显示的时候会刷屏)。
语法:cat + (选项) + 文件
【补】选项:
- (不加):显示指定文件的所有内容
- -b:将非空输出的行编号
- -n:将输出的所有行编号
- -s:不输出多行空行
1
2
3
4
· 输入重定向:<
< 一般与cat指令配合使用,可以将指定文件的内容显示到屏幕上。
· 倒着打印文件内容:tac
tac就是cat 倒过来的样子,可以倒着打印文件的所有内容,但它不能像cat一样附上-n 打印行号。
语法:tac + 文件名
五、大文本查看与管道
· 显示部分大文本:more
以下指令可以构建一个有10000行hello word的大文本test.txt ——
cnt=1;while [ $cnt -le 10000 ]; do echo “Hello world $cnt”; let cnt++; done > test.txt
cat指令只适合看简短的小文本,不适合看超长的大文本,因为显示的时候会刷屏。
项目、日志等,都属于大文本,在实际工作中会经常需要查看,届时就需要用到一个更适合查看大文本的指令。
more指令的功能类似cat,也是查看文件的内容,但不同于cat,more查看大文本时更为方便,可以指定行号查看,也可以跳转行号查看。
语法:more +(选项)+ 文件名
【补】选项:
- (不加):默认显示文件的一部分(从文件的第一行开始,按回车下翻,按q取消查看)
- - 行号:显示从第一行到指定行号的文件内容
1
2
· 上下翻页大文本:less
less的功能与more差不多,也可以显示大文件的内容。虽然less不能像more从第一行显示到任意行号,但它支持用方向键上下翻页。
语法:less + (选项) + 文件名
【补】选项:
- -N:显示每行的行号(more不可以显示行号,但less可以)
1
2
· 查看文本前N行:head
语法:head + (选项) + 文件名
【补】选项:
- (不加):默认显示前10行内容。
- - 行号:显示前N行内容。
1
2
· 查看文本后N行:tail
语法:tail + (选项) + 文件名
【补】选项:
- (不加):默认显示后10行内容
- - 行号:显示后N行内容
1
2
· 级联多个指令:管道 |
符号“ | ”会被系统解释为管道文件(这是一个内存级文件),可以支持流水线工作,通常用于级联多个指令。
语法:指令 + | + 指令 + ... + | + 指令
管道的使用情景例如:要查看一个大文本的指定范围(例如上文实例中test.txt的第5000-6000行),可以先将前6000行输出到一个临时文件中(会用到head指令),然后取临时文件的最后1000行即可(会用到tail指令)。
但以上这种方式会用到两行指令,且相对繁琐。
而管道可以级联head和tail,一步到位:
(管道的原理牵扯很多知识,将在以后进程一节详细解释)
六、时间相关
因为脚本需要打日志,所以脚本也需要有时间。如今用命令行看时间已经很少,但是在很多年前,用命令行看时间是常有的事。
· 显示日期和时间:date
语法:date + (+ 选项)
【补】选项:
- (不加):查看当前的时间
- %H:小时,范围:00~23
- %M:分钟,范围:00~59
- %S(大写):秒,范围:00~61
- %X:相当于 “%H : %M : %S”
- %Y:年份 ,范围0000~9999
- %m:月份 ,01~12
- %d:日 ,01~31
- %F:相当于 “%Y - %m - %d”
- %s(小写):查看当前时间戳(自1970年1月1日午夜开始,到现在为止所累计的秒数)
- -d@时间戳:将时间戳转化为时间
- -s + 日期/时间:设置当前时间(只有root用户才能设置,其他用户只能查看)
1
2
3
4
5
6
· 显示日历:cal
cal 可以显示公历日历。
语法:cal + (选项)
【补】选项:
- (不加):当月的日历并标记今天的日期
- 年份:显示某年的日历
- 月份 + 年份:显示某年某月的日历
- -3:显示前一个月、当月、下一个月的日历
- -y:显示今年的日历
- -j:显示今天是今年的第几天(从 1月1日算起)
1
2
3
4
七、文件的查找
· 在磁盘中查找文件:find
find可以在目录结构中查找文件,并执行指定的操作。由于它提供的参数选项很多,所以它的功能很强大,即使系统中含有网络文件系统(NFS),只要有相应的权限,find在该文件系统中同样有效。在运行一个很消耗资源的find指令时,一般会将它放在后台(因为遍历一个大的文件系统,特指30G以上的文件系统,可能会花费很长的时间) 。
本篇不涉及权限,在此只介绍find的一个参数选项:-name。
语法:find + 目录 + (选项)
【补】选项:
- -name + 文件名:按照文件名查找文件,找到后返回文件所在路径
· 查找指令所在的路径:which
Linux所有的指令是可执行程序,而可执行程序本质是后缀为.exe的文件,这些指令文件和任何可执行程序一样,都存在系统路径(/usr/bin)中。which可以在系统路径中查找指令,找到后返回所在的路径。
语法:which + 指令
· 在文件中查找内容:grep
grep是一个行文本过滤工具,可以在文件中搜索指定的字符串内容,找到后将其所在的行打印出来。
语法:grep + (选项) + "字符串" + 文件名
【补】选项:
- (不加):按每行显示所有含指定字符串的内容
- -n:显示指定字符串所在的行号
- -v:显示不含指定字符串的那一行
- -i:不区分大小写
1
2
3
4
八、文件的拷贝
· 拷贝一个目录或文件:cp
cp 指令可以拷贝一个目录或文件。如果同时拷贝两个及以上的目录或文件,且目标目录是一个已存在的目录,那么所有源目录和源文件都会拷贝至目标目录中;但如果目标目录目的地不是一个已存在的目录,就会出现错误信息。
语法:cp + (选项)
【补】选项:
- 源路径 + 目标路径:将一个文件拷贝到目标路径中(文件可以在目标路径中重命名;拷贝到不同路径时,目标文件可以和源文件同名)
- 源文件名 + 目标文件名:在当前工作目录下拷贝一个文件(相当于在相同路径下原地拷贝,目标文件名不可以是源文件名)
- -r + 源目录名/源路径 + 目标路径:将一个目录拷贝到目标目录下
- -i / -interactive:发生文件覆盖之前先询问(超级用户root操作时默认会询问)
- -f / -force:强制拷贝不询问
- -R / -recursive:递归处理,将指定目录下的文件及子目录一并处理
1
2
3
4
九、文件的压缩和解压
就像出行时带的拉杆箱,为了将更多的行李放入拉杆箱内带走,我们一定会有一个行动——打包:在拉杆箱有限的空间里将行李整理放好(或是将东西一并塞入拉杆箱,身体压住箱子强行拉上拉链);文件的压缩也是类似的意图,将多个文件看成一个整体并压缩成一个文件,让这些文件的存储占据空间整体变小(原来几MB的大小可能变成几百KB),下载时间变短,也不容易造成文件的缺失。
行李终究是要被我们使用的,于是打包的行李就有解包的时候。同样的,因为会需要用到,压缩的文件也会有解压的时候。文件解压可以看作是文件压缩的逆过程,是将这一个压缩文件还原成在压缩之前的多个文件。
为什么要接触压缩和解压呢?——
- 压缩可以节约空间,提升文件上传和下载的效率;
- 许多需要下载的软件其实是压缩包,这是因为曾经提供软件的人上传的是压缩包。
· 压缩文件:zip
zip指令可以将目录或文件压缩成zip格式(后缀.zip),与unzip指令配合使用。
(zip、unzip指令需要先通过这条指令下载:yum install -y zip unzip)
语法:zip +(选项)+ 压缩文件名.zip + 源文件名/源目录名
【补】选项:
- -r:递归处理,将指定目录下的所有文件和子目录一并处理
1
2
· 解压文件:unzip
语法:unzip + 压缩文件名.zip + (选项)
【补】选项:
- (不加):默认解压到当前路径
- -d + 目标目录/路径:解压到指定的目录/路径
1
2
· 压缩、解压与查看:tar
tar指令既可以压缩文件(后缀为.tgz),也可以解压文件,还可以查看压缩文件中有哪些文件,是Linux中最常见的一种压缩/解压方式。
语法:tar +(选项)+ 文件名.tgz + (压缩:源文件名/源目录名;解压:目标目录/路径)
【补】选项:
- -czf / -czvf:压缩一个文件(带v可以让看到压缩过程)
- -tzf:查看压缩包文件的信息
- -xzf / -xzvf:解压一个文件到当前工作目录(带v可以让看到解压过程)
- -xzf + -C:解压一个文件到指定目录/路径
1
2
3
十、其他
· 热键:Tab
Tab按键具有指令补全和档案补齐的功能。
在输入指令时,按下Tab可以协助找到相应指令
当有唯一确定的指令时,Tab会自动将指令的剩余部分补齐:
· 热键:ctrl + r
ctrl + r可以向上查找历史输入过的指令,按下回车后会再次执行查找到的历史指令。
· 通配符:*
通配符*是一个强大的检索符,能够协助ls指令批量显示文件,和协助rm指令批量删除文件。
与ls搭配使用:
- ls + * :显示所有文件(不包括隐藏文件)
- ls + * + 后缀名:显示当前工作目录下后缀名相同的文件
- ls + 前缀名 + * :显示当前工作目录下前缀名相同的文件
1
2
3
与 rm 搭配使用:
- rm + * + 后缀名:删除当前工作目录下后缀名相同的文件
- rm + 前缀名 + * :删除当前工作目录下前缀名相同的文件
1
2
· 计算器:bc
语法:bc
1
2
· 查看Linux体系结构和内核版本:uname
uname指令用来获取电脑和操作系统的相关信息。
语法:uname +(选项)
【补】选项:
- -a /–all:查看体系结构(输出的信息依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称。使用情景例如了解不同平台下的指针大小,32 位下指针大小是 4 个字节,在64位下是 8 字节)
- -r:查看内核版本
1
2
· 关机:shutdown
语法:shutdown +(选项)
【补】选项:
- -h : 将系统的服务停掉后,立即关机。
- -r : 在将系统的服务停掉之后就重新启动
- -t +秒数: 过几秒后关机