导图社区 程序和库信息
这是一篇关于程序和库信息的思维导图,主要内容包括:(查看基础信息),获取ELF节的长度信息,显示可执行文件或库需要静态加载的动态库完整列表--显示加载时的依赖项,列出二进制文件的节信息,查看动态节,列出并查看段,查看重定位节,反汇编,列出库中未定义的符号,列出动态符号,列出二进制文件或库的符号表,查看节中的数据,符号的类型。
编辑于2025-06-27 11:59:50这是一篇关于程序和库信息的思维导图,主要内容包括:(查看基础信息),获取ELF节的长度信息,显示可执行文件或库需要静态加载的动态库完整列表--显示加载时的依赖项,列出二进制文件的节信息,查看动态节,列出并查看段,查看重定位节,反汇编,列出库中未定义的符号,列出动态符号,列出二进制文件或库的符号表,查看节中的数据,符号的类型。
这是一篇关于设备驱动的思维导图,主要内容包括:主要功能,设备驱动模型。阐述了设备驱动的主要功能、信号定义、设备驱动模型等内容。
这是一篇关于算法的思维导图,主要内容包括:云计算,内存管理算法,分布式同步算法,避免死锁算法,进程调度算法,磁盘调度算法。
社区模板帮助中心,点此进入>>
这是一篇关于程序和库信息的思维导图,主要内容包括:(查看基础信息),获取ELF节的长度信息,显示可执行文件或库需要静态加载的动态库完整列表--显示加载时的依赖项,列出二进制文件的节信息,查看动态节,列出并查看段,查看重定位节,反汇编,列出库中未定义的符号,列出动态符号,列出二进制文件或库的符号表,查看节中的数据,符号的类型。
这是一篇关于设备驱动的思维导图,主要内容包括:主要功能,设备驱动模型。阐述了设备驱动的主要功能、信号定义、设备驱动模型等内容。
这是一篇关于算法的思维导图,主要内容包括:云计算,内存管理算法,分布式同步算法,避免死锁算法,进程调度算法,磁盘调度算法。
linux命令
mount
cut
tr
split
paste
join
uniq
sort
ls
cp
mv
tar
cat
more
ln
硬链接
目录项中,每一对文件名和索引节点号的一个一一对应称为一个链接, 这就使同一个索引节点号出现在多个链接中成为可能(同一个索引节点号可以对应多个不同的文件名) 这种链接称为硬链接 可以用 ln 命令为一个已存在的文件建立一个新的硬链接: ln /home/user1/file1 /home/user1/file2 file2 和 file1 有相同的索引节点号(和 file1 共享同一个索引节点) 在建立了一个新的硬链接后,这个索引节点中的i_links_count 值将加 1 i_links_count 的值反映了链接到这个索引节点上的文件数
优点
1.由于在删除文件时,实际上先对 i_links_count 作减 1,如果 i_links_count 不为0,则结束 即仅仅删除了一个硬链接,具体文件的数据并没有被删除 只有在 i_links_count为 0 时,才真正将文件从磁盘上删除 这样,你可以对重要的文件作多个链接,防止文件被误删除 2.允许用户在不进入某个目录的情况下对该目录下面的文件进行处理
缺点
1.硬链接仅允许在同一个文件系统上进行,要在多个文件系统之间建立链接,必须用到符号链接 2.无法简单地知道哪些文件是链接到同一个文件上的
符号链接
符号链接与硬链接最大的不同就在于它并不与索引节点建立链接, 也就是说当为一个文件建立一个符号链接时,索引节点的链接计数并不变化 当你删除一个文件时,它的符号链接文件也就失去了作用 而当你删去一个文件的符号链接文件,对该文件本身并无影响 ln -s /home/user1/file1 /home/user1/file2
openssl
生成自己的私钥
openssl genrsa -out private.key 2048
对私钥进行加密
openssl rsa -in private.key -des3 -out encryped.key
认证中心生成请求证书
openssl req -new -key private.key -out ca.csr
证书中心给自己生成的请求证书签名 表明自己批准自己请求通过 并且生成一个可以给其他用户签名的签名证书(证书中心使用)
openssl x509 -req -in ca.csr -extension v3_ca -signkey private.key -out ca_sign.crt
证书中心给服务器请求证书签名认证
openssl x509 -req -in server.csr -extensions v3_ca -CA ca_sign.crt -CAkey private.key -CAcreateserial -out sign.crt
find
awk
变量
内置函数
sed
grep
chown
rmdir
mkdir
rm
ps
显示列表说明
UID
启动这些进程的用户
PID
进程ID
PPID
父进程的进程号(如果该进程是由另一个进程启动的)
C
进程生命周期中的CPU利用率
STIME
进程启动时的系统时间
TTY
进程启动时的终端设备
TIME
运行进程需要的累计CPU时间
CMD
启动的程序名称
F
内核分配给进程的系统标记
S
进程的状态
O
代表正在运行
S
代表在休眠
R
代表可运行
Z
代表僵化 进程已结束但父进程已不存在
T
代表停止
PRI
进程的优先级(越大的数字代表越低的优先级)
NI
谦让度值用来参与决定优先级
ADDR
进程的内存地址
SZ
假如进程被换出,所需交换空间的大致大小
WCHAN
进程休眠的内核函数的地址
top
显示列表说明
PID
进程的ID
USER
进程属主的名字
PR
进程的优先级
NI
进程的谦让度值
VIRT
进程占用的虚拟内存总量
RES
进程占用的物理内存总量
SHR
进程和其他进程共享的内存总量
S
进程的状态
D
可中断的休眠状态
R
运行状态
S
休眠状态
T
跟踪状态或停止状态
Z
僵化状态
%CPU
进程使用的CPU时间比例
%MEM
进程使用的内存占可用内存的比例
TIME+
自进程启动到目前为止的CPU时间总量
COMMAND
进程所对应的命令行名称 也就是启动的程序名
lsof
显示列表说明
COMMAND
正在运行的命令名的前9个字符
PID
进程的ID
USER
进程属主的登录名
FD
文件描述符号以及访问类型( r代表读, w代表写, u代表读写)
TYPE
文件的类型( CHR代表字符型, BLK代表块型, DIR代表目录, REG代表常规文件)
DEVICE
设备的设备号(主设备号和从设备号)
SIZE
表示文件的大小
NODE
本地文件的节点号
NAME
文件名
useradd
fdisk
分区相关
fsck
文件系统的检查与修复
lvcreate
创建逻辑卷
相关命令
strace
输出格式参数
统计参数
过滤参数
实例
程序和库信息
(查看基础信息)
文件类型
file
objdump
readelf
获取ELF节的长度信息
size
显示可执行文件或库需要静态加载的动态库完整列表--显示加载时的依赖项
ldd
objdump(不会递归)
readelf(不会递归)
列出二进制文件的节信息
objdump
readelf
查看动态节
readelf
列出并查看段
objdump
readelf
查看重定位节
objdump
readelf
反汇编
objdump
列出库中未定义的符号
nm
列出动态符号
nm
objdump 动态库
readelf
列出二进制文件或库的符号表
nm
objdump 二进制
readelf
查看节中的数据
objdump
readelf
符号的类型
A: Global absolute
a: Local absolute
B: Global bss(出现在未初始化数据节中的符号)
b: Local bss(出现在未初始化数据节中的符号)
C: 通用符号
通用符号时未初始化数据 在链接时会出现许多名称相同的通用符号 无论符号出现在什么地方 通用符号都属于未定义引用
D: Global data(出现在已初始化数据节中的符号)
d: Local data(出现在已初始化数据节中的符号)
f: 源文件名称符号
G/g: 主要用于支持小型对象
已初始化数据节中的符号 一些目标文件格式允许更高效的访问小型数据对象
i: GNU相对于标准ELF符号类型的扩展
如果目标文件是PE格式文件 该类型说明符号在针对DLL实现的节中 如果目标文件是ELF格式文件 说明符号是一个间接函数
N: 调试符号
p: 出现在栈的展开节中的符号
R/r: 出现在只读数据节中的符号
S/s: 出现在未初始化数据节中的符号 用于支持小型对象
T: Global text(出现在代码中的符号)
t: Loacl text(出现在代码中的符号)
U: 未定义符号
u: 全局唯一的符号
V/v: 弱对象
当已定义的弱符号和已定义的正常符号一起链接时 已定义的正常符号可以使用且不会报错 当链接未定义的弱符号且该符号没有定义时 会将弱符号填充为0 且不会报错
W/w: 弱符号(没有被明确标记成弱对象的符号)
当已定义的弱符号和已定义的正常符号一起链接时 已定义的正常符号可以使用且不会报错 当链接为定义的弱符号且该符号没有定义时 该符号的值根据系统特定的行为来确定
-: a.out目标文件中的Stab符号(用于保存调试信息)
?: 未知符号 或是目标文件特定格式的符号
配置篇
systemd
systemctl
查看系统状态和管理系统及服务
电源
重启系统
sudo systemctl reboot
暂停系统
sudo systemctl suspend
关闭系统,切断电源
sudo systemctl poweroff
让CPU停止工作
sudo systemctl halt
让系统进入冬眠状态
sudo systemctl hibernate
让系统进入交互式休眠状态
sudo systemctl hybrid-sleep
启动进入救援状态(单用户状态)
sudo systemctl rescue
显示系统状态
systemctl status -l
显示cgroup slice, 内存和父PID
systemctl status pid
重载所有修改过的配置文件
sudo systemctl daemon-reload
unit
输出激活的单元
systemctl
输出运行失败的单元
systemctl --failed
列出正在运行的 Unit
systemctl list-units
列出所有 Unit,包括没有找到配置文件的或者启动失败的
systemctl list-units --all
列出所有没有运行的 Unit
systemctl list-units --all --state=inactive
列出所有加载失败的 Unit
systemctl list-units --failed
列出所有正在运行的、类型为 service 的 Unit
systemctl list-units --type=service
服务
立即启动一个服务
sudo systemctl start bootlogo.service
显示某个服务是否正在运行
systemctl is-active systemd-timesyncd.service
立即停止一个服务
sudo systemctl stop bootlogo.service
重启一个服务
sudo systemctl restart bootlogo.service
杀死一个服务的所有子进程
sudo systemctl kill bootlogo.service
重新加载一个服务的配置文件
sudo systemctl reload bootlogo.service
显示某个服务的所有底层参数
systemctl show httpd.service
显示某个服务是否建立了启动链接
systemctl is-enabled systemd-timesyncd.service
显示某个服务的指定属性的值
systemctl show -p CPUShares avahi-daemon.service
设置某个服务的指定属性
sudo systemctl set-property avahi-daemon.service CPUShares=500
列出一个服务的所有依赖
systemctl list-dependencies avahi-daemon.service
列出一个服务的所有依赖 并展开显示依赖类型
systemctl list-dependencies --all avahi-daemon.service
查看xxx.service 是否被添加到了服务列表
sudo systemctl list-unit-files --type=service | grep xxx
systemd-analyze
查看启动耗时
查看启动耗时
systemd-analyze
查看每个服务的启动耗时
systemd-analyze blame
显示瀑布状的启动过程流
systemd-analyze critical-chain
显示指定服务的启动流
systemd-analyze critical-chain xxx.service
hostnamectl
可用于查看当前的主机信息
显示当前主机的信息
hostnamectl
设置主机名
sudo hostnamectl set-hostname xxx
localectl
查询与修改系统的本地化 (locale) 与键盘布局的设置
查看本地化设置
localectl
设置本地化参数
sudo localectl set-locale LANG=en_GB.utf8
设置j键盘布局参数
sudo localectl set-keymap en_GB
timedatectl
查询和更改系统时钟和设置
查看当前时区设置
timedatectl
显示所有可用的时区
timedatectl list-timezones
选择中国上海的时区
timedatectl set-timezone "Asia/Shanghai"
设置时间
timedatectl set-time 12:58:20
设置日期
timedatectl set-time 2020-8-20
关闭时间同步
timedatectl set-ntp no
开启时间同步
timedatectl set-ntp yes
loginctl
查看已经登录的用户会话消息
显示所有会话及属性
loginctl -a
显示会话配置消息
loginctl show-session
列出显示指定用户的信息
loginctl show-user root
journalctl
查看所有日志
sudo journalctl
指定日志文件占据的最大空间
sudo journalctl --vacuum-size=8M
库编译
静态库
创建静态库
ar -rcs libmysticlib.a fir.o sec.o thir.o
列出静态库目标文件
ar -t libmysticlib.a
从静态库中删除目标文件
ar -d libmysticlib fir.o
将新的目标文件添加到静态库
ar -r libmysticlib new_fir.o
重建目标文件顺序
ar -m -b sec.o libmysticlib new_fir.o
动态库
动态链接
1.构建动态库
2.依靠信任来构建客户端可执行程序 链接器只会检查二进制文件中所需的符号是否都能在动态库中找到
3.运行时装载 找到动态库 进程将动态库载入内存映射
4.符号解析 将可执行程序的符号解析到正确的地址 (动态库映射到进程内存映射中的地址)