目录

读《Linux 创客实战》

本文是 《Linux 创客实战》 一书的笔记,主要涉及 Linux 和树莓派的知识。

Linux 知识

信号

  • Ctrl+T:发送 SIGINFO 信号,在执行 dd 命令时可以检查进度。
  • kill PID:发送正常终止的信号。
  • kill -1 PID 发送一个重启信号;
  • kill -2 PID 发送中断信号,与按 Ctrl+C 相同;
  • kill -9 PID 发送 SIGKILL 信号,并立即关闭进程;

shell

在 bash 脚本中,反引号表示执行其中的代码,例如输出当前时间:

1
2
echo `date`
# Sun Dec 29 11:51:50 CST 2019

Ctrl+Z、& 和 fg

Ctrl+Z 暂停程序执行(进入睡眠),fg 命令可以恢复到前台运行。

在命令的末尾加 & 字符可以让程序启动后在后台运行,但日志仍然会输出到控制台。fg 命令可以将程序拉到前台执行。

输出重定向

  • command > file 将输出重定向到文件;

  • command >> file 将输出以追加的方式重定向到文件。

  • command &> file 相当于 command > file 2>&1

  • command &>> file 相当于 command >> file 2>&1

2>&1 表示将 stderr 重定向到 stdout。

同时运行多个命令

  • A && B 操作符,相当于逻辑与,只有 A 命令执行成功才会运行 B 命令;
  • A || B 操作符,相当于逻辑或,只有 A 命令执行失败才会运行 B 命令;
  • A;B 连续运行 A 和 B 命令,不管命令的结果。

ls 命令

ls 命令输出的文件特殊权限选项有:

  • d 表示目录;
  • l 表示链接;
  • s 表示文件应该以所有者权限运行;
  • t 表示只有所有者可以删除或重命名文件;
  • - 表示一般文件;

ls 命令输出的 total 160 表示所有文件使用的磁盘区块的总数;

ls 命令选项:

  • -X 按扩展名排序;
  • -S 按文件大小排序;

top 命令

top 命令的含义是 table of processes,即进程表。

僵尸进程(zombie process)通常是已完成正在执行的操作的子进程,但是必须等待其父进程退出才能从进程列表中清除。

top 第一行的 load average 指的是平均 CPU 负载。

Cpu 行各部分含义:

  • us 用于运行正常用户进程的时间百分比;
  • sy 用于运行系统内核的进程的时间百分比;
  • ni 用于运行优先级或降优先级进程上的时间百分比;
  • id 闲置的时间百分比;
  • wa 用于等待 I/O 完成的时间百分比;
  • hi 硬件中断时间的百分比;
  • si 软件中断时间的百分比;
  • st 仅适用于虚拟化系统,只是从系统中偷走的时间百分比,因为主机系统忙于执行其他操作;

内存 Mem 和虚拟内存 Swap 行的含义:

  • total 总量
  • used 使用量
  • free 可用量
  • buffers 当系统挂载或访问连接到系统本身的文件系统时使用的内存;
  • cached mem 来自文件和程序的实际数据。

进程行的含义:

  • PR 进程的当前优先级;
  • NI 进程的 nice 值或用户自定义的优先级;
  • VIRT 进程需要用到的内存总量;
  • RES 进程实际用到的内存量;
  • SHR 进程可用的共享内存量;
  • S 进程的当前状态,D 不间断睡眠,R 运行,S 睡眠,T 追踪或停止,Z 僵尸。

常用操作快捷键:

  • x 突出显示当前的排序字段;
  • P%CPU 排序(默认);
  • M%MEM 排序;
  • N 按 PID 排序;
  • T 按 TIME 排序;
  • k 杀死进程;
  • h 帮助;
  • q 退出。

ps 命令

ps 命令默认只显示当前用户正在运行的进程,若要获取所有进程的列表,请使用 -ef 选项。

grep 命令

常用的选项:

-e 同时搜索多个术语(逻辑或的关系),例如:

1
cat run.log | grep -e "a" -e "i"

-i 选项不区分大小写,例如:

1
cat run.log | grep -i "simple"

-c 计算多少行包含搜索项,例如:

1
cat run.log | grep -c "is"

树莓派知识

树莓派重启和关机

使用 shutdown 命令,以 root 权限执行。

关机

1
sudo shutdown -h now

重启

1
sudo shutdown -r now

实现开机启动

将脚本或程序添加到 /etc/rc.local 中执行;

GPIO 操作

操作 GPIO 有两个模块,其中一个是 RPi.GPIO,另一个是 pigpio。后者以服务器的形式在系统中运行,并且能够被 C 和 Python 程序调用,甚至通过网络被另一台树莓派调用。

I2C 协议和 SPI 协议都是串行通信协议,I2C 协议的通信速度比 SPI 慢,但是只需要两根线,SPI 设备需要至少 4 根线。

播放音频和视频

推荐使用 omxplayer,理由有:

  1. 包含在树莓派的发行版中;
  2. 可以使用 GPU 解码;
  3. 支持许多数字格式。

播放:

1
omxplayer -o [local|hdmi] filename

设置音量:

1
omxplayer -o [local|hdmi] --vol <millibels> filename

millibels 表示在 500(大声)和 -4000(非常安静)之间的一个数字,而 0 是正常的。

在命令行中控制树莓派全局音量,可以使用 alsamixer 程序。

其他

构建系统时,应该遵循 KISS 规则,即

Keep It Simple, Stupid!

TTY 来自 TeleType 这个词,指的是一种与电脑通信的方法。在计算机的早期,你需要使用电传打字机或电传打印机来打出想要进入计算机的信息。

VNC 是 Virtual Network Computing 的缩写,虚拟网络计算。