目录
0.补充说明
为什么选择Linux操作系统而不是其他操作系统?
Linux操作系统相对于Unix,MacOS等操作系统,其最为明显的特征就是开源,开源就意味着全世界的技术人员就都可以使用或修改Linux操作系统的源代码,使得Linux更加完善。
因此Linux 效率更高、稳定性更好、更加安全,而且免费。
所以我们选择Linux操作系统。
为什么选择指令界面而不是图形化界面?
1.对于企业的服务器来说,是没有图形化界面的。
2.指令界面历史早于图形界面,因此也更加贴合系统,也更方便我们学习系统。
3.指令操作相对图形界面操作执行效率更高。
1.whoami指令
严谨解释: 显示当前有效用户的名称。
用人话说: 现在正在进行操作的用户是谁。
操作演示如下:
2.pwd指令
严谨解释: 显示用户当前所在的路径位置
用人话说: 我现在在哪里。
操作演示如下:
3. ls指令
3.1 ls的作用
严谨解释: 显示当前目录下的文件。
用人话说: 我现在的路径/目录下到底有什么。
操作演示如下:
3.2 ls的选项 (最常用)
3.2.1 -l选项
严谨解释: 进一步列出文件的详细信息。
用人话说: 不止文件名,把文件的属性信息也列出来。
3.2.2 介绍文件
事实上 , 文件 = 文件内容 + 文件属性
所以 , 即使文件里面的内容是0KB , 但该文件在计算机中仍然是占用空间的 , 这是因为文件的属性信息也需要被存储。
3.2.3 -a选项
严谨解释: 列出目录下的所有文件,包括以 . 开头的隐含文件(Linux下 . 开头的文件是隐藏文件)
用人话说: 所有文件不管是否隐藏都显示出来。
3.2.4介绍.文件
在Linux下,所有以 . 开头的文件都是隐藏文件。
普通的ls是无法显示隐藏文件的,需要叠加-a选项。
对于上图中的名字为蓝色的 . 隐藏文件 与 .. 隐藏文件
. 代表当前路径 .. 代表上级路径(目录)
使用cd(切换路径指令)来进行验证:
3.2.5 -n选项
严谨解释: 用数字的用户ID,所属组ID来代替名称。
用人话说: 不显示名字了,显示ID号码了。
3.2.6 -d选项
严谨解释: 将目录像文件一样显示,而不是显示该目录下的文件。
用人话说: 不再默认显示目录下的文件,而是专门只显示该目录文件的信息。
3.2.7 所有ls指令选项表
-a |
列出目录下的所有文件,包括以
.
开头的隐含文件。
|
-d |
将目录像文件一样显示,而不是显示其下的文件。
|
-i |
输出文件的
i
节点的索引信息。
|
-k |
以
k
字节的形式表示文件的大小。
|
-l |
列出文件的详细信息。
|
-n |
用数字的
所属者ID,所属组ID
代替名称。
|
-F |
在每个文件名后附上一个字符以说明该文件的类型,
“*”
表示可执行的普通文件;
“/”
表示目录;
“@”
表 示符号链接;“|”
表示
FIFOs
;
“=”
表示套接字
(sockets)
。
|
-r |
对目录反向排序。
|
-t |
以时间排序。
|
-s |
在
文件名后输出该文件的大小。
|
-R |
通过递归列出所有子目录下的文件。
|
-1 |
一行只输出一个文件。
|
4.which指令
4.1 which的作用
严谨解释: 查看特定指令所在的系统路径
用人话说: 把该指令的别名alias 以及 所处路径/usr/bin/xxx 都显示出来
4.2引入补充别名alias
同时我们也可以自己设计别名使用
PS: 每次设计的别名只是当前此登录有用 , 但是不推荐自己设计 , 因为有存在污染系统自有的指令池的风险。
4.3解释指令的实质
通过which ls指令的结果我们可以得知,
指令ls的存储信息/usr/bin/ls , 也就是说ls其实是存储在/usr/bin/下的一个文件,
即ls 指令本质是Linux上的一个程序文件, 且该程序文件是可执行文件.exe。
所以其实我们每一个系统的指令都是一个一个存储在系统路径下的一个一个的可执行程序!!!
5cd指令
5.1 cd作用介绍
严谨解释: 切换路径,即将当前工作目录改变到指定的目录下。
用人话说: 就是咱们现在去往哪个目录路径下。
5.2 介绍特定路径符号
cd . | 去往 当前路径 |
cd .. | 去往 当前所处路径的上级目录 |
cd - | 去往 时间上最近去过的路径(可以理解为你最近一次去过的地方) |
cd ~ | 去往 当前用户的工作目录 |
实践验证:
5.3引入系统的存储方式
无论是在Linux操作系统当中,还是Windows操作系统当中,我们都要对文件进行存储管理。
而对于文件的存储结构都无一例外的选用了多叉树结构进行存储。
为什么我们要采用多叉树结构存储 , 解释这个原因我们就要探求为什么要采用路径的方式来寻找文件。
什么是采用路径方式查找文件:
其实就是解决 , 我在哪 , 我是谁的问题。
例如/home/zy/103/practice1/diary.txt , 我在/home/zy/103/practice1/路径下,我是diary.txt。
为什么采用路径方式来定位文件:
因为我们通过采用路径方式所定位到的文件是具有唯一性的! 即找到的文件只能是TA!!!
为什么路径查找的文件具有唯一性:
因为多叉树的特性->在多叉树中,每一个结点,都只有一个父节点!!!
这也解释了我们为什么采用多叉树结构存储文件以及采用路径方式来定位查找文件。
6.touch指令
6.1创建文件作用
直接 touch 不存在的文件名 就可以新建一个不存在的文件名
6.2更新文件时间作用
作用介绍: 如果touch的是一个已经存在的文件名 , 则touch会 更改文档或目录的日期时间,包括存取时间和更改时间。
6.3文件三大时间
6.3.1 stat指令简介
首先我们介绍一下stat指令 , 可以具体查看一个文件的三大时间信息:
6.3.2 touch改变文件三大时间信息
介于篇幅原因 , 后续对于三大时间的介绍 , 我会出博客进行详解 , 本文主要解释touch指令。
7. mkdir指令
作用举例说明:mkdir my_dir -> 在当前目录下创建一个名字为为 “my_dir” 的目录。
同时mkdir带 -p 选项可以创建多级路径
8 rm指令 与 rmdir指令
8.1 rmdir指令
rmdir指令是专门用来删除目录的,且rmdir只能删除空目录。
此外,rmdir还有 -p 选项 , 其作用是
当子目录被删除后如果父目录也变成空目录的话,就连带父目录一起删除。
8.2 rm指令
rm file_dir_name : rm后面跟文件名/目录名可以对之进行删除。
-f选项 : 强制删除 , 即不管该文件所属者,不管任何YesNo提示,进行删除。
-r选项 : 递归删除 , 即删除非空目录包括目录里面的全部文件 , 所需要的选项。
PS:一定要慎重的使用 rm -rf 强制递归删除指令 , 因为我们误操作的可能性是存在的 ,
而且文件的恢复也是比较困难的。
9 man指令
不管我们有任何困难 , 对任何指令、函数、接口有疑问 , 都可以问man这个强大的男人!!!
所以man指令实际上就是Linux下的手册 , 可以方便我们进行相应的查找。
举例说明:man ls 对于Linux系统下普通的指令查找man 2 fork 对于系统调用接口的查找需要带2选项man 3 printf 对于库函数例如C语言库函数的查询需要带3选项
PS: 如果要退出man手册 , 可以按Q键。
10. cp指令
cp -> copy
cp指令的作用是复制文件或目录。
cp filename_dirname destdir
我们用三个例子来说明cp指令的使用:
说明:
1.如果我们需要拷贝非空目录 , 即将目录里面所有的文件都进行拷贝 , 我们需要加-r递归拷贝选项 。 -f选项和rm类似,也是强制进行拷贝(排除提示信息)。
2.cp指令可以进行对于文件/目录的拷贝 , 但是如果我们要同时复制两个或多个文件到某一个目录路径下 , 我们的具体操作是把要拷贝的多个文件排在一起 , 最后一个是拷贝目标路径。
(指定多个文件或目录,若最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。而若最后的目的地并非一个已存在的目录,则会出现错误信息)
11 mv指令
11.1移动文件(剪切)
作用1 : 将该文件或目录移动到目标路径。
mv filename_dirname destdir
11.2文件重命名
作用2: 将一个文件重命名。
mv filename new_filename
12 cat指令
作用 : 查看目标文件的内容cat filename
如果加 -n 选项会显示行号。
tac即cat的反向指令 , 是逆向打印文件的内容。
13 more / less指令
13.1 准备数据源
more/less指令在大型文件的查看中具有无与伦比的优势,
所以为练习more/less指令 , 首先我们需要准备一个较大数据源,以方便我们练习。
Shell脚本语言:
count=0; while [ $count -le 1000 ] ; do echo "yuyulovespicy ${count}"; let count++; done > file.txt
13.2 more/less指令使用说明
该文件file.txt一共有一千多行 , 直接cat查看会直接刷屏 , 而且也并不方便我们查看关键信息,
所以我们用more / less指令进行筛选查看大型文件。
关于选用more还是less
less指令的功能比more指令的功能更为强大且更为齐全。 具体体现在
1.less 的用法比起 more 更灵活。在 more 的时候,我们并没有办法向前面翻 , 只能往下翻看。但若使用 less ,就可以按↑ , ↓ , PgUp , PgDn等键 , 往前往后双向翻看文件,查看一个大文件的内容更方便!2.在 less 里头可以拥有更多的搜索功能,不止可以向下搜,还可以向上搜。所以本文注意选用 less进行讲解 (more的用法类似于less , 只不过缺少部分功能)
13.3 less的使用:
less file.txt 会对file.txt文件进入查看状态操作 , 会暂时先显示文件的一小部分。
可以输入一个数字 , 就会相应的往下翻找多少行
在less查看文件状态下 , 我们可以以 \关键字 向下翻找含有该该关键字的信息
在less查看文件状态下 , 我们还可以以 ?关键字 向上翻找含有该该关键字的信息
无论按 /关键字 向下查找 还是 ?关键字 向上查找来进行搜索内容 ,
事实上 , 出现该关键字的行内容肯定不止一个。
例如: 你向下搜索 \100 含有100关键字的行 , 则1000....1100...2100....3100...4100.............
这些都是搜索到的目标行内容。
这时候我们就可以按键N , 来进行 查找到的 含有关键字的 所有的目标内容 进行逐个翻找 。
举例使用(以 \ 查找为例):
最后 , 如果要退出less查看, 返回原主界面 , 可以按Q键退出。
13.4 less的选项使用表
-i
|
忽略搜索时的大小写
|
-N
|
显示每行的行号
|
/关键字
|
向下搜索该关键字
|
?关键字
|
向上搜索该关键字
|
n
|
重复前一个搜索(与搜索方法
/
或
?
有关)
|
N |
反向重复前一个搜索(与搜索方法
/
或
?
有关)
|
q
| 退出 |
14 head/tail指令
14.1 head
作用: 就是查看到一个文件的开头几行。
head -n filename
看到filename文件的开头前n行
14.2 tail
作用: 就是查看到一个文件的结尾几行。
tail -n filename
看到filename文件的结尾最后n行
14.3 head配合tail使用
单独使用head和tail , 我们就具备了取出一个文件的开头和结尾内容的能力。
只取出文件内容的头和尾似乎还是不够 , 我们如何取出一整个文件的特定中间的几行呢?
这就需要head和tail配合使用了。
思路构建:
举例:要取出file.txt的第200行至210行。
步骤1 我们就可以先使用head取出file.txt的前210行。 [1,210]
步骤2 然后使用tail取出前210行的的后10行。[200,210]
下面我们采用上面的思路 , 然后分别用两个方法进行实现。
PS:这里涉及重定向的知识 , 如果不了解重定向 , 可以先去看下方14.4的重定向介绍。
采用文件方式取出:
采用管道方式取出:
14.4 重定向介绍
14.4.1 输出重定向
我们首先介绍一下echo指令:
echo string
echo会将输入的字符串送往标准输出。 //其实就是打印到屏幕上
输出重定向讲解-> 将本来应该显示到显示器上的内容,重定向写入到目标文件当中
输出重定向 -> 若重定向到的目标文件不存在,则会先自动创建该目标文件
(可以用流这个概念来帮助理解重定向 , 但是事实上这两个概念并不是一回事)
下面我们演示输出重定向:
14.4.2 追加重定向
我们通过一个例子对比一下输出重定向和追加重定向:
14.4.3 输入重定向
我们重新看一下cat指令 , 根据之前所学 , 我们知道cat file的含义是将file文件打印到屏幕上。
而不带参数的cat , 就是默认从键盘即标准输入中读取内容 , 即从标准输入中读取内容 , 再打印到屏幕当中。
输入重定向 -> 将本来应该手动键盘标准输入的内容,使用新文件重定向来进行代替。
所以下面示例 , 本来cat应该是将键盘输入的内容进行打印 , 而变成了将diary内容进行打印。
14.4.4 管道 | 介绍
根据刚才对于重定向的介绍, 我们可以简单的理解重定向就是
将 一个本应输入到的地方 或 本应进行输入的一个地方 进行重定向更换
(打印到屏幕(标准输出) --> note.txt 从键盘输入(标准输入) --> diary.txt)
事实上 , 管道就是一种重定向。
我们首先从概念上理解管道:
理解1:
在现实世界中 , 管道其实是一种传输资源的东西 , 例如水资源,石油资源的传输都依赖管道
在计算机中 , 最重要的资源其实是数据资源 , 所以计算机中管道是用来传输数据资源的桥梁
理解2:
管道是两端开口的 , 计算机中的管道也是这样。
一个方向负责传输 , 一个方向负责接收处理。
从这个意义上来说 , 我们也可以将管道理解为工厂的流水线 , 分步一个个步骤处理。
下面我们通过一个例子来理解管道:
15 date指令
15.1 date的作用
date指令能以自定义的形式查看现在的时间
date指令可以查看时间戳以及翻译时间戳
15.2 时间戳介绍
时间戳的定义:
时间戳是指格林威治时间自1970年1月1日(00:00:00 GMT)至当前时间的总秒数。
举两个例子:
例一:
如果时间戳是0 , 则现在的时间就是距离格林威治时间1970-01-01: 00:00:00的时间差就是0s,
所以现在的时间就是1970-01-01:00:00:00, 北京东八区 , 所以时间为1970-01-01: 08:00:00。
例二:
如果时间现在是1949-10-01:15:00:00, 距离1970-01-01: 00:00:00的时间差是639075600s,
所以639075600这个时间戳 , 就是代表了1949-10-01:15:00:00。
时间戳存在的意义:
时间戳是一份能够表示 [一份数据 在一个特定时间点 [ 已经存在的 完整的 可验证 ] 的数据。
(上面的解释太晦涩 , 其实时间戳的意义就是标记每时每刻的时间 , 进而标记每一件事情)
举一个生动形象的例子:
话说 , 常凯申小朋友是一个好孩子 , 他有每天写日记的好习惯 , 据说后面都把日记整理成书了
(开个玩笑 , 回到正题) , 有一天常凯申小朋友趁着爸爸妈妈不在家的时候 , 偷偷离家出走了。
这可急坏了他的爸爸妈妈 , 不过好歹他爸妈找到了常凯申小朋友那一叠厚厚的日记本 !!!
那这里就有一个问题 爸爸妈妈翻看日记是从前往后翻,还是从后往前翻呢?
当然是从最后最近一次写的日记往前翻 , 不可能从几年之前写的日记开始往后翻啊 , 我们要查看的必是最近一段时间常凯申小朋友身上发生了什么事情 , 他最后一次写日记的时间 ,
从而获取他的出走动因信息。
事实上 , 我们通过上面常凯申日记这个例子 , 就可以不难理解 ,
日记的作用 : 标记你什么时候离家出走 以及 为什么离家出走
而现实中, 程序员们也需要对各个程序打日志 , 这里的日志作用其实就是日记的作用。
日志的作用 : 标记程序什么时候挂了 以及 在哪里挂了 为什么程序挂了 等程序的运行信息
16. cal指令
作用 : cal命令可以显示阳历日历。
17. find指令
作用解释 : 在目录结构中根据用户设定的条件来搜索文件。
我们此篇博客以根据文件名字来find文件。
find where -name filename
从where哪个路径里面找 , 要找的文件名字name是filename。
直接举实际例子来说明:
18. grep指令
在Linux操作系统当中 , 有文本处理三剑客的传说 , 他们分别是 sed , awk , grep 。
接下来我们解释文本处理的第一个工具 - grep 。
18.1 grep的使用
作用介绍 :
可以称grep为行过滤工具 , 其作用就是根据用户输入的关键字 , 将文件中与该关键字相关的行都过滤显示出来 , 然后写入打印到屏幕当中。
grep -选项 关键字 文件名
下面我们结合管道|的知识 , 用实例来说明grep的实际用法:
PS : ----以file.txt为例 , 即我们通过如下指令准备的数据源
count=0; while [ $count -le 1000 ] ; do echo "yuyulovespicy ${count}"; let count++; done > file.txt
18.2 grep的选项使用
-i | 搜索关键字时忽略大小写的不同,所以大小写视为相同 [忽略大小写] |
-n | 顺便将过滤出的行的行号也显示出来 [打印行号] |
-v | 反向选择,即显示出没有 '搜索字符串' 内容的行 [补集] |
-a | 将bin二进制文件以 ext文本文件的方式搜寻数据 |
-c | 计算找到 '搜寻字符串' 的次数 |
我们着重介绍使用较多的 -i -n -v选项的实际应用:
19. zip/unzip指令
zip作用 : 将目录或文件压缩成.zip的文件。
zip name.zip filename/dirname
PS: 如果要压缩的是一个非空目录 , zip需要携带 -r 递归压缩选项。
unzip作用 : 解压出.zip文件里面的内容。
unzip file.zip
PS: 如果向指定解压出来的文件到哪个位置 , 这时候需要-d选项 , 即在末尾加 -d destpath。
20. tar指令
20.1 tar指令选项表
-c | 表示要创建一个压缩文件的参数指令 (create) |
-x | 表示要解开一个压缩文件的参数指令 |
-z | 使用zip算法 压缩/解压 #用 gzip 工具压缩 |
-j | 使用zip算法 压缩/解压 #用 bzip2 工具压缩 |
-v | 显示具体的压缩解压过程 |
-f | 必选参数,后跟指定要操作的文件名 |
-C | 后跟指定的解压路径 |
20.2 tar指令的使用
只看选项表并不能掌握tar的使用 , 下面让我们在实际中运用tar指令。
20.3 压缩和打包概念区别
说明 :
我们有两个指令 , 分别是 zip/unzip 和 tar 指令
我们有两对概念 , 分别是 压缩<>解压 以及 打包<>解包
zip/unzip 分别是完成 压缩/解压 的指令。
tar指令通过携带不同的选项 , 可以进行 压缩/解压 , 也可以进行 打包/解包。
再来区分 压缩<>解压 和 打包<>解包 这两个概念:
举一个现实生活中的例子进行理解:
就是说我们第一次出远门去上大学的时候 , 总是要收拾行李 , 然后背着尿素大麻袋行走天下!
开个玩笑 , 反正咱就是针对装行李这件事情, 你在家里装行李的时候 , 你和具备丰富装行李经验的爹娘对比 , 同一个行李箱 , 你们所能装的东西多少其实差别是巨大的 , 也就是说 , 你装不进去的行李 , 你爹娘总能极致压缩利用空间 , 从而把行李全都装进去。
(先塞软的行李-再塞硬的行李 , 把毛巾塞入牙缸 , 把衬衫衣物对折压缩 ......)
父母极致压缩空间装行李的行为 , 其实就是压缩。
你拉跨的直接将行李乱放 , 浪费空间装行李的行为 , 其实就是打包。
21. bc指令
bc实际上就是Linux中的计算器。一个较为简单的指令。直接看使用实例:
22. uname指令
作用: uname 用来获取电脑和操作系统的相关信息。
选项: -a详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类
型,硬件平台类型,操作系统名称
23. 重要热键
Tab键: 自 动补齐
Ctrl+C: 退出该指令
Ctrl+D: 退出用户/XShell
Ctrl+R: 关键字 寻找历史指令