当前位置:   article > 正文

【Linux系统编程一】:Shell命令运行原理 + 基本指令_linux解析shell命令过程

linux解析shell命令过程

Ⅰ.Shell命令及运行原理

Linux严格意义上来说是一个操作系统,我们称为"核心",但我们一般用户,是不能直接使用这个"核心"。而是通过"核心"的外壳程序,也就是所谓的Shell来与"核心"沟通。
其实我们所有的指令都要在OS内部运行,但是OS使用的难道太高,我们用户很难直接与OS打交道。
从技术角度,Shell的最简单定义:“命令行解释器”,主要功能包含:

1.将使用者的命令翻译给核心处理。
2.同时,将核心处理的结果翻译给使用者。

而Shell存在的意义在于:

1.进行命令行的解释。
2.变相的保护操作系统,对于用户非法的命令进行拦截。

对比Windows GUI,我们操作windows不是直接操作Windows内核,而是通过图形接口,点击鼠标,从而完成我们的操作。
Shell对于Linux ,有相同的作用,主要是对我们的命令进行解析,解析指令给Linux内核。反馈结果在通过内核运行结果,通过Shell传给用户。

用一个简单的比喻来理解:比如你是一个害羞的boy,看上了隔壁邻村的阿莉,却不敢表白,所以你让家人给你找了一个媒婆,让她去说媒,所有的事情都直接和媒婆商量,由媒婆来转达你的意思给阿莉,然后再将阿莉的结果告诉你。这里的你就相当于用户,而阿莉就是OS,媒婆就相当于Shell,用来传达你的要求,再将阿莉的结果返回给你。

Ⅱ.Linux基本指令

1.ls指令

语法:ls [选项][目录或文件]
功能:对于目录,该命令列出该目录下所有子目录和文件。对于文件,将列出文件名以及其他信息。
常用选项:

  • -a 列出目录下的所有文件,包括以.开头的隐藏文件。
  • -d 将目录像文件一样显示,而不是显示其下的文件。如 ls -d 指定目录。
  • -l 列出文件的详细信息。
  • -F 在每个文件名后面加一个字符以显示该文件的类型,'*'表示可执行的普通文件;‘/’表示目录;‘@’表示符号链接;‘|’表示FLFOs;‘=’表示套接字(目录类型识别)
  • -r 对目录反向排序。
  • -n 用数字的UID,GID代替名称。
  • -k以k字节形式表示文件大小。
  • -i 输出文件的i节点的索引信息。
  • -t 以时间排序。
  • -s 在文件名后面输出该文件大小(可大小排序,找到目录下最大的文件)。
  • -R (递归式)列出所有子目录下的文件。
  • 1 一行只输出一个文件。

2.pwd命令

语法:pwd
功能:显示用户当前的处于的目录
无常用选项

3.cd指令

语法:cd 目录名
功能:改变工作目录。将当前的工作目录改到指定的目录下。
常用命令:

  • cd . . 表示返回上级目录
  • cd /home/linux/ 通过绝对路径来进入这个目录
  • cd . . /test/ 通过相对路径来进入这个目录
  • cd ~ 进入家目录
  • cd - 返回最近访问目录

4.touch命令

语法:touch [选项] 文件
功能:新建一个不存在的文件。touch命令参数可更改文档或目录的日期时间
常用选项:

  • -a 只修改存取时间
  • -c 不建立任何文档
  • -d 使用指定的日期时间,而非现在的时间
  • -m 只修改变动时间
  • -r 将指定的文档或目录的日期时间,统统设成参考文档或目录的日期时间
  • -t 使用指定的日期时间,而非现在的时间

5.mkdir指令

语法: mkdir [选项] name
功能:在当前的目录下创建一个名为"name"的新目录。
常用选项:

  • -p 可递归建立多个目录
    mkdir -p 目录1/目录2/目录3 这个可以是一个路径名称。此时或某路径下某些目录尚不存在,加上改选项后,将自动建立好那些尚不存在的目录,既可以一次性建立多个目录。

6.rmkdir指令&&rm指令

rmkdir指令和mkdir指令是相对应的指针,mkdir是创建目录的指令,rmkdir是删除目录的指令。

语法: rmkdir [选项] name
功能:只能删除空目录。
常用选项:

  • -p 当子目录被删除后,父目录也变成空目录了,那就连父目录一起删掉。

