linux常用命令记录
ubuntu
文件压缩与解压
tar.gz
//解压tar.gz到指定目录
tar -xzf <archive-file>.tar.gz -C <target-directory>
//解压到当前目录
tar -zxvf src_name.tar.gz
//压缩:
tar -zcvf dir_name.tar.gz dir_name
文件系统挂载
mount -t nfs -o nolock 192.168.1.6:/home/kknight/nfsdir /mnt/nfsdir
参数 | 含义 |
---|---|
-t nfs | 选择挂载nfs文件系统 |
-o nolock | nolock |
192.168.1.6:/home/kknight/nfsdir | 源ip地址及路劲 |
/mnt/nfsdir | 本机路劲 |
开启NFS服务
vi /etc/exports
打开配置文件/home/kknight/work/IMX6UL/rootfs 192.168.0.102/24(rw,sync,no_subtree_check)
添加至文件末尾sudo exportfs -a
导出NFS共享目录sudo systemctl restart nfs-kernel-server
重启NFS服务
字符搜寻
//在当前目录下(递归),查找所有文件,是否包含关键字
find ./ -type f |xargs grep "var"
//在当前目录下(递归),是否包含关键字命名的文件
find . -type f -name "vexpress_defconfig"
root@ubuntu:/home/kknight/qemu/filesystem# cat test.txt
123
Hello3zz
//xargs 将文本内容转换为输入字符流,同时将'\n'转换为' '
root@ubuntu:/home/kknight/qemu/filesystem# xargs -a test.txt > t.txt
root@ubuntu:/home/kknight/qemu/filesystem# hexdump t.txt
0000000 3231 2033 6548 6c6c 336f 7a7a 000a
000000d
root@ubuntu:/home/kknight/qemu/filesystem# cat t.txt
123 Hello3zz
root@ubuntu:/home/kknight/qemu/filesystem#
echo "file1 file2 file3" | xargs ls -l
等效于 ls -l file1 file2 file3
即xargs作为后级输入
查找目录下所有文件,包含关键词的内容。
信号SIGNAL相关
// 使 udhcpc 重新获取IP
kill -USE1 {udhcpc pid}
//使 udhcpc 释放IP
kill -USE2 {udhcpc pid}
查看当前路由表
route -n
查看二进制文件
//单字节+ascii码的形式输出
hexdump -C xxx.bin
//16进制形式输出
hexdump xxx.bin
// -n 指定输出长度
hexdump -n 5 file.txt
查看KO中待解析符号
如printk等内核中的函数
nm -u psmodule.ko
查看&设置内核信息输出等级
/proc/sys/kernel/printk
是一个特殊的文件路径,它允许您在运行时控制内核消息的打印级别。该文件包含四个整数值,分别表示内核打印消息的四个级别:
console_loglevel
:控制台日志级别。该级别用于决定在控制台上输出哪些内核消息。只有具有比该级别高的消息才会在控制台上显示。
default_message_loglevel
:默认消息日志级别。该级别用于决定哪些内核消息将被默认输出到系统日志文件(如/var/log/messages)中。
minimum_console_loglevel
:最小控制台日志级别。该级别用于决定哪些内核消息可以在控制台上输出。只有具有比该级别高的消息才会显示在控制台上。
default_console_loglevel
:默认控制台日志级别。该级别用于决定哪些内核消息将默认显示在控制台上。
这些级别的取值范围是从0到7,具体含义如下:
0:表示不显示任何内核消息。
1:表示显示致命错误(例如内核崩溃)。
2:表示显示关键错误(例如硬件错误)。
3:表示显示一般错误。
4:表示显示警告信息。
5:表示显示一般调试信息。
6:表示显示详细调试信息。
7:表示显示最详细的调试信息
cat /proc/sys/kernel/printk
//显示消息等级
cat /proc/sys/kernel/printk
7 4 1 7
//修改消息打印等级,实测修改第一项,在串口terminal看不到调试信息了
echo "5 4 1 7" > /proc/sys/kernel/printk
查看字符设备&块设备设备号
cat /proc/devices
//查看设备号命令
cat /proc/devices
Character devices:
1 mem
4 /dev/vc/0
4 tty
5 /dev/tty
5 /dev/console
5 /dev/ptmx
7 vcs
...
Block devices:
1 ramdisk
259 blkext
7 loop
8 sd
31 mtdblock
65 sd
...
创建设备节点(mknod)
mknod /dev/chrdevbase c 200 0
# 设备节点名 字符设备 主设备号 次设备号
mknod /dev/chrdevbase c 200 0
<1>.创建字符设备
# mknod -m 660 /dev/console2 c 100 2
# ls -al /dev/console2
crw-rw---- 1 root root 100, 2 Oct 10 07:08 /dev/console2
注释:
-m:表示设备权限
注意:如果不指定-m权限,则是默认的644
c:字符设备
100:主设备号
2:次设备号
目标文件反汇编
arm-linux-gnueabihf-objdump -D asm-led.elf > asm-led.dis
arm-linux-gnueabihf-objdump -S -D asm-led.elf > asm-led.dis
-S:输出文件c代码与汇编对应
arm-linux-gnueabihf-objdump -h asm-led.elf > asm-led.dis.section
-h:输出文件段信息
将目标文件反汇编,包括elf,ko文件
查看CPU中断信息
cat /proc/interrupts
cat /proc/stat
服务or进程管理
//格式
service SCRIPT-Name COMMAND
//重启tftpd-hpa服务
service tftpd-hpa restart
直接读写物理地址
读取内存
devmem 0x80000000 # 读取32位
devmem 0x80000000 w # 读取16位
devmem 0x80000000 b # 读取8位
写入内存
devmem 0x80000000 w 0x1234 # 写入16位值
devmem 0x80000000 32 0x12345678 # 写入32位值
echo
//朝 sample_fifo写入 0x1234abcd -e 16进制 -n 不输入\n
echo -ne "\xCD\xAB\x34\x12" > sample_fifo
grep查找包含关键词进程
//使用ps+ grep筛选
ps -aux | grep main
alinx 2237 0.1 2.1 11871776 87252 ? Sl Dec02 4:21 /home/alinx/.vscode-server/cli/servers/Stable-e8653663e8840adaf45af01eab5c627a5af81807/server/node /home/alinx/.vscode-server/cli/servers/Stable-e8653663e8840adaf45af01eab5c627a5af81807/server/out/server-main.js --connection-token=remotessh --accept-server-license-terms --start-server --enable-remote-auto-shutdown --socket-path=/tmp/code-fe56c42d-33b7-4626-8221-8ed790885df6
alinx 90867 0.0 0.0 4516 864 pts/6 S+ 23:50 0:00 ./main
alinx 90900 0.0 0.0 14432 1156 pts/7 R+ 23:53 0:00 grep --color=auto main
pmap查看进程内存资源情况
//使用ps+ grep筛选
pmap 90867
90867: ./main
000056253a271000 4K r-x-- main
000056253a471000 4K r---- main
000056253a472000 4K rw--- main
000056253a5b7000 132K rw--- [ anon ]
00007fdb53662000 1948K r-x-- libc-2.27.so
00007fdb53849000 2048K ----- libc-2.27.so
00007fdb53a49000 16K r---- libc-2.27.so
00007fdb53a4d000 8K rw--- libc-2.27.so
00007fdb53a4f000 16K rw--- [ anon ]
00007fdb53a53000 164K r-x-- ld-2.27.so
00007fdb53c62000 8K rw--- [ anon ]
00007fdb53c7c000 4K r---- ld-2.27.so
00007fdb53c7d000 4K rw--- ld-2.27.so
00007fdb53c7e000 4K rw--- [ anon ]
00007ffc12e4d000 132K rw--- [ stack ]
00007ffc12ebd000 12K r---- [ anon ]
00007ffc12ec0000 8K r-x-- [ anon ]
ffffffffff600000 4K --x-- [ anon ]
total 4520K
ps 查看进程信息
内核线程通常在 ps
输出中会显示在方括号内,例如 [kthreadd]
、[rcu_sched]
等,它们是由内核调度和管理的任务,虽然运行在内核态,但在进程表中都有对应的记录。
NFS共享服务配置
sudo vi /etc/exports
# 文件尾行添加
/mnt/nfs_share 192.168.0.104/24(rw,sync,no_subtree_check)
sudo exportfs -a
sudo systemctl restart nfs-kernel-server
配置行解析:
/mnt/hgfs/ubuntu16_share
这是你要共享(导出)的目录。NFS 服务器会将这个目录及其内容提供给指定的客户端挂载使用。
192.168.0.104/24
这是客户端的地址说明。一般来说,用“IP地址/前缀长度”的格式来指定一个网络范围,例如“192.168.0.0/24”表示整个 192.168.0.x 网络。
- 在这里“192.168.0.104/24”看起来有点不寻常,因为通常网络号的低位部分(例如 .0)才是标准写法。实际上,/24 表示网络掩码 255.255.255.0,因此所有 IP 地址的前 24 位必须匹配。如果按严格意义讲,“192.168.0.104/24”与“192.168.0.0/24”在逻辑上是等价的,因为掩码会使得网络部分为 192.168.0,而主机部分可以是任意值。不过,书写时建议使用网络基地址,以免引起歧义。
(rw,sync,no_subtree_check
)
这部分为导出选项,解释如下:
- rw:允许客户端对该目录进行读写操作(read-write)。
- sync:写操作同步执行,即 NFS 服务器在完成写操作前会将数据同步写入磁盘,从而保证数据一致性,但可能牺牲一定性能。
- no_subtree_check:当导出的是一个大文件系统中的子目录时,启用此选项可以避免服务器检查客户端请求的文件是否还在导出子目录内。这样做可以减少因为子目录移动或重命名引起的问题,同时提高性能,但在某些场景下可能带来安全风险。
编译&工具链接
不链接未使用变量
编译cflag中添加-ffunction-sections -fdata-sections
,不链接未使用变量到bin烧写文件中