1. Win10执行sudoldconfig命令
许多windows非常熟悉ipconfig命令行工具,它被用来获取网络接口配置信息并对此进行修改。
linux系统拥有一个类似的工具,也就是ifconfig(interfacesconfig)。
通常需要以root身份登录或使用sudo以便在Linux机器上使用ifconfig工具。
依赖于ifconfig命令中使用一些选项属性,ifconfig工具不仅可以被用来简单地获取网络接口配置信息,还可以修改这些配置。
2. Linux职业认证考试有关
Linux职业认证考试102的必考点1. /proc/interrupts 文件显示当前系统中正在使用的中断。
2. Linux支持标准串/并口和游戏棒口。 /dev目录下对应每个设备/端口有一个文件。setserial命令用于显示修改串口配置。
3. dmesg命令可显示Linux在启动时发现了哪些硬件。
4. fdisk用于硬盘分区。 newe2fs用于建立文件系统。 mount用于将分区挂在总文件树上。
5. ifconfig是最常用的网络配置工具。 ping通过发送ICMP消息观察一台网上机器是否可被连通。 RedHat的sndconfig用于配置声卡。 minicom用于配置modem.
6. PPP协议是最通用的串行通讯协议。 /etc/ppp/options中有PPP的配置信息。
PAP(Password Authentication Protocol)和CHAP(Challenge Handshake Authentication Protocol)是PPP下最流行的两个认证协议。
系统安装和软件包安装
7. hda 表示第一个IDE盘, hda1是它的第一个分区。 sda表示第一个SCSI盘, sda1是它的第一个分区。
8. swap分区的大小应至少和内存大小一样。 root分区应尽量小。data/user等分区越细, 备份就越容易。
9. 分区完成后, 可以用mke2fs建立文件系统。
10. /etc/lilo.conf 中有Lilo的配置信息。 编辑完此文件后必须运行/sbin/lilo安装LILO bootloader.
11. tarball是最方便的打包工具。 "x"选项用于解包, "c" 选项用于打包, "v"选项提供更多过程信息。 "f"选项用于指明包文件名。
12. make使用Makefile文件提供的编译参数命令编译系统。 "configure"脚本用于软件的环境配置。
13. 动态共享库方便不同的软件共享库函数, 而且在库升级时, 使用它的软件无需重新编译。 ldd命令用于显示软件的共享库使用情况。 ldconfig命令用于更新维护系统的共享库数据缓存(cache of shared library data)。
"ldconfig -p"显示当前的共享库缓存。
14. 软件包管理工具有RedHat的RPM和Debian的dpkg.
15. rpm选项包括:
-i 安装包-e 卸载包-V 验证包的安装情况 (-Va验证所有包的安装情况)
-q 查寻哪个包有哪个文件 (-qf 查寻哪个文件属于哪个包 )
-b 建立包-p 显示包的信息。
16. dpkg (略)
内核
17. lsmod命令显示系统中已装载的模块。 insmod命令用于装载模块。rmmod命令用于卸载模块。 modinfo用于显示模块的有关信息。
18. modprobe工具可根据模块的依赖情况装载模块。 depmod 显示模块的依赖情况。
19. conf.moles 和 moles.conf 没有任何区别。 不同的Linux发布商使用不同的文件。
20. 内核通常使用linux-x.y.z命名, x.y.z 代表版本号。
21. "make config" 提供一字符界面用于配置内核。
22. "make xconfig"提供一X图形界面用于配置内核。
23. "make dep" 用于建立内核文件的依赖关系。 编好新内核后, 要修改/etc/lilo.conf, 以使用新内核。
文本编辑,处理和打印
24. vi的方向键:
h ——左
l ——右
j ——下
k ——上
25. vi的命令:
c -修改文本
d -删除文本
i -插入文本
o -在当前行下插入一新行
O -在当前行上插入一新行
p -将缓冲区内容插入
r -字符替换
R -替换模式
u - undo
x -删除字符
y -拷贝入缓冲区
26. The lpc utility is the main one used to manage the print service,while lpq is the primary tool for looking at and interacting with the print queue.
27. The lpr command is used to submit jobs to the print service, and there are a wide number of options that can be used with it, including:
-b to suppress a banner
-K to specify a number of copies to print
-# the same as -K
-m to send error messages via mail
-T to signify a title page
-w to define the width
28. The /etc/printcap file is a database defining what each known printer is capable of. It is read once by lpd at starup.
29. The lpd.perms file hods the permissions for the lpd service and can affect the operation as such utilities as lpc and lpq.
30. The lpd.conf file is used to configure the actual lpd service. There are 180 options that can be configured.
31. The lprm command is used to remove print jobs, and lprm -a will attempt to remove all spooled jobs.
32. /etc/profile在用户登陆时被执行,然后不同的SHELL会执行用户home下的对应配置文件.如bash依次查找.bash_profile, .bash_login和.profile.
33. .bashrc在SHELL运行开始时被执行. .inputrc用于键盘配置.
34. SHELL脚本必须有可执行权限,或是直接被SHELL读入执行. 0代表正常退出.
35. SHELL脚本中应用"#!"说明解释器位置(如#!/usr/bin/perl)
36. $1代表第一个命令行参数. shift命令将$2变为$1,依此类推.
37. test或者[]可用于进行逻辑测试. if-fi构成判断块.
X窗口
38. "X -showconfig"显示X的配置情况. startx用于启动X窗口.
39. xterm参数:
-bd设置边界颜色
-bg设置后景色
-fg设置前景色
-fn设置字体
网络
40. /etc/services 提供端口号与服务名的对应. 如 80 - http, 23 - telnet...
41. DHCP用于自动分配IP. IP地址有32位, 8位一组. 通过前8位将IP地址分为不同类组:
1-126 A 类
128-191 B 类
192-223 C 类
在Internet上的IP地址必须独立(UNIQUE).
42. 一些IP地址可用于内部网络:
10.x.x.x A 类
172.16.x.x B 类
192.168.x.x C 类
43. netmask用于识别一个主机是否属于当前网络. 缺省netmask为:
A 类 255.0.0.0
B 类 255.255.0.0
C 类 255.255.255.0
网络服务
44. inetd 是超级daemon, 调用其他服务. 它使用/etc/inetd.conf配置文件决定应管理哪些服务.
45. hosts.allow 和 hosts.deny 用于访问控制. NFS 使用/etc/exports提供的配置决定export那些文件系统. SMB用于与WINDOWS主机通讯. NMB用于识别WINDOWS主机提供的资源.
46. sendmail.cf 是 sendmail的主要配置文件. /etc/aliases 提供mail地址别名. /var/spool/mqueue 中存有mail的消息队列. mailq用于检查mail的消息队列. newaliases 用于建立新的别名文件.
47. Apache提供WEB服务. access.conf, httpd.conf和srm.conf是它的配置文件.
安全
48. /etc/profile 中的umask值应小心配置, 尽量减小新文件的权限.
49. 对于SUID和SGID程序要特别小心, 尽量用权限最小的user和group.
50. shadow password用于提高 /etc/passwd的安全性. 应使用quotas对用户的磁盘空间进行限制. 应有对密码的安全性检查, 保证密码至少有6-8个字符, 并定期更换密码.
注:102为考试代号,并非是指有102个考点
3. 如何进入/etc/ld.so.conf.d/目录
在了解/etc/ld.so.conf.d/目录下文件的作用之前,先介绍下程序运行是加载动态库的几种方法:
第一种,通过ldconfig命令
ldconfig命令的用途,
主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,
搜索出可共享的动态链接库(格式如lib*.so*), 进而创建出动态装入程序(ld.so)所需的连接和缓存文件.
缓存文件默认为/etc/ld.so.cache, 此文件保存已排好序的动态链接库名字列表.
这里面涉及到的关键内容有命令:ldconfig,配置文件目录:/etc/ld.so.conf.d,配置文件在/etc/ld.so.conf内容由
用户编辑,缓冲文件/etc/ld.so.cache。下面举个例子,比如你在部署软件时,有些动态库安装在exe目录下,可以通过如下方法实现,
1)配置exe.conf文件,里面加一行~/exe,然后将该文件放到/etc/ld.so.conf.d目录下;
2)在/etc/ld.so.conf文件中增加一行include ld.so.conf.d/exe.conf
3)执行 ldconfig命令
之后程序运行时,会自动增加在exe目录中搜索动态库。
第二种,通过LD_LIBRARY_PATH环境变量
可以通过在.bashrc或者.cshrc中配置该环境变量,LD_LIBRARY_PATH的意思是告诉loader在哪些目录中可以找到共享库. 可以设置多个搜索目录, 这些目录之间用冒号分隔开.
同样是上面的例子,可以通过以上的方法来实现
在.bashrc或.cshrc中增加一行,export LD_LIBRARY_PATH = ~/exe:$LD_LIBRARY_PATH即可。
第三种,通过编译选项-Wl, -rpath指定动态搜索的路径
-Wl选项告诉编译器将后面的参数传递给链接器。
通过上面的介绍,对/etc/ld.so.conf.d/的作用就比较清晰了。
4. linux下运行ldconfig命令后,提示“XX不是符号链接“是什么意思
Shell:Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。命令行(命令提示符):命令行一般指命令提示符。命令提示符是在操作系统中,提示进行命令输入的一种工作提示符。在不同的操作系统环境下,命令提示符各不相同。终端:终端Terminal通常是指那些与集中式主机系统相连的“哑”用户设备。终端从用户接收键盘输入,并且将这些输入发送给主机系统。主机系统处理这个用户的键盘输入和命令,然后输出返回并显示在这个终端的屏幕上。
5. 怎样使busybox编译出ldconfig命令
BusyBox 命令中支持的选项
BusyBox 中的命令并不支持所有可用选项,不过这些命令都包含了常用的选项。如果我们需要知道一个命令可以支持哪些选项,可以使用 --help 选项来调用这个命令,如清单 12 所示。
清单 12. 使用 --help 选项调用命令
$ ./busybox wc --help
BusyBox v1.1.1 (2006.04.09-15:27+0000) multi-call binary
Usage: wc [OPTION]... [FILE]...
Print line, word, and byte counts for each FILE, and a total line if
more than one FILE is specified. With no FILE, read standard input.
Options:
-c print the byte counts
-l print the newline counts
-L print the length of the longest line
-w print the word counts
$
这些特定的数据只有在启用了 CONFIG_FEATURE_VERBOSE_USAGE 选项时才可以使用。如果没有这个选项,我们就无法获得这些详细数据,但是这样可以节省大约 13 KB 的空间。
向 BusyBox 中添加新命令
向 BusyBox 添加一个新命令非常简单,这是因为它具有良好定义的体系结构。第一个步骤是为新命令的源代码选择一个位置。我们要根据命令的类型(网络,shell 等)来选择位置,并与其他命令保持一致。这一点非常重要,因为这个新命令最终会在 menuconfig 的配置菜单中出现(在下面的例子中,是 Miscellaneous Utilities 菜单)。
对于这个例子来说,我将这个新命令称为 newcmd,并将它放到了 ./miscutils 目录中。这个新命令的源代码如清单 13 所示。
清单 13. 集成到 BusyBox 中的新命令的源代码
#include "busybox.h"
int newcmd_main( int argc, char *argv[] )
{
int i;
printf("newcmd called:\n");
for (i = 0 ; i < argc ; i++) {
printf("arg[%d] = %s\n", i, argv[i]);
}
return 0;
}
接下来,我们要将这个新命令的源代码添加到所选子目录中的 Makefile.in 中。在本例中,我更新了 ./miscutils/Makefile.in 文件。请按照字母顺序来添加新命令,以便维持与现有命令的一致性:
清单 14. 将命令添加到 Makefile.in 中
MISCUTILS-$(CONFIG_MT) += mt.o
MISCUTILS-$(CONFIG_NEWCMD) += newcmd.o
MISCUTILS-$(CONFIG_RUNLEVEL) += runlevel.o
接下来再次更新 ./miscutils 目录中的配置文件,以便让新命令在配置过程中是可见的。这个文件名为 Config.in,新命令是按照字母顺序添加的:
清单 15. 将命令添加到 Config.in 中
config CONFIG_NEWCMD
bool "newcmd"
default n
help
newcmd is a new test command.
这个结构定义了一个新配置项(通过 config 关键字)以及一个配置选项(CONFIG_NEWCMD)。新命令可以启用,也可以禁用,因此我们对配置的菜单属性使用了 bool (Boolean)值。这个命令默认是禁用的(n 表示 No),我们可以最后放上一个简短的 Help 描述。在源代码树的 ./scripts/config/Kconfig-language.txt 文件中,我们可以看到配置语法的完整文法。
接下来需要更新 ./include/applets.h 文件,使其包含这个新命令。将下面这行内容添加到这个文件中,记住要按照字母顺序。维护这个次序非常重要,否则我们的命令就会找不到。
清单 16. 将命令添加到 applets.h 中
USE_NEWCMD(APPLET(newcmd, newcmd_main, _BB_DIR_USER_BIN, _BB_SUID_NEVER))
这定义了命令名(newcmd),它在 Busybox 源代码中的函数名(newcmd_main),应该在哪里会为这个新命令创建链接(在这种情况中,它在 /usr/bin 目录中),最后这个命令是否有权设置用户 id(在本例中是 no)。
倒数第二个步骤是向 ./include/usage.h 文件中添加详细的帮助信息。正如您可以从这个文件的例子中看到的一样,使用信息可能非常详细。在本例中,我只添加了一点信息,这样就可以编译这个新命令了:
清单 17. 向 usage.h 添加帮助信息
#define newcmd_trivial_usage "None"
#define newcmd_full_usage "None"
最后一个步骤是启用新命令(通过 make menuconfig,然后在 Miscellaneous Utilities 菜单中启用这个选项)然后使用 make 来编译 BusyBox。
使用新的 BusyBox,我们可以对这个新命令进行测试,如清单 18 所示。
清单 18. 测试新命令
$ ./busybox newcmd arg1
newcmd called:
arg[0] = newcmd
arg[1] = arg1
$ ./busybox newcmd --help
BusyBox v1.1.1 (2006.04.12-13:47+0000) multi-call binary
Usage: newcmd None
None
就是这样!BusyBox 开发人员开发了一个优秀但非常容易扩展的工具。
结束语
BusyBox 是为构建内存有限的嵌入式系统和基于软盘系统的一个优秀工具。BusyBox 通过将很多必需的工具放入一个可执行程序,并让它们可以共享代码中相同的部分,从而对它们的大小进行了很大程度的缩减,BusyBox 对于嵌入式系统来说是一个非常有用的工具,因此值得我们花一些时间进行探索。
上文网上转载!
1.USE_NEWCMD(APPLET(newcmd, newcmd_main, _BB_DIR_USER_BIN, _BB_SUID_NEVER))
此语句,在编译的时候会报出 USE_NEWCMD 未定义!
故使用源码中的类似语句 APPLET(newcmd, newcmd_main, _BB_DIR_USER_BIN, _BB_SUID_NEVER) 替代之,编译通过
2.但是 在此时测试命令的时候并没有得到上文给出的结果,而是提示:
"#./busybox newcmd
newcmd: applet not found "
和
“
# ./newcmd 11
11: applet not found
6. 查看linux当前加载库文件的命令
ldd
<可执行文件名>
查看可执行文件链接了哪些
系统动态链接库
nm
<可执行文件名>
查看可执行文件里面有哪些符号
strip
<可执行文件名>
去除符号表可以给可执行文件瘦身
如果我们想从可执行程序里面提取出来一点什么文本信息的话,还可以用strings命令
strings
<可执行文件名>
Linux操作系统上面的动态共享库大致分为三类:
1、操作系统级别的共享库和基础的系统工具库
比方说libc.so,
libz.so,
libpthread.so等等,这些系统库会被放在/lib和/usr/lib目录下面,如果是64位操作系统,还会有/lib64和/usr
/lib64目录。如果操作系统带有图形界面,那么还会有/usr/X11R6/lib目录,如果是64位操作系统,还有/usr/X11R6
/lib64目录。此外还可能有其他特定Linux版本的系统库目录。
这些系统库文件的完整和版本的正确,确保了Linux上面各种程序能够正常的运行。
2、应用程序级别的系统共享库
并非操作系统自带,但是可能被很多应用程序所共享的库,一般会被放在/usr/local/lib和/usr/local/lib64这两个目录下面。很多你自行编译安装的程序都会在编译的时候自动把/usr/local/lib加入gcc的-L参数,而在运行的时候自动到/usr/local
/lib下面去寻找共享库。
以上两类的动态共享库,应用程序会自动寻找到他们,并不需要你额外的设置和担心。这是为什么呢?因为以上这些目录默认就被加入到动态链接程序的搜索路径里面了。Linux的系统共享库搜索路径定义在/etc/ld.so.conf这个配置文件里面。这个文件的内容格式大致如下:
/usr/X11R6/lib64
/usr/X11R6/lib
/usr/local/lib
/lib64
/lib
/usr/lib64
/usr/lib
/usr/local/lib64
/usr/local/ImageMagick/lib
假设我们自己编译安装的ImageMagick图形库在/usr/local/ImageMagick目录下面,并且希望其他应用程序都可以使用
ImageMagick的动态共享库,那么我们只需要把/usr/local/ImageMagick/lib目录加入/etc/ld.so.conf文件里面,然后执行:ldconfig
命令即可。
ldcofig将搜索以上所有的目录,为共享库建立一个缓存文件/etc/ld.so.cache。为了确认ldconfig已经搜索到ImageMagick的库,我们可以用上面介绍的strings命令从ld.so.cache里面抽取文本信息来检查一下:
strings
/etc/ld.so.cache
|
grep
ImageMagick
输出结果为:
/usr/local/ImageMagick/lib/libWand.so.10
/usr/local/ImageMagick/lib/libWand.so
/usr/local/ImageMagick/lib/libMagick.so.10
/usr/local/ImageMagick/lib/libMagick.so
/usr/local/ImageMagick/lib/libMagick++.so.10
/usr/local/ImageMagick/lib/libMagick++.so
已经成功了!
3、应用程序独享的动态共享库
有很多共享库只被特定的应用程序使用,那么就没有必要加入系统库路径,以免应用程序的共享库之间发生版本冲突。因此Linux还可以通过设置环境变量LD_LIBRARY_PATH来临时指定应用程序的共享库搜索路径,就像我们上面举的那个例子一样,我们可以在应用程序的启动脚本里面预先设置
LD_LIBRARY_PATH,指定本应用程序附加的共享库搜索路径,从而让应用程序找到它。
7. 初步接触linux,请问gdb调试start后加载动态库符号时间很长,怎么解决,可以不加载指定库符号吗
方法一、在/etc/ld.so.conf文件中添加路径,vi /etc/ld.so.conf
添加下边内容
123
include ld.so.conf.d/*.conf /usr/cluster/.share/lib
方法二、在终端输入:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/cluster/.share/lib
方法三、修改/etc/profile文件
123
export MPI_HOME=/usr/cluster export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MPI_HOME/.share/lib
在终端执行source /etc/profile 使配置文件生效
程序运行时加载动态库失败的解决方法
错误提示如下:
error while loading shared libraries: libjson.so.0: cannot open shared object file: No such file or directory
原因一般有两个,一个是操作系统中没有包含该共享库(lib*.so.* 文件)或者共享库版本不对。解决办法就是重新下载安装。
另外一个原因就是已经安装了该共享库,但是执行需要调用该共享库的程序的时候,程序按照默认共享库路径找不到该共享库文件。解决方法如下:
如果共享库文件安装到了 /lib 或 /usr/lib 目录下,那么执行一下 ldconfig 命令。
ldconfig命令的用途, 主要是在默认搜寻目录(b和/usrb)以及动态库配置文件/etc/ld.so.conf内所列的目录下, 搜索出可共享的动态链接库(格式如lib*.so*), 进而创建出动态装入程序(ld.so)所需的连接和缓存文件. 缓存文件默认为/etc/ld.so.cache, 此文件保存已排好序的动态链接库名字列表.
如果共享库文件安装到了 /usr/local/lib (一般开源的共享库都会安装到该目录下)或者其它非 /lib 或 /usr/lib 目录下,那么在执行 ldconfig 命令前,还要把新的共享库目录加入到共享库配置文件 /etc/ld.so.conf 中,如下:
1234
# cat /etc/ld.so.confinclude ld.so.conf.d/*.conf# echo "/usr/local/lib" >> /etc/ld.so.conf# ldconfig
或者在 /etc/ld.so.conf.d/ 目录下新建任何以 .conf 为后缀的文件,在该文件中加入库文件所在的目录。然后执行 ldconfig 更新 /etc/ld.so.cache 文件。
如果共享库文件安装到了其他非 /lib 或 /usr/lib 目录下,但是又不想在 /etc/ld.so.conf 文件中加共享库路径(或者是没有权限加路径)。那可以 export 一个全局变量 LD_LIBRARY_PATH,然后运行程序的时候就会去找个目录中找共享库。
LD_LIBRARY_PATH的意思是告诉loader在哪些目录中可以找到共享库. 可以设置多个搜索目录, 这些目录之间用冒号分隔开. 比如安装了一个mysql到/usr/local/mysql目录下, 其中有一大堆库文件在/usr/local/mysql/lib下面, 则可以在.bashrc或.bash_profile或shell里加入以下语句即可:
export LD_LIBRARY_PATH=/usr/local/mysql/lib:$LD_LIBRARY_PATH
一般来讲这只是一种临时的解决方案, 在没有权限或临时需要的时候使用.
如果程序需要的库文件比系统目前存在的库文件版本低,可以做一个链接。比如:
12345
error while loading shared libraries: libncurses.so.4: cannot open sharedobject file: No such file or directoryls /usr/lib/libncu*/usr/lib/libncurses.a /usr/lib/libncurses.so.5/usr/lib/libncurses.so /usr/lib/libncurses.so.5.3
可见虽然没有libncurses.so.4,但有libncurses.so.5,是可以向下兼容的
建一个链接就好了
1
ln -s /usr/lib/libncurses.so.5.3 /usr/lib/libncurses.so.4