rm命令可以同时删除文件或目录。

语法: rm [选项] name
功能:删除文件或目录
常用选项:

  • f 强制删除,即使文件属性为只读,也直接删除。
  • i 删除前会询问一下。
  • r (递归式)删除目录及其下所有文件。

7.man指令

Linux的命令有很多参数,我们不可能全部记住,我们可以通过查看手册来获得帮助。访问Linux手册页的命令是man

语法:man [选项] /命令
功能:查阅Linux命令手册
常用选项:

  • -k 根据关键字搜索帮助
  • -num只在num章节查找
  • -a 将所有的章节都显示出来。

8.cp指令

语法:cp [选项] 源文件/目录 -----> 目标文件/目录
功能:复制文件或目录
说明:cp指令用于复制文件或目录,如果同时指定两个以上的文件或目录,且最后的目的地是已经存在的目录,则它将前面指定的文件或目录全部复制到此目录中,如果目的地是不存在的目录,则最后会出现错误现象。
常用选项:

  • -f 强行复制文件或目录到目的地,不论目的文件或目录是否存在。
  • -i 覆盖文件之前会先询问一下
  • -r 递归处理,将指定目录下的文件和子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理。
  • R 递归处理,京指定目录下的文件和子目录一并处理。

9.mv指令

mv命令是move的缩写,可以用来移动文件或将文件改名(move(rename)files),是Linux下常用的命令,经常用来备份文件或者目录。

语法:mv [选项] 源文件或目录----->目标文件或目录
功能:
1.根据mv命令中第二个参数类型的不同(看是目标文件还是目标目录),mv命令会将文件重命名,或将其转移至一个新的目录中。
2.当第二个参数类型是目标文件时,mv命令完成重命名,此时源文件/源目录只能有一个,将所给的源文件/源目录重命名为给定的目标文件名。
3.当第二个参数类型是目录时,源文件或目录可以有多个,mv命令会将各参数指定的源文件/目录转移到目录中。
常用选项:

  • -f 强制转移,当目标文件已经存在,则不会询问直接覆盖。
  • -i 若目标文件已经存在时,就会询问是否覆盖。

10.cat指令

语法:cat [选项] 文件
功能:查看目标文件的内容
常用选项:

  • -b 对非空行进行编号。
  • -n 对所有行进行编号。
  • -s不输出多行空行。

11.more指令

语法:more [选项]文件
功能:查看目标文件的内容,功能类似cat
常用选项:

  • -n 对所有行进行编号。
  • q 退出more。

12.less指令

less指令也是对文件或者其他输出进行分页显示的工具,应该说是Linux正统查看文件内容的工具,功能及其强大。
less的用法比more更具有弹性。在使用more时,我们没有办法往前翻,只能往后翻,但使用了less指令,既可以使用[PgUp] [PgDn]等按键的功能来往前往后翻看文件,更容易用来查看一个文件的内容。除此之外,在less里面还有很多搜索功能,不止可以向上搜,也可以向上搜。

语法:less [选项]文件
功能:less和more类似,但less可以随意的浏览文件,more只能往前移动,不能往后移动,而且less在查看文件之前不会完全加载整个文件。
常用选项:

  • -i 忽略搜索时的大小写。
  • -N 显示每行的行号
  • /字符串 向下搜索"字符串"的功能。
  • ?字符串 向上搜索"字符串"的功能。
  • n 重复前一个搜索。
  • q 终止搜索。

13.head指令

head头,浅显易懂,它是用来显示某个数量的文字区块的开头部分。head显示档案的开头到标准输出流中。

语法:head [选项] 文件
功能:head用来显示文件的开头到标准输出流中,默认head命令打印其对应文件的开头前10行。
常用选项:

  • n<行数> 显示行数。

14.tail指令

tail尾,同样浅显易懂,它是用来显示某个数量的文字区块的结尾部分。tai是用来看到档案的结尾的。
但tail指令可以从指定点开始将文件写到标准输出,使用tail -f命令,可以方便的查阅正在改变的日志文件,tail -f filename 可以把文件最尾部的内容显示到屏幕上,并且不断刷新,使你看到最新的文件内容。

