参考网址:【Linux命令大全】[]:https://linux265.com/course/linux-commands.html
为什么要学习shell指令?
学习shell指令的本身也是在了解Linux系统。shell是开发出来更好地使用Linux系统。
1.shell指令与系统调用的区别?
本是想着随便想想这个问题。没想到这个问题居然是我的知识盲区。
首先要区分系统调用 、 Linux内置命令 、 Linux外部命令 、 shell命令
系统调用:運行在使用者空間的程序向操作系统内核請求需要更高權限運行的服務。
如:open()、close()等等
然后Linux命令是用C语言调用系统调用实现特定功能的一个程序。内部外部命令在这里区分并不重要。
而shell则是一个更上层的使用Linux命令的封装,拥有我们常说的shell命令其实是Linux命令
shell以图形化的界面(又不是很图形化)将输入的指令解析成Linux命令去使用。
所以shell语言 既是命令语言又是程序设计语言。
1.nm指令?
nm是names的缩写, nm命令主要是用来列出某些文件中的符号(说白了就是一些函数和全局变量等)。
2.符号是什么?
参考网址:[]:http://jianboge.com/d420951
[]:https://www.cnblogs.com/zuofaqi/p/12026482.html
参考书籍:《程序员的自我修养——链接、装载与库》
符号是:
所说的符号其实就是我们代码中的函数和变量,在链接的过程中,链接器会把这些所有符号都统一管理起来,然后给他们赋值,叫符号值。函数和变量的符号值就是自己的地址。
所以写c语言的时候,函数不能重名,重名的时候会在链接的时候会报错,就是这个道理,当然可以用static来限制作用域。
所以每一个目标文件(hello_world.o)都有一份自己的符号表,存储在.symtab段中,链接的时候,链接器只要去找这个段中的符号,然后各种操作就可以了。
用法有很多。
2.用nm指令 实现在/usr/lib/ 目录下找出哪个库文件定义了memset函数:
3.用nm指令 实现显示hello.o 中的未定义符号,需要和其他对象文件进行链接:
4.sed指令?
用于替换字符串
5.source指令?
6.source指令是在当前进程执行还是另起子进程运行?
是在当前进程执行。
7.source指令可以强制执行指令吗?
source 命令会强制执行脚本中的全部命令,而忽略文件的权限。
不过最起码需要有读文件的权限0.0
8.执行sh(scirpt)文件有几种方式?
两种:
- 当前shell执行(source)
- 另起新shell执行(#!/bin/sh)
9.ar指令?
ar命令用于建立或修改备存文件,或是从备存文件中抽取文件。可集合许多文件,成为单一的备存文件。在备存文件中,所有成员文件皆保有原来的属性与权限。
10.readelf指令?
readelf命令用来显示一个或者多个elf格式的目标文件的信息,可以通过它的选项来控制显示哪些信息。这里的elf-file(s)就表示那些被检查的文件。可以支持32位,64位的elf格式文件,也支持包含elf文件的文档(这里一般指的是使用ar命令将一些elf文件打包之后生成的例如lib*.a之类的“静态库”文件)。