Linux下的基本指令
前言
在之前的学习中,我们已经掌握了一些Linux的指令,包括如何创建删除文件,如何切换转移目录等。接下来,我们将继续深入,学习Linux剩下的一些基本指令。
1.cat
1.语法:
cat [选项] [文件名]
2.功能:
查看目标文件的内容。
3.常用选项:
- -b 对非空行输出行编号
- -n 对输出的所有行编号
- -s 不输出多行空行(多个行空行合并为一行)
4.使用:
1)测试-b选项:
2)测试-n选项:
3)测试-s选项:
4)测试合并选项-sb:
5)测试合并选项-ns:
6)当b和n选项组合时,系统只使用b选项(给非空行编号)的功能。
5.cat的原理:
我们先来看一个命令:在命令行输入cat,然后直接按回车
可以发现,我们用键盘输入什么,再按回车,显示器就输出什么。这里,我们可以将cat的作用理解为,从键盘上读入数据,然后直接输出到显示器上。
6.cat的缺点:无法有效查看内容过多的文件
现在,我们用一段脚本(直接打在命令行上):cnt=0; while [ $cnt -le 10000 ]; do echo "hello Linux, $cnt"; let cnt++; done > test.txt
来生成一个大文件。
cnt
可以理解为一个变量,初始值是0;-le
表示小于等于,while [ $cnt - le 10000]
意思是当cnt小于等于10000,循环执行;do
后面是每一次循环做的事情,打印一次hello Linux,后面跟上当前的打印次数(cnt的值);let cnt++
意思是每一次循环结束后让cnt++
;done
表示程序结束。- 最后再使用输出重定向,把生成的内容输出到
test.txt
这个文件中。(如果不加写后面输出重定向的内容,就会把这一万行的内容输出到显示器上)
这时,如果我们用cat命令去查看这个文件,会直接刷屏,直到刷到文件末尾。
我们如果想查看具体的某一行的内容,就会变的很不友好,所以cat不适合用来查看内容太多的文件。
2.more
1.语法:
more [选项] [文件]
2.功能:
-
查看文件内容。
-
与cat不同,more在遇到大文件时,不会刷屏,在显示器上打满一页内容就不往下打了,按回车键可以查看下一行。
-
但遗憾的是,使用more查看文件时只能下翻,不能上翻,所以我们一般也不使用more,而是用另一个命令(less)替代。
3.选项:
- -n:对输出的所有行编号
- q:在查看文件的状态下,输入q,可以退出more
4.使用:
依然先使用脚本:cnt=0; while [ $cnt -le 10000 ]; do echo "hello Linux, $cnt"; let cnt++; done > test.txt
,生成一个有一万行内容的文件。使用more查看这个文件:
more命令不方便,我们一般不用,不再详细介绍了。
3.less(重要)
less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大。
less 的用法比起 more 更加的有弹性。在 more 的时候,我们并没有办法向前面翻, 只能往后面看。但若使用了 less 时,就可以使用 [pageup][pagedown] 等按键(就是键盘上的上下箭头)的功能来往前往后翻看文件,更容易用来查看一个文件的内容!
除此之外,在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。
1.语法:
less [参数] [文件]
2.功能:
less与more类似,但使用less可以随意浏览文件,而more仅能向前移动,却不能向后移动,而且less在查看之前不会加载整个文件。
3.选项:
- -i: 忽略搜索时的大小写
- -N: 显示每行的行号
- /字符串:向下搜索“字符串”的功能
- ?字符串:向上搜索“字符串”的功能
- n:重复前一个搜索(与 / 或 ? 有关)
- N:反向重复前一个搜索(与 / 或 ? 有关)
- q: quit,退出
4.使用:
例子中使用的test.txt
文件还是利用上述脚本生成的文件。
1)不加任何选项:
2)提供关键字搜索:
3)使用选项-N,显示每行行号:
4.head
head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然就是看档案的结尾的。
1.语法:
head [参数] [文件]
2.选项:
- -n<行数>:选择的行数
3.使用:
5.tail
tail 命令从指定点开始将文件写到标准输出。使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename
会把filename里最尾部的内容显示在屏幕上,并且不断刷新,使你看到最新的文件内容。
1.语法:
tail [参数] [文件]
2.选项:
- -f: 循环读取
- -n<行数>: 显示行数
3.使用:
4.小实验:如何获取一段文本中间的一段内容?
获取test.txt
中300到400行的内容。
先把test.txt
中的前400行内容拿出来,放在一个临时文件tmp.txt
中;再把这个临时文件中的后100行拿出来,输出到显示器上:
这样的方式太过冗余,还需要创建一个新的临时文件,不推荐。下面介绍一个管道符:|
,用这个命令来实现上述功能:
|
符的作用是,将前|
前面命令执行输出的内容作为参数,传递给后面的命令。
如图,命令:head -400 test.txt | tail -100
也获取到了300行到400行之间的内容。下面,我们来解析一下:
首先,
head -400 test.txt
获取了前400行的内容,然后将这400行内容作为参数,传递给了命令:tail -100
,又截取了这400行内容的后100行内容。这里|
的作用就类似于一个临时文件,用来临时存放数据,并且具有传递功能,还可以将数据传递给后一个命令。
5.再补充几个命令:
1)wc命令:统计文件的字符数和行数
2)uniq命令:对原始文件进行压缩,合并相同行
注意:uniq
并不会修改文件。
3)sort命令:对文件内容进行排序
4)上述三个命令均可以结合|
使用:
6.时间相关的命令
6.1date
1.date的用法:
date [OPTION]… [+FORMAT]
2.在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中常用的标记列表如下:
- %H : 小时(00-23)
- %M : 分钟(00-59)
- %S : 秒(00-59)
- %X : 相当于 %H:%M:%S
- %d : 日 (01-31)
- %m : 月份 (01-12)
- %Y : 完整年份
- %F : 相当于 %Y-%m-%d
3.使用:
6.2时间戳
1.引入:
统一的时间重要吗?如果没有了一个时间标准,这个世界会变成什么样子?
我们来设想一个场景,你2023年9月16日向银行贷款,分20年还清。可是银行系统的时间出了问题,显示你2003年9月17日向银行贷款,要求你明天还钱。再举一个例子,在跨国贸易中,你与商家约定2点准时交接货物,可以你们两个的两点不是一个两点,是两个完全不同的时间,导致货物交接失败。
由此可见,统一的时间十分重要。
2.时间戳的诞生:
在1970年1月1日的格林,时间戳问世,全世界就计算机领域制定了一个统一的时间,它代表从1970年1月1日午夜开始所经过的秒数。
3.查看时间戳:
使用命令:date +-%s
查看时间戳:
可以发现,时间戳每一秒都不一样,所以时间戳具有唯一性。
6.3时间的设置:
date -s
//设置当前时间,只有root权限才能设置,其他只能查看。date -s 20080523
//把年月日设置成2008年05月23日,这样会把具体时间设置成空00:00:00date -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″
//这样可以设置全部时间
使用实例:
7.cal指令
cal命令可以用来显示公历(阳历)日历。公历是现在国际通用的历法,又称格列历,通称阳历。“阳历”又名“太阳历”,系以地球绕行太阳一周为一年,为西方各国所通用,故又名“西历”。
1.语法:
cal [选项] [月份] [年份]
2.功能:
用于查看日历等时间信息,如只有一个参数,则表示年份(1-9999),如有两个参数,则表示月份和年份。
3.选项:
-3
: 显示系统前一个月,当前月,下一个月的月历-j
: 显示在当年中的第几天(一年日期按天算,从1月1号算起,默认显示当前月在一年中的天数)-y
: 显示当前年份的日历
4.使用:
1)cal后面跟一个参数:
2)cal后不跟参数:
3)-3选项,打印相邻的前后两月:
4)给两个参数:
5)-j选项,显示当前是该年的多少天:
8.find指令(很重要)-name
- Linux下find命令在目录结构中搜索文件,并执行指定的操作。
- Linux下find命令提供了相当多的查找条件,功能很强大。由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下。
- 即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,只你具有相应的权限。
- 在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指30G字节以上的文件系统)。
1.语法:
find [路径] [选项] [文件名]
2.功能:
用于在文件树中查找文件,并作出相应的处理(可能访问磁盘)。
3.常用选项:
-name
: 按照文件名查找文件。(现阶段,我们只需要掌握这一个选项即可)
4.使用:
在root
路径下查找一个叫log.c
的文件:
如果不写路径,默认会在当前路径下查找。
5.补充另外几个查找选项:
1)which
指令:
一个专门用来查找命令所在文件的指令。
2)whereis
指令:
一个查文档的指令。
我们使用whereis
来查找ls,找到了一个可执行程序,两个压缩包。
9.grep
行过滤工具
1.语法:
grep [选项] 搜寻字符串 文件
2.功能:
在文件中搜索字符,将找到的行打印出来。
3.选项:
-i
:忽略大小写的不同,将大小写字母视为相同的字母-n
:顺便输出行号-v
:反向选择,亦即显示出没有 ‘搜寻字符串’ 内容的行
4.使用:
我们还是用之前的脚本(次脚本为讲cat时用到的脚本,没有在Linux上输入过是搜索不到的)生成一个大文件来做实验。这里介绍一个热键ctrl+r
,搜索之前用过的指令:
先按
ctrl+r
进入搜索模式:
直接输入while:
跳出之前使用过的脚本,直接按回车,再次使用,在当前目录下,又生成了一个10000行的大文件。
1)不加任何选项,直接使用grep
搜索含999的行:
2)使用-n
选项,显示行号:
3)在多个文件中,按字符搜索行:
5.补充:
我们为什么可以上翻下翻,搜索历史命令?这是因为,这些历史命令,都被系统储存了起来,可以使用命令history
查看:
还可以结合grep
使用:
10.zip/unzip
1.语法:
zip 压缩文件.zip 目录或文件
2.功能:
将文件或目录压缩为zip格式。
3.选项:
-r
:递归处理,将指定目录下的所有子文件和目录一并处理
4.使用:
1)不加任何选项,使用zip:
思考:不加任何选项,有没有什么问题?
我们发现,不加任何选项,zip
指令只是把指定目录下的所有文件给压缩了,而子目录中的内容并没有压缩,解压缩只生成了一个空目录。要想解决这个问题,就要用到选项-r
。
2)使用选项-r
:
目前为止,zip
命令的使用已经可以满足我们日常的工作需要了,但是unzip
还是略显麻烦,我们能不能将压缩文件直接解压缩到指定文件呢?
3)使用-d
选项,解压缩到指令目录:
11.tar(重要):打包/解包
1.语法:
tar [选项] 文件与目录 …参数
2.常见选项:
-c
:建立一个压缩文件的参数指令(create 的意思);
-x
:解开一个压缩文件的参数指令!
-t
:查看 tarfile 里面的文件!
-z
:是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-j
:是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
-v
:压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f
:使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
-C
: 解压到指定目录
3.使用:
1)使用选项-czf
进行压缩:
-c
选项代表创建一个压缩文件,-z
选项表示文件的压缩属性,格式为gzip格式,-f
表示给压缩文件命名。
这三个参数经常在一起使用,只要掌握了这三个参数,就可以解决大部分的压缩情况。
.tgz
属性其实是.tar.gz
属性的简写。
2)使用选项-xzf
解压缩文件:
3)使用选项-C
,将文件解压缩到指定目录:
12.bc
bc命令,相当于是一个命令行级别的计算器:
单纯从计算的角度看,这个命令确实有点弱。它真正的用途是结合管道使用:
13.uname
1.语法:
uname [选项]
2.功能:
用来获取电脑和操作系统的相关信息。
3.常见选项:
-a
:a或–all 详细输出所有信息
-r
:只输出内核版本号
4.使用:
1)使用-a
选项查看所有信息:
内容包括:
- 系统类型
Linux
表示当前系统的类型是Linux,也就是当前系统的操作系统。
- 主机名
localhost.localdomain
表示当前系统的主机名,即系统在网络上的标识。该名字由系统管理员设置。
- 内核版本号
3.10.0-514.el7.x86_64
表示当前操作系统的内核版本号。内核版本号由几个部分组成:主版本号、次版本号、修订版本号和其他版本号等。由点分隔。
- 编译时间
#1 SMP Tue Nov 22 16:42:41 UTC 2016
#后面的是当前操作系统内核的构建版本,其中包含构建日期和时间的信息。
- 硬件架构
x86_64 x86_64 x86_64
表示硬件架构,即当前系统使用的处理器的类型,也是系统所支持的最大处理器类型。三个x86_64分别代表处理器架构,操作系统类型,软件环境。
- 操作系统名称
GNU/Linux
显示当前系统所使用的操作系统的名称,这里是Linux操作系统。
2)使用-r
选项只查看版本号:
5.补充:
通过命令:cat /etc/redhat-release
查看发行版本
14.重要的几个热键[Tab],[ctrl]-c, [ctrl]-d, [ctrl]-r
[Tab]
:具有『命令补全』和『档案补齐』的功能[Ctrl]-c
:让当前的程序『停掉』[Ctrl]-d
:通常代表着:『键盘输入结束(End Of File, EOF 戒 End OfInput)』的意思;另外,他也可以用来退出Xshell连接[Ctrl]-r
:搜索历史命令
15.shutdown
1.语法:
shutdown [选项]
2.常用选项:
-h
: 将系统的服务停掉后,立即关机。
-r
: 在将系统的服务停掉之后就重新启动
-t sec
: -t 后面加秒数,亦即『过几秒后关机』的意思
16.命令拓展
- 安装和登录命令:
login
、shutdown
、halt
、reboot
、install
、mount
、umount
、chsh
、exit
、last
- 文件处理命令:
file
、mkdir
、grep
、dd
、find
、mv
、ls
、diff
、cat
、ln
- 系统管理相关命令:
df
、top
、free
、quota
、at
、lp
、adduser
、groupadd
、kill
、crontab
- 网络操作命令:
ifconfig
、ip
、ping
、netstat
、telnet
、ftp
、route
、rlogin
、rcp
、finger
、mail
、nslookup
- 系统安全相关命令:
passwd
、su
、umask
、chgrp
、chmod
、chown
、chattr
、sudo ps
、who
- 其它命令:
tar
、unzip
、gunzip
、unarj
、mtools
、man
、unendcode
、uudecode
以上这些命令,可以当做拓展学习,自行上网了解它们的功能和用法,这里就不再一一赘述了。
总结
至此,我们已经学完了Linux中的所有基本的,常见的指令。掌握了这些指令,我们就可以解决Linux中大部分的操作问题了。接下来,我们将进入Linux权限的学习,去探索Linux中权限的奥秘。
谢谢观看,谢谢大家的支持!