语法:tail [必要选项][选择选项] 文件
功能:用来显示指定文件的末尾部分,不指定文件时,作为输入信息进行处理,常用查看日志文件。
常用选项:

  • n<行数> 显示行数。
  • -f 循环读取

15.date指令

date是时间相关的指令。
用法:
date [选项] [格式] …[选项]…[格式]…[选项][格式]
比如指定格式来显示时间 date +%Y:%m:%d
在显示方面,使用者可以在每个选项后面加上想要的格式。格式设定为一个加号后接数个标记.下面是常用的选项。

  • %Y 完整年份
  • %m 月份
  • %d 日
  • %H 小时
  • %M 分钟
  • %S 秒
  • %F 相当于%Y-%m-%d

在设置时间方面有以下选项

  • date -s 设置当前的时间,只有root用户可以设置,其他只能查看。
  • date -s 20200520 会将日期改成20200520,但具体时间会设置成00:00:00。
  • date -s 01:02:03 设置具体时间为01:02:03,但日期不会改变。
  • date -s “01:02:03 20200520” 这样可以设计全部时间。
  • date -s "20200520 01:02:03"这样可以设计全部时间。
  • date -s "2020-05-20 01:02:03"这样可以设计全部时间。

显示时间戳
任何时间都有对应的时间戳,那如何将一个时间转化成时间戳呢?
date +%s 就可以显示出时间戳了。
而如何将时间戳再转化成具体时间呢?
date -d@时间戳数字 这样就可以显示出具体时间了。

16.Cal指令

Cal命令是用来显示阳历。公历是现在国际同样的方法统称为阳历,是地球绕太阳一周为一年。

命令格式: cal [选项][月份][年份]
功能:用于查看日历等时间选项,如果只有一个参数,则会显示式该年份的各月的日历,如果有两个参数,则会表示该年份中的某月份的日历
常用选项:

  • -3 显示系统前一个月,当前月,下一个月的月历
  • -j 显示在当年的第几天(一年日期按天算,从1月1号算起,默认显示当前月在一年中的天数。)
  • -y 显示当前年份的日历
    Cal -y 2020 就是会显示2020年份的日历

17.find指令

find指令是用来在特定目录下搜索文件的。Linux中有很多搜索文件的工具,find只是其中之一。find可以在指令的路径下进行文件的搜索(是可以在磁盘上查找的)。
Linux下find命令在目录结构中搜索文件,并执行特定操作。
但当在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个很大的文件系统可能会花费很常的时间(这里指的是30G字节以上的文件系统)。

语法:find [路径] [ 选项]
功能:用来在指定路径下查找文件,并做出相应的处理(可能访问磁盘)
常用选项:

  • -name 按照文件名来搜索。

除了find指令可以查找文件,Linux中还有which指令,whereis指令。
which指令也可以在指定路径下搜索文件。
而whereis在指定路径下可以找到指定的指令和安装包,在系统特定的路径下查找,既可以找到可执行程序,又可以找到手册,安装包等。

18.grep指令

grep指令本质上就是一个行文本过滤工具将"关键字"过滤出来,它是按行读取的。

语法:grep [选项] [要搜索的文件中的字符串]
功能:在文件中搜索指定的字符串,并将找到的整行打印出来
常用选项:

  • -n随便输出行号,什么都不写的代表空。
  • -i 就是ignore,忽略大小写的不同,所有将大小写视为相同。
  • -v 反向选择,就是打印出没有搜索的内容,即显示出没有搜索字符串内容的那行。

应用场景:
1.cat log.txt | grep tao
先将文件内容通过管道传过来,再用grep指令来搜索tao字符串。

2.搜索项目中main函数入口。
很多项目很复杂,不易查看,而只要找到main函数就知道项目的开始位置,这样就方便阅读。

3.配合管道查找进程应用。

19.zip / unzip指令

在生活中有很多压缩软件,那你有没有想过为什么要压缩呢?为什么要打包和压缩呢?

1.能够被打包的,一定是一个整体,这样才可以由多个文件---->一个文件。 好处:不容易造成文件的丢失。因为要么不丢,要么整体都丢,如果当只丢一两个文件,你还不知道丢是什么样的文件,这样你就很难受了。需要毫无头绪的去找。
2.打包压缩,将文件体积变小了。 好处:可以提高效率。因为体积大,那么下载时间就长,存储占据空间就大。

