Linux指令和权限(10-3)
部分指令和权限
一丶指令
1.echo
echo的基础作用向显示器输出。作用类似于C语言的printf,C++的cout。
1.1 echo 输入内容 – 会显示输出到屏幕的下一行
echo "hello Linux"
1.2 echo 输入内容>目标文件 – 向目标文件输出内容(输出重定向)
原本echo是向屏幕输出的,但是我们指定了它的输出位置,这就是输出重定向。
重定向:将原本数据输出的默认位置修改输出到指定输出位置。
若目标文件不存在,则会先创建同名文件,然后再向其中输出。
2.输出重定向符号>
2.1 使用>来创建空文件
此外,还可以直接使用>符号来创建文件。
>符号是输出重定向符号,其符号左侧的是重定向的内容,右侧是重定向的目标。
> test.txt
表示将空内容重定向输出到test.txt文件中。
被创建的文件是普通的文件,并不是文件夹。
2.2 使用>符号来清空原始文件内容
此外,输出重定向是一种覆盖式输出,每次都会从头开始写,写前会将原始内容进行清空。
这也意味着,我们可以使用>符号来清空原文件的所有内容。
>单独去使用时,符号前面是不能加输出内容的,前面只能 是空白的。
3.追加重定向符号>>
>>符号为追加重定向符号,其作用是在文件尾部追加内容。
>>符号两边加空格时,有时候会因为前面的输出内容而解析失败,就如上图一样,所以最好别加上空格。
此外,echo和>>符号配合进行追加写入时,默认是在写入的内容后带换行符的。
不想带换行符时,可以换一个shell指令:printf。
4. 输入重定向<
4.1 cat
先了解一下cat,cat的基本作用是从键盘中读入键盘输入的内容,就是获取键盘的输入。
输入后键入enter,将输出到屏幕上。
cat会不断获取键盘输入,直至Ctrl + C终止输入。
4.2 输入重定向符号<
在Xshell中默认的获取输入是从键盘获取。
可以利用>进行输入的重定向。
>符号后跟目标文件,表示从目标文件中获取输入内容。
> 目标文件
我们和cat配合使用:
这里的输入重定向符号可以省略,作用是一样的。
5.细琐的小知识点
5.1 Ctrl + R 进行指令的历史搜索功能
在该功能下,输入指令的某些片段 可以快速获取输入历史。
5.2 关于内容较长的文件显示
Linux万物皆为文件,我们的显示器,键盘,也相当于是文件。
我们上节课学到,cat只能显示一些内容较短的文件,当内容较长时,cat只能显示占最后一页的内容。
假设此时我们想看开头的内容,是看不到的。Linux的界面不想Windows的界面一样,可以使用滑轮进行滚动和翻页。
Linux只能显示当前页的内容,过去的内容不在当页就不能显示了。
当然,我们的Xshell是可以的哈~
这里介绍几个命令,来解决内容较长的显示问题。
6.more和less
6.1 more
more < 目标文件 – more 获取目标文件的输入
more比cat多的作用是:more初始显示的是文件内容的第一页,那么文件内容较长时,可以使用enter键来实现向下滚动的功能。
但是,鸡肋的一点是,more只能通过enter来实现向下滑动,无法实现向上滑动。
还可以在more页面的下栏中输入 \ 和 搜索内容的关键字。enter后可以直接跳转到首次出现关键字内容处。
在more页面下,在键入要搜索的关键字后,也可以按n来实现与关键字有关内容页的翻页。
6.2 less
less用法和more一致,并且在more原本的功能上,添加了上下键向上翻滚和向下翻滚的功能。
因此,一般情况下来在屏幕上获取较长文件的输入时,使用less较宜。
还可以less页面的下栏中输入 \ 和 搜索内容的关键字。enter后可以直接跳转到首次出现关键字内容处。比more更好的时,它会显示关键字高亮。
在less页面下,再键入要搜索的关键字后,也可以按n,和more不同的是,它的作用是下滚,不是翻页,来帮助我们匹配关键字。
上述的功能退出按键是:q。
7.head和tail以及管道
7.1 head
head < 目标文件 – 获取目标文件的部分输入
默认不指定行参数的情况下是显示前十行的内容。
指定行参数:head -n (数字) 目标文件 – 指定获取目标文件的前数字行文件内容
7.2 tail
tail和head用法一致,这里不做赘述。
head和tail在获取完输入后,还可以在其后追添输出重定向操作符来进行输出重定向,这和C++中的输出输入代码链是一个道理。
7.3 管道
假设我们要获取log.txt文件中行号为[5000, 5020]的内容,该如何呢?
利用管道来实现:
那么其中的 “ | ”符号就是管道。
head -5020 log.txt | tail -21
这串shell命令行的意思是:把左侧内容的输出写入到管道中,右侧命令将管道作为数据源,从管道中读取输入。
管道的作用就可以将左侧命令的执行结果作为右侧命令的执行数据源,进而来做加工处理。
管道也是一种文件。
管道可以进行链式编程。
wc -l – 统计行的行数
wc – 统计行数 单词数 字节数(字符数)
8.date
8.1 shell下显示时间
date显示当前时间
分隔符可以自行指定。
想让空格作为分隔符,需要转义字符\。
8.2 时间戳
时间戳转换到时间:
9. cal
cal用于显式当前的日历。
10. find和which
10.1 find
find 路径 -name 文件名称 – 在指定路径下按文件名来查找相关文件
可以用-o来连接查找的条件,且满足链式。
o表示 “or” ,或者。
10.2 which
which用于查找指令的所在路径。
which 指令 – 按层次结构在显示屏上显示指令所在路径
11. ls和alias
11.1 ls和/bin/ls的区别
结合下面的alias,可以看出来两者的区别:
11.2 alias
alias 指令新名称=‘指令原名称’ – 为指令取别名
只是取了个别名,并不是实际在bin文件夹中真有名为zhangshan的可执行程序。
而且,这个别名,属于临时型别名,相当于是临时变量。当退出Xshell后,这个别名就不存在了。
12. grep
grep的作用是过滤文本中包含关键字的内容。
使用方式:grep 关键字 文件
grep是区分关键字的大小写的。可以通过-i选项来忽略大小写,让大写小写都可以。
i相当于ignore。
-v会将关键字过滤掉,保留与关键字无关的内容。
当然,这种-i , -v选项可以联合使用。
可以使用-n,带上显示内容的行号。
grep相当于搜索功能。
13. zip和unzip指令
打包和压缩的目的,是为了减少网络传输的数据量。
语法:zip 压缩包名 要压缩的文件
功能:将目录或文件压缩成zip格式,放到当前文件夹
语法:unzip 解压包名
功能:将指定的压缩包解压到当前文件夹
若想将压缩包解压到指定位置,可以使用 -d 来辅助完成。
语法:unzip 解压包 -d 指定路径
-d 表示后面是个文件夹
zip单独对文件操作时,默认只对文件本身进行压缩,文件若为目录,那么文件夹内部的文件不会被打包进去。
需要加上 -r , 让压缩操作递归式地进行。
解压出的包也自然是包含的。
14. tar
注意:打包和压缩的意义不是一样的。
打包指的是将文件们放到一个包中,而压缩是指压缩文件。
一般来讲,仅仅打包后形成的文件我们将其文件后缀命名为.tar;
而打包后以gzip方式压缩后形成的文件,我们将其文件后缀命名为.tar.gz;
解包:
注意记住 -cvzf 和 -xvzf即可。
c 创建,x解包,z以gzip的形式,f后紧跟包名,v显示操作过程。
解包到指定路径:
使用 -C, 后面跟着指定的路径。
打包丶压缩到指定路径:
解包和打包丶压缩,都可以对操作后的文件进行命名,然后生成对应的结果文件。
15. bc指令
bc指令是一个计数器指令,对合法的输入进行计算,并返回显示到屏幕上。
16.uname
Ctrl D 等价于exit,Ctrl D可以退出用户。
17. shutdown
关机操作。
一般情况下,云服务器永远都不关机。
1x.关于指令
指令的本质是一个可执行程序,是一个文件。
指令们都在家目录的bin目录中,可以直接输入指令名来运行指令,也可以通过指令所在的路径来运行指令,这在运行指令的本质上是没有区别的。
假设我们自行实现一个可执行程序,将它放到bin目录下。那么我们的可执行程序名也可以作为指令,并可以直接使用。
上面我们将自行实现的可执行程序拷贝到了bin下,这其实算是一种应用安装。
安装的本质也是拷贝。
回到那个问题:为什么创建普通的可执行文件,需要在前面加上./呢?
./表示当前文件夹,看到上面的bin,就知道了。
加./和不加是为了将两者区分开,前者是执行当前文件夹下的可执行内容,后者则是执行bin目录下的可执行文件。
l D可以退出用户。
17. shutdown
关机操作。
[外链图片转存中…(img-ee3FfEu7-1743487981828)]
一般情况下,云服务器永远都不关机。
1x.关于指令
指令的本质是一个可执行程序,是一个文件。
指令们都在家目录的bin目录中,可以直接输入指令名来运行指令,也可以通过指令所在的路径来运行指令,这在运行指令的本质上是没有区别的。
假设我们自行实现一个可执行程序,将它放到bin目录下。那么我们的可执行程序名也可以作为指令,并可以直接使用。
[外链图片转存中…(img-MGlGoCEO-1743487981828)]
上面我们将自行实现的可执行程序拷贝到了bin下,这其实算是一种应用安装。
安装的本质也是拷贝。
回到那个问题:为什么创建普通的可执行文件,需要在前面加上./呢?
./表示当前文件夹,看到上面的bin,就知道了。
加./和不加是为了将两者区分开,前者是执行当前文件夹下的可执行内容,后者则是执行bin目录下的可执行文件。