积累沉淀

待山花烂漫,化茧成蝶

Linux常用命令

前言:熟练掌握常用的Linux命令,可以提高生产力,研究问题的能力。常用命令包括:文件操作,系统查看,GCC命令,GDB调试等。这些都在系统开发中起到很重要的作用。

Linux常用命令

file-文件常用命令

  • 查看
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 匹配查找文件
ls /etc/a*.conf
# 当前目录递归查找
grep "#define container_of" -R .
# 比较文件的差异
diff /etc/service tmp
# 查看文件内容 | 统计file文件内容的行数
cat file
cat file | wc -l
# 查看文件最后几行
tail -n 10 out.log (-f 动态模式)
# 动态查看文件最后几行内容
tail -n 10 out.log -f
# 较好的方式显示文件的大小
ls -lh
# 查看文件的类型
file a.out
# 分析文件/目录占用磁盘空间大小 默认是以k字节为单位
du abc.c/directory
  • 修改
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 创建多级目录
mkdir -p a/b/c
# 创建文件
touch a.txt
# 创建软链接
1n -s /root/.acme.sh/acme.sh /usr/local/bin/acme.sh
# 更改文件的权限 常用权限664可读可写可执行
chmod a+x a.out
# 将 a.out文件的所有者更改为 root 用户
chown root a.out
# 设置文件或目录的 setuid 位。当一个带有 setuid 位的文件或目录被执行时,
# 它会以该文件或目录的所有者的权限而不是执行它的用户的权限来运行。
# 这对于需要以提升的权限运行但不能作为 root 运行的程序非常有用。
# 如果您想允许用户运行需要 root 权限的程序而不给他们访问 root 帐户,
# 可以在程序文件上设置 setuid 位。
chmod u+s mysu

system-系统常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 查看当前用户的资源限制,如最大打开文件数、最大进程数等等
ulimit -a
# 看可执行文件的系统调用是如何发生的
strace ./a.out
# 查看调用时间
time ./a.out
# 显示所有的环境变量
export
# 显示进程,及进程下子进程
ps axf
# 显示进程不显示递进关系
ps axm
# 显示进程的状态信息,包括进程的 PID、PPID、CPU 占用率、内存占用率等等
ps axj
# 显示进程和线程
ps ax -L
# 打印系统进程树
pstree
# 查看程序的进程空间的分布
pmap p_id
# list all signal
kill -l
# 杀死进程
kill pid
# 查看系统进程间通信的信息
ipcs

network-网络查看

1
2
3
4
5
6
7
8
9
10
11
12
# 查看网络环境
ip addr
# 查看网卡信息
ip add sh
# 查看ip路由表的命令
ip ro sh
# 添加默认路由
ip ro add default via 192.168.1.125
# local pc udp info
netstat -anu
# local pc tcp info
netstat -ant

gcc-编译常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 预处理
gcc -E hello.c
# 将预处理结果保存在hello.i文件中
gcc -E hello.c > hello.i
# 将预处理结果编译成汇编文件
gcc -S hello.i
# 将汇编文件编译成目标文件
gcc -c hello.s
# 将目标文件链接成可执行文件
gcc hello.o -o hello
# 编译
gcc hello.c
# 编译并生成可执行文件
gcc hello.c -o myhello
# 编译并生成可执行文件(makefile)
make hello
# 反汇编 汇编码-d
objdump -d a.out
# 追踪gcc a.c 的过程,包括gcc 启动的其他程序
strace -f gcc a.c
strace -f gcc a.c 2>&1 | grep execve
# 移除调试信息
strip test_sqlist

gdb-调试器常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 载入程序
gdb a.out
# 开始运行程序
run/r
# 运行第一条指令
starti
# 查看汇编代码
layout asm
# 单步查看->汇编单步
si
# 查看寄存器代码
info registers
# 打印系统调用栈
bt
# 打印可执行程序的进程号
info inferiors
# 打印寄存器rdx的值
print/p $rdx
# 开始记录
target record-full
# 观察寄存器rax的值
watch $rax
# 在地址7c00处设置监视点
watch *0x7c00
# 单步回退查看->汇编单步
rsi
# 调试源代码
layout src
# 可以使其他处理器(线程不要干扰)
set scheduler-locking on
# switching to thread 1
thread 1

Vps+科学上网

v2ray和xray

  • 安装v2ray和xray
1
source <(curl -sL https://multi.netlify.app/v2ray.sh) --zh 
  • 关闭防火墙
1
2
3
4
5
6
# centos 停止防火墙
systemctl stop firewalld.service
# centos 禁用防火墙
systemctl disable firewalld.service
# Debian禁用ufw防火墙
sudo ufw disable

安装tls

  • 安装acme证书
1
curl https://get.acme.sh | sh
  • 安装socat
1
apt install socat
  • 添加软链接
1
2
mkdir -p /usr/local/bin
1n -s/root/.acme.sh/acme.sh /usr/local/bin/acme.sh
  • 设置默认的CA
1
acme.sh --set-default-ca --server letsencrypt
  • 开放80端口:非必需
1
ufw allow 80
  • 申请证书ipv4默认方式
1
acme.sh --issue -d freeqing.dpdns.org --standalone -k ec-256
  • 申请证书ipv6方式
1
acme.sh --issue -d freeqing.dpdns.org --standalone -k ec-256 --listen-v6 --insecure
  • 安装或复制证书到特定位置,非必须
1
acme.sh --installcert -d freeqing.dpdns.org --ecc --key-file  /etc/v2ray/server.key --fullchain-file /etc/v2ray/server.crt

ssh免密登录

  • 检查现有 SSH 密钥(可选)现代、更推荐的 Ed25519 算法
1
ls -al ~/.ssh
  • 生成新的 SSH 密钥
1
ssh-keygen -t ed25519 -C "your_email@example.com"
  • 将 SSH 密钥添加到 ssh-agent(管理密钥)
1
2
3
# 在后台启动 ssh-agent
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
  • 将 SSH 公钥添加到你的 GitHub 账户
1
2
# 将公钥复制到剪贴板
cat ~/.ssh/id_ed25519.pub | clip
  • 测试 SSH 连接
1
ssh -T git@github.com
Buy me a coffee please.