常用的 shell 命令
常用的 shell 命令: find
, cat
根据文件 inode 信息查找文件
文件系统错误,有错误 inode 信息
1
EXT4-fs (sda7): Delayed block allocation failed for inode 23596895 at logical offset 673 with max blocks 1 with error 117
查找文件
1
find /home/ -inum 23596895 -print
sda7 挂载在 home 目录下。
创建一个不能登录的账户
创建一个 git 账户,不需要其登录系统
1 | useradd -s /bin/false -M git |
-s /bin/false
:禁止 login 选项,用户无法登录且不会有任何提示-M
:不创建用户 Home 目录
字符串转二进制
1 | echo 001122334455 | xxd -r -ps > test // 6 个字节 |
xxd
: 用于用二进制或十六进制显示文件的内容-r
: 把 xxd 的十六进制输出内容转换回原文件的二进制内容-ps
: 以 postscript 的连续十六进制转储输出,这也叫做纯十六进制转储
查看中断与 CPU 的绑定关系
1 | cat /proc/interrupts | grep intel | cut -d: -f1 | while read i; do echo -ne irq":$i\t bind_cpu: "; cat /proc/irq/$i/smp_affinity_list; done | sort -n -t' ' -k3 |
内存读写速度测试
1 | dd if=/dev/zero of=/dev/null bs=1M count=1024 |
查看当前 CPU 运行频率
1 | watch -n 0.1 "cat /proc/cpuinfo | grep \"^[c]pu MHz\"" |
文件指定行数的字符大写转小写
1 | find -name "*.md" | xargs sed -i '4,9s/.*/\L&/' |
删除所有文件行尾空格
1 | find source/_posts/ -name "*.md" | xargs sed -i 's/[ ]*$//g' |
进程 CPU 占有率排序
1 | ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu |
判断进程在哪个 CPU 核运行的方法
ps
1 | ps -o pid,psr,cmd -p <pid> |
PSR
: 进程分配的 CPU id
top
top
命令也可以显示 CPU 被分配给哪个进程
- 进入
top
后,按f
键,出现 Fields Management 管理界面,(空格键选中) 选择P
选项 (P = Last Used Cpu (SMP)) - top 界面中目前使用的 CPU 将出现在”P”(或 “PSR”)列下
1 | top -p <pid> |
查看单独一个进程的信息
杀死僵尸进程
1 | kill -HUP <PID> |
iptux–局域网数据传输–飞秋
Linux 中的 iptux 与 window 中的飞秋可以相互进行文件传输
1 | sudo apt install iptux |
调整防火墙以允许使用 TCP/UDP
2425
端口1
sudo ufw allow 2425
中文乱码
设置编码方式:cp936
(orgbk
)工具栏设置: Tools -> Preferences -> System -> Candidate network conding:
cp936
配置文件
- 配置文件:
.iptux/config.json
- 日志:
.config/iptux/
- 配置文件:
数据销毁和日志清理
bleachbit
bleachbit 是一款开源免费的系统清理工具,功能类似 Windows 平台的 CCleaner
shred
shred 功能简单的说就是涂鸦,把一个文件用随机的字符码篡改的一塌糊涂。其宗旨就是更安全地帮助删除一个机密文件
wipe
可安全地删除磁存储器中的文件,后续无法恢复已删除文件或目录的内容。
CPU 信息
- lscpu
- lshw
1 | # lscpu |
socket
: 主板上插 CPU 槽的数量core
: CPU 上的核数 (物理核)thread
: core 上的硬件线程数 (逻辑核)
nproc
获取可用 CPU 的数量
1 | nproc |
apt build-dep
1 | sudo apt-get build-dep mesa |
build-dep causes apt-get to install/remove packages in an attempt to satisfy the build dependencies for a source package. By default the dependencies are satisfied to build the package natively. If desired a host-architecture can be specified with the
--host-architecture
option instead.
根据源码编译时所需的关系包进行搜索并下载安装。建立要编译软件的环境.
1 | $sudo apt build-dep mesa |
tasksel
tasksel
命令是用来安装 “任务” 的,任务就是一些软件的组合,比如 LAMP 这个任务,就是由 apache,php,MySQL 等软件包组成,tasksel 安装任务就是安装一系列的软件包而已。
通过 tasksel 可以直接在 server 版,进行 ubuntu 桌面的安装
ubuntu Desktop
1 | sudo apt update |
tasksel 选择 ubuntu Desktop 进行安装,等待安装完成
1 | sudo tasksel install ubuntu-desktop |
1 | $tasksel --list-tasks |
find
1 | [root@linfeng etc]# find . -type f -name "*" | xargs grep "root/init.sh" |
-type f
: 表示只找文件-name "xxx"
: 表示查找特定文件;也可以不写,表示找所有文件
批量修改文件名后缀
mv ./htxynl.f90 ./htxynl.f77
1 | find . -name "*.f90" | awk -F "." '{print $2}' | xargs -i -t mv .{}.f90 .{}.f77 |
cat
cat 和重定向进行写文件操作
1 | =====>$cat > test.sh << EOF |
结束方式:
- 输入
EOF
,最好使用 EOF - 使用
Ctrl+d
写入方式:
>
: 以覆盖文件内容的方式,若此文件不存在,则创建>>
: 以追加的方式写入文件
tee
1 | make USE_NINJA=false USE_CLANG_PLATFORM_BUILD=false 2>&1 | tee build.log |
ssh
跨服务器拷贝文件
1 | xbin="u-boot-with-spl-mbr-gpt.bin" |
ssh 的 key 值
- 权限必须是
600
1
chmod 600 ~/.ssh/authorized_keys
- 添加 key 值
1
ssh-add ~/.ssh/authorized_keys
- 查看生效 key 值
1
ssh-add -l
- 测试 key 值
1
ssh -T git@github.com
- 免密登录
1
ssh-copy-id ssh name@ip
- 使用多个 key 值
man ssh_config
1 | cp /etc/ssh/ssh_config ~/.ssh/config |
编辑~/.ssh/config
1 | ... |
ssh 登录到远程的特定目录
1 | ssh -t xx@192.168.1.1 "cd /home/xx/test; bash" |
或
1 | ssh -t xx@192.168.1.1 "cd /home/xx/test && bash" |
-t
: 标志用于强制分配伪终端
通过 root 账户 ssh 登录
在 ubuntu 系统中默认不能使用 root 账户进行 ssh 登录
开启 root 账户登录 ssh,打开 /etc/ssh/sshd_config
配置
1 | PermitRootLogin yes |
默认配置
#PermitRootLogin prohibit-password
重启 ssh 服务
1 | sudo systemctl restart sshd.service |
ssh 数据的压缩传输
1 | ssh -CX xxx@192.168.1.1 |
-C
: 压缩传输模式-X
: 启用 X11 转发,远程打开使用图形应用
tftp
开发板(busybox)
1 | tftp -g -r user/xxxx/system.tar 192.168.4.13 |
tftp 的服务器 (PC):
1 | # /etc/default/tftpd-hpa |
file: /etc/default/tftpd-hpa
cpio
解压,制作 ramdisk
解压
1
2
3
4gunzip rootfs.cpio.gz
mkdir tmp
cd tmp
cpio -i -F ../rootfs.cpiocode: unzip_ramdisk.sh
制作
1
find . | cpio -o -Hnewc |gzip -9 > ../image.cpio.gz
-H
: 选项指定打包文件的具体格式,要生成 init ramfs,只能用newc
格式
minicom
记录串口的输出日志:
1 | #!/bin/sh |
ttyUSB0 权限问题
每次使用串口工具时,需要 sudo 权限,为了普通用户方便可以通过以下命令解决:
1 | sudo usermod -a -G dialout ${USER} |
设置后需要重启电脑,使用 minicom 时不用 sudo
串口输出增加时间戳:
1 | Ctrl + a ; n |
串口打印内存信息:
1 | Ctrl + a; f; m |
Ctrl + a; f
(send break) 进行发送命令,m
查看当前内存状态的命令
类似与:echo m > /proc/sysrq-trigger
break signal | |
---|---|
m | 查看当前内存状态的命令 |
内核提供接口
drivers/tty/sysrq.c
, 通过按键的方式获取内核的调试信息
1 | static struct sysrq_key_op *sysrq_key_table[36] = { |
enable the magic SysRq key
https://www.kernel.org/doc/html/latest/admin-guide/sysrq.html
配置内核时,您需要对’Magic Sysrq 键(CONFIG_MAGIC_SYSRQ=y)。在运行使用 SYSRQ 的内核时,/proc/sys/kernel/sysrq
控制通过 SYSRQ 键调用允许的函数。该文件中的默认值由 CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE 设置,该值默认为 1。
/proc/proc/sys/kernel/sysrq
中可能值的列表:
- 0 - disable sysrq completely
- 1 - enable all functions of sysrq
- 参考配置
1 | CONFIG_MAGIC_SYSRQ=y |
kermit 文件传输
- 安装 ckermit
1 | sudo apt install ckermit |
注:ubuntu20.04 没有 ckermit,可以手动下载 ubuntu18.04 的版本安装,自测可用。
- 配置 kermit
在配置文件 /etc/kermit/kermrc
中追加以下配置:
1 | set line /dev/ttyUSB0 |
- 文件发送
快捷键:Ctrl + a + s
,选择 kermit
sshfs
1 | sudo sshfs xxx@192.168.1.2:/home_back/xxx/work/aaa /home/user/aaa -o gid=1000,uid=1000,allow_other |
md5sum — 字符串
1 | $echo -n '123456' | md5sum |
查看硬盘型号和序列号
1 | sudo hdparm -i /dev/sda |
获取计算机硬件信息
1 | sudo dmidecode |
dmidecode 遵循 SMBIOS/DMI 标准,其输出的信息包括 BIOS、系统、主板、处理器、内存、缓存等等。
格式化 xml
1 | xmllint --format run_xunit.xml |
在 vim 中直接敲 xml, 进行格式化
tldr
Too Long Don’t Read!
查找各种命令的常用例子
1 | sudo apt install tldr |
1 | $tldr ps |
top
命令相关参数
参数 | 作用 |
---|---|
1 | 显示每个 CPU 的运行情况 |
z | 进入高亮模式(终端红色字体) |
b | 高亮显示正在运行的命令 |
c | 显示 command 列的所有信息,包括参数 |
t | 更直观的方式展示 task/cpu 信息,像 htop 一样 |
m | 更直观的方式展示 memory 信息,像 htop 一样 |
M | 根据内存使用率进行排序,% MEM 列 |
P | 根据 CPU 使用率进行排序,% CPU 列 |
sed
参考:sed 命令详解
将当前目录 (包括子目录) 文件中的特定字符串并进行替换
1 | sed -i s/jpeg_encode.h/jpeg_codec.h/g `grep jpeg_encode.h -rl --include="*.c" ./` |
-i
: 表示操作的是文件反引号
: 表示将 grep 命令的的结果作为操作文件
当前目录文件替换
1 | sed -i s/xxxx/yyyy/g ./*.txt |
pkg-config
用于获得某一个库 / 模块的所有编译相关的信息
1 | $pkg-config --libs --cflags gl |
pkg-config 默认的搜索路径
1 | $pkg-config --variable pc_path pkg-config |
PKG_CONFIG_PATH
配置 pkgconfig 文件路径
1 | echo $PKG_CONFIG_PATH |
运行时库的连接
- 在环境变量
LD_LIBRARY_PATH
中指明库的搜索路径。 - 在
/etc/ld.so.conf
文件中添加库的搜索路径。
LD_LIBRARY_PATH
配置运行时加载库的路径
1 | echo $LD_LIBRARY_PATH |
命令行直接打开浏览器进入指定网页
1 | $firefox --new-window https://winddoing.github.io |
命令行直接打开文件管理(ubuntu)
1 | $nautilus |