Linux充当服务器的时候,也需要各种网络应用场景满足效率需求,这就要求Linux下也需要有打包压缩工具。
而zip和unzip就是用来打包和压缩/解压的指令。

语法:zip [要压缩的文件].zip [目录或文件]
功能:将文件/目录压缩成zip格式,并放入某个目录或文件里。
常用选项:

  • -r 递归处理,将指定目录下的子目录和所有文件都一并处理,打包压缩。
    当一个目录/文件里还有文件时,如果不加上-r选项,那么打包的只是改目录/文件一个空壳子,里面为空的,不信可以再把这个压缩包解压,发现里面啥也没有,必须使用-r选项,递归式压缩才可以将该目录/文件下所有的文件和子目录全部打包压缩。

举例:将test文件压缩

zip test.zip  studyflie
  • 1

解压到tmp目录下

unzip test.zip -d /tmp
  • 1

20.tar指令

tar指令也是用来打包压缩/解压的指令。

  • -c 建立一个压缩文件的指令参数。
  • -x 建立一个解压文件的指令参数。
  • -f 查看压缩文件tarflie的内容,不打开,直接看。
  • -z 是否具有gzip的属性,是否需要gzip压缩?
  • -j 是否具有bzip2的属性,是否需要bzip2压缩?
  • -v压缩的过程中显示文件。
  • -f 使用文档名,请注意,在f之后要立即接档名,不能再接参数了。
  • -C 解压到指定目录。

1.打包但不压缩
tar -cvf [文件/目录].tar
要注意tar是打包后缀,因为在参数f之后的文件档名是我们自己取的,我们习惯上都喜欢用.tar来作为打包后缀。
举例:将整个/etc目录下的文件全部打包成’/tmp/etc.tar’

tar -cvf /tmp/etc.tar /etc   仅打包,不压缩
  • 1

2.打包压缩
tar -czf [文件/目录].tar.gz
要注意tar.gz 是压缩后缀。其实就是tar是打包后缀,gz是压缩后缀,连起来。
举例:将整个/etc目录下的文件全部打包压缩成’/tmp/etc.tar.gz’

tar -czvf /tmp/etc.tar.gz /etc  打包后,用gzip压缩
  • 1

或者

tar -cjvf /tmp/etc.tar.bz2 /etc  打包后,用bzip2压缩
  • 1

3.预览压缩文件内容

tar -tzf [压缩文件/目录].tar.gz
举例:查阅上述压缩文件/tmp/etc.tar.gz中有哪些文件?

tar -tzvf /tmp/etc.tar.gz
因为我们是用gzip压缩文件,所以我们需要加上z参数。 
  • 1
  • 2

4.解压文件
tar -xzf [压缩文件].tar.gz
举例:将/tmp/etc.tar.gz 文件解压到/user/local/src底下

先进入到/user/local/src当前目录
cd /user/local/src
在该目录下对压缩包进行解压
tar xzvf /tmp/etc.tar.gz 
  • 1
  • 2
  • 3
  • 4

21.bc指令

bc指令其实就是相当于windows下的计算器,可以进行数据的运算,可以很方便的进行浮点数运算。

22.uname -r指令

语法:uname [选项]
功能:uname 用来获取电脑和操作系统的相关信息
常用选项:

  • -r 用来查看Linux下的内核版本信息
  • -a/all 详细的输出所有信息,即查体系结构,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,操作系统名称等。

23.shutdown指令

语法:shutdown [选项]
功能:shtdown关机命令。用来关机/重启
常用选项:

  • -h将系统的服务停掉后,立刻关机。
  • -r将系统的服务停掉后,就重新启动。
  • t 秒数 表示在[过几秒后关机]。

24.重要热键[tab] [Ctrl c] [Ctrl d] [Ctrl r]

1.Tab按键,具有自动补全命令的功能。
2.Ctrl c按键,具有让当前程序立刻停止的功能。
3.Ctrl d按键,具有退出软件的功能,退出界面的功能,通常代表着:键盘输入结束的意思,可以替代exit。
4.Ctrl -r 可以找历史命令,具有搜索历史命令的功能。
这说明Linux是具有记录历史命令的功能,而Linux会默认记录最新的1000条指令。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/147811?site
推荐阅读
相关标签
  

闽ICP备14008679号