Linux你必须知道的小知识-1

122 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第17天,点击查看活动详情


2.4 说说如何以root权限运行某个程序。

参考回答

sudo chown root app(文件名)
sudo chmod u+s app(文件名)

输入上面两条指令后即可

2.5 说说软链接和硬链接的区别。

参考回答

  1. 定义不同

    软链接又叫符号链接,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。

    硬链接就是一个文件的一个或多个文件名。把文件名和计算机文件系统使用的节点号链接起来。因此我们可以用多个文件名与同一个文件进行链接,这些文件名可以在同一目录或不同目录。

  2. 限制不同

    硬链接只能对已存在的文件进行创建,不能交叉文件系统进行硬链接的创建;

    软链接可对不存在的文件或目录创建软链接;可交叉文件系统;

  3. 创建方式不同

    硬链接不能对目录进行创建,只可对文件创建;

    软链接可对文件或目录创建;

  4. 影响不同

    删除一个硬链接文件并不影响其他有相同 inode 号的文件。

    删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。

2.6 说说静态库和动态库怎么制作及如何使用,区别是什么。

参考回答

静态库的制作:

gcc  hello.c  -c //这样就生成hello.o目标文件

ar rcs libhello.a  hello.o//生成libhello.a静态库

静态库的使用:

gcc main.c -lhello -o staticLibrary//main.c和hello静态库链接,生成staticLibrary执行文件
/*
main.c:  是指main主函数
-lhello: 是我们生成的.a 文件砍头去尾(lib不要 .a也不要)前面加-l
-L:      是指告诉gcc编译器先从-L指定的路径去找静态库,默认是从/usr/lib/ 或者  /usr/local/lib/ 去找。
./:      是指当前路径的意思
staticLibrary: 是最后想生成的文件名(这里可随意起名字)
*/

动态库的制作:

gcc -shared -fpic hello.c -o libhello.so
-shared 指定生成动态库
-fpic :fPIC选项作用于编译阶段,在生成目标文件时就得使用该选项,以生成位置无关的代码。

动态库的使用:

gcc main.c -lhello -L ./ -o dynamicDepot
/*
main.c:  是指main主函数
-lhello: 是我们生成的.so 文件砍头去尾(lib不要 .so也不要)前面加-l
-L:      是指告诉gcc编译器先从-L指定的路径去找静态库,默认是从/usr/lib/ 或者 /usr/local/lib/ 去找。
./:      是指当前路径的意思
dynamicDepot: 是最后想生成的文件名(这里可随意起名字)
*/

区别:

  1. 静态库代码装载的速度快,执行速度略比动态库快。
  2. 动态库更加节省内存,可执行文件体积比静态库小很多。
  3. 静态库是在编译时加载,动态库是在运行时加载。
  4. 生成的静态链接库,Windows下以.lib为后缀,Linux下以.a为后缀。生成的动态链接库,Windows下以.dll为后缀,Linux下以.so为后缀。