Linux基本指令(下)
1.Linux
在Linux系统中一切皆是文件,我们新建的文件、键盘、显示器等皆是文件,所以使用scanf/cin获取键盘输入信息和printf/cout向屏幕上输出信息,这一切的本质其实就是文件操作,而文件操作文件必须被先打开,所以这些设备文件在访问之前,也必须被打开。
1.1echo指令和printf指令
echo指令用法:echo 数据,该指令默认将数据打印到显示器上,本质其实就是将数据写入显示器这个文件中。
echo后面的数据可以用双引号/单引号或者不加引号,大多数场景都是使用双引号的,其他用到的很少;
不使用双引号的:echo $PATH,这个用来输出环境变量的值; echo *txt输出匹配的文件名;
其他你要输出字符串,就使用双引号的就行;单引号几乎用不到
printf指令与其差不多,但echo会自己换行,printf需手动加
1.2重定向操作符
1.2.1输出重定向操作符 > 和输入重定向符 <
刚才我们说过echo默认是向显示器这个文件中写入数据,但其实echo也可以向其他文件中写入数据,如下:
我们发现,我们可以将数据写入到 hello.txt 这个目标文件中,然后我们再次写入,我们可以看出,exho写入数据之前会将文件中原本的内容清空,然后写入。我们还可以发现,如果目标文件不存在,他会创造一个文件出来。
1.2.2追加操作符>>
输出重定向操作符 > 会清空目标文件中的内容,追加操作符不会清空,会在原数据后追加数据
1.2.3终端本质也是文件
我们使用的Linux终端其实也是一个文件,如下图,终端也是一个文件,它在/dev/pts这个路径下,当我们只开一个终端的时候,这个路径下只有一个数字名文件,再开一个,我们发现多了一个数字名文件,而这些以数字名命名的文件其实就是我们的终端,我们打开一个终端他就会创建一个文件。
那既然终端也是个文件,echo又可以把数据通过输出重定向符向其他文件写入数据,那我们是不是可以利用这个来模拟实现微信的收发消息?是的,可以。
2.文件类型
Linux中判断文件的类型不看文件后缀,如 .txt / .c,我们需要查看文件的属性才能知晓。
如下,我们可以根据文件第一个类型属性进行辨别。
d:目录文件
-:普通文件
c:字符文件
b:块设备文件
l:连接文件
p:管道文件
但是,系统不观心文件后缀,不代表工具(gcc)不观心。
3.mv指令
mv命令是move的缩写,可以⽤来移动⽂件或者将⽂件改名(move(rename)files,经常⽤来备份⽂件或者⽬录
语法mv [选项] 源⽂件或⽬录 ⽬标⽂件或⽬录
常⽤选项:
• -f:force强制的意思,如果⽬标⽂件已经存在,不会询问⽽直接覆盖
• -i:若⽬标⽂件(destination)已经存在时,就会询问是否覆盖!
如果目标文件存在,则是移动文件,源文件是目录的时候,则整体移动,此时目标文件也得是目录才能移动。目标文件不存在,则是文件改名。
4.cat指令
语法: cat [选项] [⽂件]
功能:查看⽬标⽂件的内容
常⽤选项:
• -b对⾮空输出⾏编号
• -n对输出的所有⾏编号
• -s不输出多⾏空⾏
cat指令可以读取文件中的内容,cat后面更文件的话可以读取文件中的内容,和在中间加上输入重定向操作符 < 的结果一样,如果cat后面不加文件,默认读取键盘上的内容,即读取键盘这个设备文件。
cat -n对输出的所有⾏进行编号
5.tac指令
tac指令与cat指令一样,但区别是会方向输出文件中的内容
6.more指令
语法: more [选项]
功能:more命令,功能类似cat
常⽤选项:
• -n指定输出⾏数
• q退出more
一般我们会使用more指令查看存在大量数据的文件,如系统日志。
他会显示文件展示进度,按键盘下键可以向下继续查看文件内容,按q退出查看。
缺点:不能向上看。
7.less指令
• less⼯具也是对⽂件或其它输出进⾏分⻚显⽰的⼯具,应该说是linux正统查看⽂件内容的⼯具,功能极其强⼤
• less的⽤法⽐起more更加的有弹性,在more的时候,我们并没有办法向前⾯翻,只能往后⾯看
• 但若使⽤了less时,就可以使⽤[pageup][pagedown]等按键的功能来往前往后翻看⽂件,更容易⽤来查看⼀个⽂件的内容
• 除此之外,在less⾥头可以拥有更多的搜索功能,不⽌可以向下搜,也可以向上搜。
语法: less [参数] ⽂件
功能:less与more类似,但使⽤less可以随意浏览⽂件,⽽more仅能向前移动,却不能向后移动,⽽且less在查看之前不会加载整个⽂件。
选项:
• -i忽略搜索时的⼤⼩写
• -N显⽰每⾏的⾏号
• /字符串:向下搜索“字符串”的功能
• ?字符串:向上搜索“字符串”的功能
• n:重复前⼀个搜索(与/或?有关)
• N:反向重复前⼀个搜索(与/或?有关)
• q:quit
less指令和more指令一样,less可以向上查看,弥补了more的这一缺点。我们还可以使用 /字符串 查找文件中我们想要的内容,可以按 n 查找下一个包含此关键字的内容。比如我使用 /101 查找101字符串,他会跳转至此,并标黑显示。
8.head指令和tail指令
8.1head指令
head与tail就像它的名字⼀样的浅显易懂,它是⽤来显⽰开头或结尾某个数量的⽂字区块,head⽤来显⽰档案的开头⾄标准输出中,⽽tail想当然尔就是看档案的结尾。
语法:
head [参数]…[⽂件]…
功能:
head⽤来显⽰档案的开头⾄标准输出中,默认head命令打印其相应⽂件的开头10⾏。
选项:
• -n<⾏数>显⽰的⾏数
默认最多展示10行,可根据 -n 展示指定行数。
8.2tail指令
tail命令从指定点开始将⽂件写到标准输出.使⽤tail命令的-f选项可以⽅便的查阅正在改变的⽇志⽂件,tail -f filename会把filename⾥最尾部的内容显⽰在屏幕上,并且不断刷新,使你看到最新的⽂件内容.
语法: tail 必要参数 [⽂件]
功能:⽤于显⽰指定⽂件末尾内容,不指定⽂件时,作为输⼊信息进⾏处理。常⽤查看⽇志⽂件。
选项:
• -f循环读取
• -n<⾏数> 显⽰⾏数
默认最多展示10行,可根据 -n 展示指定行数。
8.3管道符 |
在 Linux 中,管道符 | 的核心作用是连接多个命令,将前一个命令的标准输出(stdout)作为后一个命令的标准输入(stdin),实现命令间的数据传递和协同处理。
因为不管是cat、tac、head、tail。我们都只能看见开头或者结尾的内容,如果一个文件中的内容特别多,我们向查看文件中间的内容就显得比较困难,而利用管道符就可以解决这一问题。
比如:现在我有一个 log.txt 文件,里面有1000行内容,我们想查看第501行至510行的内容,我们就可以这样做。
9.date指令
指定格式显⽰时间: date +%Y:%m:%d
⽤法: date [OPTION]… [+FORMAT]
- 在显⽰⽅⾯,使⽤者可以设定欲显⽰的格式,格式设定为⼀个加号后接数个标记,其中常⽤的标记
列表如下
• %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 - 在设定时间⽅⾯• 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″ //这样可以设置全部时间 - 时间戳
• 时间->时间戳:date+%s
• 时间戳->时间:date-d@1508749502
• Unix时间戳(英⽂Unix epoch,Unix time,POSIX time或Unix timestamp)是从1970年1⽉1⽇(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒
注意,+和后面的%(选项)之间不能有空格。
10.cal指令
cal命令可以⽤来显⽰公历(阳历)⽇历。公历是现在国际通⽤的历法,⼜称格列历,通称阳历。“阳历”⼜名“太阳历”,系以地球绕⾏太阳⼀周为⼀年,为西⽅各国所通⽤,故⼜名“西历”。
命令格式: cal 参数 [年份]
功能:⽤于查看⽇历等时间信息,如只有⼀个参数,则表⽰年份(1-9999),如有两个参数,则表⽰⽉份和年份
常⽤选项:
• -3显⽰系统前⼀个⽉,当前⽉,下⼀个⽉的⽉历
• -j显⽰在当年中的第⼏天(⼀年⽇期按天算,从1⽉1号算起,默认显⽰当前⽉在⼀年中的天数)
• -y显⽰当前年份的⽇历
• cal 年份显示该年日历
11.which指令
功能:搜索系统指定的命令
只会去/usr/bin/目录下查找命令。
12.whereis指令
功能:⽤于找到程序的源、⼆进制⽂件或⼿册
它不仅能查找可执行文件,还能查找文件的帮助文档、源代码文件等。它会在一些特定的系统目录(如 /bin、/sbin、/usr/bin、/usr/sbin、/usr/share/man 等)中进行搜索。
13.find指令
• Linux下find命令在⽬录结构中搜索⽂件,并执⾏指定的操作。
• Linux下find命令提供了相当多的查找条件,功能很强⼤。由于find具有强⼤的功能,所以它的选项也很多,其中⼤部分选项都值得我们花时间来了解⼀下。
• 即使系统中含有⽹络⽂件系统(NFS),find命令在该⽂件系统中同样有效,只你具有相应的权限。
• 在运⾏⼀个⾮常消耗资源的find命令时,很多⼈都倾向于把它放在后台执⾏,因为遍历⼀个⼤的⽂件系统可能会花费很⻓的时间(这⾥是指30G字节以上的⽂件系统)。
语法: find pathname -options
功能:⽤于在⽂件树中查找⽂件,并作出相应的处理(可能访问磁盘)
常⽤选项
• -name按照⽂件名查找⽂件
• 其他选项需要在查,这个命令其实⽐较复杂
由于需要遍历大量的文件和目录,查找速度可能会比较慢。
14.alias指令
功能:设置命令的别名
如下:redir是个可执行程序文件,使用alias起一个go别名。
使用alias指令起的别名,关闭终端后再打开,别名就消失了。