目录
一、环境准备
这里我们采用云服务器的方式进行学习。首先先安装一个叫做 Xshell 的软件,通过这个软件我们可以远程连接我们的云服务器进行Linux的相关操作。
1.1、常规登录
登录 Xshell 软件进行远程服务器的连接,我们需要输入命令:ssh 用户名@公网IP。如图:
然后会弹出让我们输入密码的框框,这时我们只需要输入密码就可以进行连接了。如图:
1.2、免密登录
如果我们每次登录都输入一次密码,就很麻烦,所以我们可以设置免密登录,点开Xshell程序时会弹出下图窗口:
鼠标右键点击要设置免密登录的会话,点击属性,会出现下图:
点击连接中的用户身份验证,输入用户名和密码,以后就可以免密登录了,以后只需要点击会话就可以登录上了。
上图中红框起来的部分,左侧按钮是新建会话,其中名称随便起,主机就是公网IP,右侧按钮可以弹出所有回话。
二、Linux基本指令
2.1、ls命令
功能:对于⽬录,该命令列出该⽬录下的所有⼦⽬录与⽂件。对于⽂件,将列出⽂件名以及其他信息。
语法:ls [选项] [⽬录或⽂件]
基础使用:
常用选项:(ls的选项非常多,这里并没有写全,只是罗列了常用的几个)
-a:列出⽬录下的所有⽂件,包括以 . 开头的隐含⽂件。
-l:列出⽂件的详细信息。(ll 命令相当于ls -l 命令)
-d:将⽬录像⽂件⼀样显示,⽽不是显示其下的⽂件。如:ls ‒d 指定⽬录。
-i:输出⽂件的 i 节点的索引信息。如 ls ‒ai 指定⽂件。
-k:以 k 字节的形式表⽰⽂件的⼤⼩。ls ‒alk 指定⽂件。
使用:(这里只演示 -a 和 -l )
-a:
-l:
-a 和 -l 一起使用:(其他选项也可以像下面一样一起使用)
-d:
正常情况下,我们通过 ls 命令来观察一个目录,默认显示出来的是该目录里面的内容,如图:
如果我们想观察目录本身,而不关心里面的内容,这是就可以带上 -d 选项。如图:(这里和 -l 一起使用,便于看到更详细的信息)
知识点:
(1)在 Linux 中以 . 开头的文件,我们叫做隐藏文件,隐藏文件默认不显示,通过 -a 选项进行显示。
(2)文件 = 文件内容 + 文件属性。如下图:
上图中红色框框起来的部分就是文件属性,其中所有属性的最前面以 d 开头代表是目录,以 - 开头的是普通文件类型。
(3)ls 命令默认显示的是当前工作路径下的内容,即 pwd 显示的路径下的内容,但是我们可以在 ls 命令后面进行指定路径,这样就可以看到指定路径下的文件和文件夹了。如图:
2.2、pwd命令
功能:显示用户当前所在目录。
使用:
知识点:
(1)windows:\ 是路径分隔符;Linux:/ 是路径分隔符。
(2)在Linux中,一条路径最左侧的 / 代表根目录,例如:/root/112/lesson2 这条路径中,最左侧标红的 / 就代表根目录。
验证:
从图中我们可以看出,/ 也是一个目录(属性起始位置以 d 开头),又因为从前面所有图片中可以看到,其余所有目录或文件都在该目录下,所以该目录为根目录。
2.3、cd命令
功能:改变⼯作目录。将当前⼯作目录改变到指定的⽬录下。
语法:cd 目录名
使用:
知识点:
上图用红框框起来的目录中,. (一个点)代表当前目录,.. (两个点)代表上一级目录。所以我们可以通过cd .. 进行简单的路径回退。
验证:
路径的认识:
(1)Linux系统中,磁盘上的⽂件和⽬录被组成⼀棵⽬录树,每个节点都是⽬录或⽂件。
(2)其中普通⽂件⼀定是⽬录树的叶⼦节点,⽬录可能是叶⼦(空⽬录),也可能是路上节点。
(3)路径存在的意义:树状组织⽅式,都是为了保证快速定位查找到指定的⽂件,⽽定位⽂件就需要具有唯⼀性的⽅案来进⾏定位⽂件。而任何一个父节点,可能有多个子节点,但是其中任何⼀个子节点,都一定只有⼀个⽗节点,所以,从根⽬录开始,定位指定⽂件,路径具有唯⼀性。
(4)绝对路径:⼀般从 / 开始,不依赖其他⽬录的定位⽂件的⽅式。
(5)相对路径:相对于当前用户所处⽬录,定位⽂件的路径⽅式。
(6)绝对路径⼀般不会随着用户的路径变化而丧失唯⼀性,⼀般在特定服务的配置⽂件中经常被使⽤。
(7)相对路径因为它的便捷性,⼀般在命令⾏中使⽤较多。
(8)在Linux中,任何一个目录都有 . 和 ..,新建的空目录也是如此。我们可以把每一个目录想象成一个节点,. 和 .. 想象成指针,. 指向当前目录自己,.. 指向当前目录上一级目录,不过根目录比较特殊,它 . 和 .. 都指向自己,因为它已经没有上级目录了。
验证路径的树状结构(多叉树):
为了验证这个树状结构,我们需要引入一个新的命令:tree。
如果显示没有这个命令,可以通过 yum install -y tree 命令进行安装(centOS版本下),或者apt install tree(ubuntu版本下)。验证如图:
cd命令的特殊用法:
(1)cd - 命令
功能:跳转到最近的上一次路径。
语法:cd -(cd 和 - 之间有一个空格)
使用:
(2)cd ~ 命令
功能:进入家目录
语法:cd ~ (两者之间有一个空格)
使用:
补充知识:
无论在Windows还是Linux操作系统中,都是允许多用户的,在Linux操作系统中,root用户首次登录,所处的路径,叫做 root 的家目录,普通用户首次登录,所处的路径,叫做普通用户的家目录。总结:用户登录Linux,默认所处的路径,都在自己的家目录下,其中 root 是超级用户。
补充一条小命令(whoami)
命令:whoami
功能:显示当前登录用户的用户名
如图:
上图说明当前的操作者是 root 用户。
2.4、touch命令
功能:touch命令参数可更改⽂档或⽬录的⽇期时间,包括存取时间和更改时间,或者新建⼀个不存在的⽂件。
语法:touch [选项]... ⽂件...
常用选项:
-a:change only the access time
-c:change only the modification time
使用:
2.5、mkdir命令
语法:mkdir [选项] dirname...
功能:在当前⽬录下创建⼀个名为 “dirname”的⽬录。
常用选项:-p/--parents: 可以是⼀个路径名称。此时若路径中的某些⽬录尚不存在,加上此选项后,系统将⾃动建⽴好那些尚不存在的⽬录,即⼀次可以建⽴多个⽬录。
使用:
从上面代码可以看到,mkdir不加任何选项时不可以创建不存在的多级目录,但是我们可以加上选项 p 解决这个问题,如图:
当命令中的多级目录中有一部分已经存在了,mkdir -p 命令会将不存在的那部分创建出来。如图:
2.6、rmdir和rm命令
rmdir是⼀个与mkdir相对应的命令,mkdir是建⽴⽬录,⽽rmdir是删除命令。
语法:rmdir [dirName]
适用对象:具有当前⽬录操作权限的所有使⽤者。
功能:删除空目录。(普通文件和非空目录均无法删除)
常用选项:-p 当⼦⽬录被删除后如果⽗⽬录也变成空⽬录的话,就连带⽗⽬录⼀起删除。
使用:
rm 命令可以同时删除文件或目录。
语法:rm [-f-i-r-v] [dirName/dir]
适用对象:所有使⽤者。
功能:删除⽂件或⽬录。
常用选项:
-f:强制删除(不再询问用户是否确定),即使⽂件属性为只读(即写保护),亦直接删除。
-i:删除前逐⼀询问确认。
-r:递归式删除⽬录及其下所有⽂件(root 用户可以能会逐一询问,确认是否删除)。
使用:
这样一直确认太过麻烦,可以使用 -f 选项直接强制删除。如图:
知识点:
(1) * :通配符,可以匹配任意字符。
如图:
rm -rf * 会将当前目录下所有文件和目录全部删除。
(2)两个热键
tab:快速按两下,可以进行补齐,既可以补齐命令,也可以补齐路径。
Ctrl + c:当页面处于失控的状态,可以尝试Ctrl+c终止。
2.7man命令
Linux的命令有很多参数,我们不可能全记住,可以通过查看联机⼿册获取帮助。
语法:man [选项] 命令(进入查找页面后按 q 退出,不指定章节时默认从1号手册开始查找)
常用选项:
-k:根据关键字搜索联机帮助。
num:只在第num章节查找(该选项就是一个数字)。
-a:将所有章节的都显⽰出来,⽐如 man printf 它缺省从第⼀章开始搜索,找到后就停⽌,如果使用a选项(当按下q退出),他会继续往后⾯搜索,直到所有章节都搜索完毕。
注意:man指令可能需要自己安装,安装指令:yum install -y man-pages(centos版本下),apt install --reinstall man-db(ubuntu版本下)。
解释⼀下,man⼿册分为9章(不同系统可能会有差别):
1是普通的命令。
2是系统调⽤,如open,write之类的(通过这个,⾄少可以很⽅便的查到调⽤这个函数,需要加什么头⽂件)。
3是库函数,如 printf,fread 是特殊⽂件,也就是 /dev 下的各种设备⽂件。
4:略
5是指⽂件的格式,⽐如 passwd,就会说明这个⽂件中各个字段的含义。
6是给游戏留的,由各个游戏⾃⼰定义。
7是附件还有⼀些变量,⽐如像 environ 这种全局变量在这⾥就有说明。
8是系统管理⽤的命令,这些命令只能由 root 使⽤,如 ifconfig。
9:略
如图:(使用man man 命令进行查 man 命令本身的作用)
man指令的使用:
指令:
效果:
指令:
效果:
2.8、cp命令
语法:cp [选项] 源⽂件或⽬录⽬标⽂件或⽬录
功能:复制⽂件或⽬录
说明:
(1)cp指令⽤于复制⽂件或⽬录。
(2)如同时指定两个以上的⽂件或⽬录,且最后的⽬的地是⼀个已经存在的⽬录,则它会把前⾯指定的所有⽂件或⽬录复制到此⽬录中
常用选项:
-f 或 --force:强⾏复制⽂件或⽬录,不论⽬的⽂件或⽬录是否已经存在。
-i 或 --interactive:覆盖⽂件之前先询问用户。
-r:递归处理,将指定⽬录下的⽂件与⼦⽬录⼀并处理。若源⽂件或⽬录的形态,不属于⽬录或符 号链接,则⼀律视为普通⽂件处理。
使用:
拷贝单个文件或空目录
拷贝多级目录
注意:同级目录中不可以有同名文件或目录。
总结:
2.9、mv命令
mv命令是move的缩写,可以⽤来移动⽂件或者将⽂件改名(move (rename) files,经常⽤来备份⽂件或者⽬录
语法:mv [选项] 源⽂件或⽬录 目标文件或目录
功能:
(1)视mv命令中第⼆个参数类型的不同(是⽬标⽂件还是⽬标⽬录),mv命令将⽂件重命名或将其 移⾄⼀个新的⽬录中。
(2)当第⼆个参数类型是⽂件时,mv命令完成⽂件重命名,此时,源⽂件只能有⼀个(也可以是源⽬录名),它将所给的源⽂件或⽬录重命名为给定的⽬标⽂件名。
(3)当第⼆个参数是已存在的⽬录名称时,源⽂件或⽬录参数可以有多个,mv命令将各参数指定的源⽂件均移⾄⽬标⽬录中。(相当于将指定文件或目录剪切到指定路径)
常用选项:
-f:force 强制的意思,如果⽬标⽂件已经存在,不会询问⽽直接覆盖。
-i:若⽬标⽂件(destination)已经存在时,就会询问是否覆盖!
使用:
2.10、cat命令
语法:cat [选项] [⽂件]
功能:查看⽬标⽂件的内容。
常用选项:
-b:对⾮空输出⾏进行编号。
-n:对输出的所有⾏进行编号。
-s:不输出多⾏空⾏。
使用:
当 cat 命令后面不加任何东西时,我们输入什么,回车后他就会显示什么(通过Ctrl+c进行终止命令)。如图:
2.11、echo命令
在Linux环境中一切皆文件,显示器和键盘也可以理解成文件,打印数据其实就是向显示器文件写入数据,从键盘读取数据其实就是从键盘文件读取。而 echo 命令默认就是向显示器文件写入,该命令后面跟的什么内容就写入什么内容,如图:
但是 echo 命令不止可以向显示器文件进行输入,还可以向其他文件进行输入,只需要在该命令后面加上 > 文件名 就可以向指定文件进行输入了,这个过程叫做输出重定向,且对于不存在的文件,该命令会新建文件并将内容输入进入,对于已经存在的文件,该命令直接输入内容。如图:
如果我们只是想新建一个空文件,也可以通过 > 符号,如图:
对于输出重定向,如果指定的文件已经存在,那么会先清空文件原有内容,在输入新的内容;我们也可以通过这个特性快速的将一个文件的内容清空。如图:
如果我们不想清空原有内容,想在原有内容基础上进行追加,我们可以使用追加重定向,只需要将> 替换为 >> 即可。如图:
除了输出重定向,还有输入重定向,输入重定向通过 < 符号实现,可以从让某一指令从指定文件中读取数据。如图:
2.11.1、Ctrl + r 快捷键
Ctrl + r 快捷键可以帮我们快速搜索历史命令,只要我们输入想找的命令的片段,他就会进行查找,并返回匹配的命令。
2.11、more命令
对于短文件,我们可以使用 cat 进行打印查看,但是如果是长文件,直接使用 cat 就会刷屏,不方便查看,这时可以使用 more 命令来查看,该命令输出满一屏后就会停止输出,等待我们自己向下翻找。
语法:more [选项] 文件
功能:more命令,功能类似 cat。
常用选项:-n:指定输出⾏数。
q 键:退出more。
使用:
效果:
2.12、less命令
less ⼯具也是对⽂件或其它输出进⾏分⻚显⽰的⼯具,应该说是linux正统查看⽂件内容的⼯具, 功能极其强⼤。less 的⽤法⽐起 more 更加的有弹性,在 more 的时候,我们并没有办法向前⾯翻,只能往后⾯看,但若使⽤了 less 时,就可以使⽤ [pageup] [pagedown] 等按键的功能来往前往后翻看⽂件,更容易⽤来查看⼀个⽂件的内容。除此之外,在 less ⾥头可以拥有更多的搜索功能,不⽌可以向下搜,也可以向上搜。
语法:less [参数] ⽂件
功能:less 与 more 类似,但使⽤ less 可以随意浏览⽂件,⽽ more 仅能向前移动,却不能向后移动,⽽且 less 在查看之前不会加载整个⽂件。
选项:
-i:忽略搜索时的⼤⼩写。
-N:显⽰每⾏的⾏号。
/字符串:向下搜索“字符串”的功能。
?字符串:向上搜索“字符串”的功能。
n:重复前⼀个搜索(与 / 或 ? 有关)。
N:反向重复前⼀个搜索(与 / 或 ? 有关)。
q键:退出
使用:
查找带有100数字的记录:
2.13、head和tail命令
head 与 tail 就像它的名字⼀样的浅显易懂,它是⽤来显⽰开头或结尾某个数量的⽂字区块,head⽤来显⽰档案的开头⾄标准输出中,⽽ tail 是看档案的结尾。
语法:head [参数]...[⽂件]...
功能:head ⽤来显⽰档案的开头⾄标准输出中,默认head命令打印其相应⽂件的开头10⾏。
选项:-n + 行数:控制显⽰的⾏数。(n 可省略)
使用:
语法:tail 必要参数 [⽂件]
功能:⽤于显⽰指定⽂件末尾内容,不指定⽂件时,作为输⼊信息进⾏处理。常⽤查看⽇志⽂件。
选项:
-n+行数:控制显⽰⾏数。(n 可省略)
-f:循环读取。
使用:
2.13.1、管道
管道符号 | ,通过管道可以连接多个命令,并且管道会记录前一个命令产生的数据供给后一条命令使用,在Linux下一切皆文件,所以管道也可以理解成文件。如果我们想只查看一个大文件中间的某一部分,我们可以使用管道。如图:
2.15、时间相关的指令
指定格式显示时间:date +%Y:%m:%d
用法:date [OPTION]... [+FORMAT]
(1)在显示方面,使⽤者可以设定想要显示的格式,格式设定为⼀个加号后接数个标记,其中常⽤的标记列表如下:
%H : 小时(00..23)
%M : 分钟(00..59)
%S : 秒(00..61)
%X : 相当于 %H:%M:%S
%d : 日(01..31)
%m : ⽉份(01..12)
%Y : 完整年份 (0000..9999)
%F : 相当于 %Y-%m-%d
(2)设定时间方面
date -s:设置当前时间,只有root权限才能设置,其他只能查看。
date -s 20080523:设置成20080523,这样会把具体时间设置成空00:00:00
date -s 01:01:01:设置具体时间,不会对⽇期做更改
date -s “01:01:01 2008-05-23″ :这样可以设置全部时间
date -s “01:01:01 20080523″:这样可以设置全部时间
date -s “2008-05-23 01:01:01″:这样可以设置全部时间
date -s “20080523 01:01:01″:这样可以设置全部时间
(3)时间戳
时间转换时间戳:date +%s
时间戳转换时间:date -d@1508749502(时间戳)
Unix时间戳(英⽂为Unix epoch, Unix time, POSIX time 或 Unix timestamp)是从1970年1⽉1 ⽇(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒
使用:
2.16、find命令
Linux下 find 命令在⽬录结构中搜索⽂件,并执⾏指定的操作。Linux下 find 命令提供了相当多的查找条件,功能很强⼤。由于find具有强⼤的功能,所以它的选项也很多,其中⼤部分选项都值得我们花时间来了解⼀下。 即使系统中含有⽹络⽂件系统(NFS),find 命令在该⽂件系统中同样有效,只要你具有相应的权限。在运⾏⼀个⾮常消耗资源的 find 命令时,很多⼈都倾向于把它放在后台执⾏,因为遍历⼀个⼤的⽂件系统可能会花费很⻓的时间(这⾥是指30G字节以上的⽂件系统)。
语法:find pathname -options
功能:⽤于在⽂件树中查找⽂件,并作出相应的处理(可能访问磁盘)。
常用选项:-name:按照⽂件名查找⽂件。(其他选项根据需要查,可以使用man)
使用:
2.17、which命令
功能:搜索系统指定的命令。
使用:
知识点:指令就是一个程序,就是一个文件,安装在系统的特定目录下。
2.17.1、alias
功能:给命令起别名。
我们使用的 ls 和 ll 其实都是被 alias 命令起的别名,如图:
自己使用 alias 起别名:
这个别名是内存级别的,当Xshell关闭之后就会消失,如果想使用需要重新起别名,ls 和 ll 一直好使是因为每次Xshell启动后都会自动起好别名。
2.18、grep命令
语法:grep [选项] 搜索的字符串 ⽂件
功能:在⽂件中搜索字符串,将找到的⾏打印出来
常用选项:
-i:忽略⼤⼩写的不同,所以⼤⼩写视为相同。
-n:顺便输出⾏号。
-v:反向选择,亦即显⽰出没有 '搜索字符串' 内容的那⼀⾏。
使用:
知识点:grep 通常可以用来进行进程搜索。
2.19、zip和unzip命令
为什么要打包和压缩:减少网络传输的数据,提高传输效率,将多个文件变为一个文件传输,防止传输过程某些数据丢失。
zip语法:zip 压缩⽂件.zip ⽬录或⽂件
功能:将⽬录或⽂件压缩成zip格式。
常用选项:-r:递归处理,将指定⽬录下的所有⽂件和⼦⽬录⼀并处理。
unzip语法:unzip 打包后的文件名 -d 路径 (若不写 -d 选项和路径,默认会在当前路径解包)
功能:将打包后的文件进行解包。
常用选项:-d:指定解包后的文件放到哪个路径
打包命令打包一个路径及路径下的所有内容时,如果不加任何选项,只能够打包指定的路径,而路径中的内容都不会打到包中,所以需要加上 -r 选项。如图:
知识点:Linux中有一个 rzsz 工具,这个⼯具⽤于 windows 机器和远端的 Linux 机器通过 XShell传输⽂件。安装完毕之后可以通过拖拽的⽅式将⽂件上传过去。centOS版本安装命令:yum install lrzsz;Ubuntu版本安装命令:apt install lrzsz。
2.20、tar命令
tar命令的选项非常多,这里直接写一种用该命令打包的方式和解包的方式。
打包:tar -czf 压缩文件.tgz 文件或目录
解包:tar -xzf 压缩文件名
选项解释:
-c:建⽴⼀个压缩⽂件的参数指令(create 的意思);
-x:解开⼀个压缩⽂件的参数指令!
-z:是否同时具有 gzip 的属性?亦即是否需要⽤ gzip 压缩?
-f:使⽤档名,注意,在 f 之后要⽴即接档名喔!不要再加参数!
-v:压缩的过程中显⽰⽂件!这个常⽤,但不建议⽤在背景执⾏过程!
-C:解压到指定⽬录。
使用:
2.21、uname命令(不重要,了解即可)
语法:uname [选项]
功能:uname⽤来获取电脑和操作系统的相关信息。
补充说明:uname可显⽰linux主机所⽤的操作系统的版本、硬件的名称等基本信息。
常用选项:-a 或‒all 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称。
2.21.1、Ctrl+d 热键
功能:Ctrl + d命令可以在Xshell程序中退出当前登录的账号。
三、shell命令以及运行原理
Linux严格意义上说的是⼀个操作系统,我们称之为“核⼼(kernel)”,但我们⼀般用户,不能直接 使⽤ kernel。⽽是通过 kernel 的“外壳”程序,也就是所谓的shell,来与 kernel 沟通。
从技术角度,Shell 的最简单定义:命令⾏解释器(command Interpreter)。主要功能包含:
(1)将使⽤者的命令翻译给核⼼(kernel)处理。
(2)将核⼼的处理结果翻译给使⽤者。
对⽐windows GUI,我们操作 windows 不是直接操作 windows 内核,⽽是通过图形接⼝,进行点击,从⽽完成我们的操作(⽐如进⼊D盘的操作,我们通常是双击D盘盘符,或者运⾏起来⼀个应⽤程序)。shell 对于Linux,有相同的作⽤,主要是对我们的指令进⾏解析,解析指令给Linux内核。反馈结果再通过内核运⾏出结果,通过shell解析给用户。
广义上Linux操作系统是指Linux内核+shell外壳程序,为什么会存在外壳程序简单来说就是因为大部分用户不擅长或者不会操作内核,并且内核也不会让用户直接访问到,所以需要一个外壳程序作为中间商帮助我们,将我们的命令翻译给内核处理,同时将内核处理后的结果翻译给我们,且外壳程序进行翻译时,一般都是创建子进程,让子进程去翻译。 (shell外壳有很多种,bash就是一种具体的外壳程序)如图: