Linux 小小笔记
有关文档查询¶
(当然也可以上网查询。)
tldr¶
(名字来源 TL;DR
: Too Long; Didn’t Read) 是在 https://boilingcong.ee/@gfis/105474645790577707 这里看到的。真的是大救星! 大!救!星!
基本上是提供了很多命令的常用用法,使用 tldr 命令名
就可以看到这种简化文档。
项目地址在这里: https://tldr.sh/ 官方版本似乎是基于 NodeJS 的,但我安装失败了然后改用了 Rust 版本的 tealdeer 。想尝试其它版本的可以在 https://github.com/tldr-pages/tldr/wiki/tldr-pages-clients 找到其它版本。
man¶
(Manual,不知道为什么直接简写成 man 了。) 传统上 linux 可以使用 man 命令名
查询命令所对应的文档。
—help¶
如果没有 man 页面的话,一般的命令行会提供一个 --help
选项,用于查看命令的用法。有些命令用的不是 --help
,这个时候可以把这些命令都尝试一下:
有些命令在直接使用 命令名
调用时也会输出命令用法,但是对于一些比较危险的命令可能还是不要这样寻找用法比较好。
Index by Command Name¶
aplay¶
请见下方 arecord ,是配套的。
arecord¶
aplay 和 arecord 都是 ALSA 附带的命令行工具, aplay 用于播放音频, arecord 用于录制音频。
简略用法推荐直接看 tldr 的文档。
一种特殊用法是:(来自 https://askubuntu.com/a/887658 )
# 将麦克风接收的声音直接播放出来,可能有延迟 arecord -f cd - | aplay - # 减少延迟,可以把 1 改大一点(e.g. 40)防止 overrun arecord -f cd --buffer-time=1 - | aplay --buffer-time=1 - # 一边播放一边保存 arecord -f cd - | tee output.wav | aplay -
可以人工引入延迟:(来自 https://stackoverflow.com/a/12852526 )
中间的 dd 的 16000 是延迟的字节数,不能直接推出具体的延迟时间。
asciinema¶
终端“录屏”工具,录下来的不是一般的视频而是带有文本信息的“动态终端”。(一个例子是在播放时可以直接把终端文本复制下来。)
更多请见 https://asciinema.org/ 。这里放一个例子:
atuin¶
命令行历史记录工具。有些命令写起来挺复杂的,但又不太常用,没几天就被埋没在历史记录里面了(最后大概率被自动清除掉)。 此时如果又要再写一次命令就非常烦人。
Zsh, Bash 等自带的历史记录管理通常很简单,没法实现复杂的历史记录管理(或者说需要挺麻烦的配置)。 例如,我大概率不会希望保存 cd
的历史记录(因为我用 zoxide 负责记录目录), 但是会希望保存一个复杂的 find
命令。而 atuin
就可以实现这一点。
BC / DC¶
bc
计算器程序,当然也可以考虑 dc
。
设置小数位¶
设置默认(放到 .bashrc
或 .zshrc
里):
来源: sjas@AskUbuntu .
brltty¶
介绍是 Braille display
comm¶
提取两个文件中的相同部分,这两个文件的各行必须按相同的排列方式排好序。
diff / diffuse¶
diff 比较按行来比较两个文本文档之间的差异。下面我直接抄 tldr diff
的了:
$ diff old_file new_file # 比较两个文本文档 $ diff -w old_file new_file # 比较时忽略空格 $ diff -y old_file new_file # 输出为两栏,一栏一个文档,更容易看出差异 $ diff -r old_directory new_directory # 比较目录的变更(文件名变更,权限变更等) $ diff -rq old_directory new_directory # 只比较目录的文件名变更
要可视化的话可能 diff -y
已经够用了,但有时可能有个 GUI 的更方便一些。这里随便找了一个叫 diffuse
的工具,基本就是 GUI 的 diff -y
。系统一般不自带,但包管理器里应该有。
fsck¶
FSCK (FileSystem ChecK (and repair))。
一般用法:
下面这个只支持 EXT4 / EXT3 / EXT2 文件系统。(便宜硬盘又多了一条理由用 EXT4 了呢。)
jq¶
想在命令行下处理 JSON?(系统大概不自带。)
lnxrouter¶
挺多功能的,最常用的可能是开个热点。安装的话 Arch 可以装 AUR 里的 linux-router
。 其它发行版可能只能到 Linux-router 项目地址 把 lnxrouter
整个文件下载下来了:
$ mkdir -p ~/.local/bin $ wget https://raw.githubusercontent.com/garywill/linux-router/master/lnxrouter -O ~/.local/bin/lnxrouter $ chmod a+x ~/.local/bin/lnxrouter $ lnxrouter -h
开热点:
注意热点可能会和 NetworkManager 等网络管理软件有冲突,可以尝试一下在什么地方先把 Wifi 给 disable 掉。再不行请求助搜索引擎。
Ncdu / du¶
都是计算文件占用空间的程序(硬盘使用,Disk Usage,故为 du),可以用于计算整个文件夹的占用空间以及分析哪一部分占用更多空间。 (应该是)所有的 Linux 系统都有 du
命令, ncdu
是命令行可视化版本,需要另外安装(用了 ncurses
所以是 nc du
= ncdu
)。
du
使用:
# 当前目录的总占用空间 du -h | tail -n 1 # 按占用空间排序当前目录的内容(从小到大排序,但从终端上看其实刚好) du -h | sort -h # 当然也可以对某个目录使用 du -h 某个目录 | tail -n 1 du -h 某个目录 | sort -h
视情况可能需要 sudo
,如:
sudo du -h / | sort -h
Ncdu
使用:
ocrmypdf¶
(这个需要额外安装。) 对 PDF 文件进行 OCR,简单用法:
ocrmypdf -l chi_sim+eng input.pdf output.pdf
ocrodjvu¶
(这个也需要额外安装。) 对 djvu 文件进行 OCR,简单用法:
ocrodjvu -o output.djvu -j 4 -l chi_sim+eng input.djvu
pdf2djvu¶
(这个当然还是需要额外安装。) 将 PDF 文件转换为 djvu 文件,简单用法:
pspp¶
严谨一点应该叫 GNU PSPP ,是 GNU 出品的 SPSS 的自由软件替代。具体差别不太清楚,统计相关工作的可以尝试一下。
scrcpy¶
一个将安卓屏幕投屏到 linux 上的程序(似乎也有 Windows 和 Mac 版): https://github.com/Genymobile/scrcpy (中文版页面: https://github.com/Genymobile/scrcpy )
顺便一提, scrcpy 可以同步粘贴版 ,一些时候会非常方便。
xclip¶
从命令行操纵粘贴版,可能需要额外安装。似乎不能应用于图片等文件类型。用法:
xdotool¶
用来模拟各种图形界面输入(如鼠标或键盘的动作)的程序。 一种常见用法是写脚本来执行某些重复的鼠标点击等操作。
但是 xdotool
只使用于 Xorg 环境。在 Wayland 下有各种(自称)替代方案, 但目前我试着能跑的只有 dotool ……
目前我最常用的就是在用 Xournal++ 修改大量 PDF 之后用 dotool
批量保存并导出。
实际应用¶
为 Python 程序编写 SystemD Service 文件¶
[Unit] Description=Some Python Program [Service] ExecStart=/bin/python3 /path/to/python_program.py Environment=PYTHONUNBUFFERED=1 [Install] WantedBy=default.target
关键点在于 Environment=PYTHONUNBUFFERED=1
,否则日志将有很大概率丢失一部分。 或者你也可以在脚本里的每一句输出后面都加上 sys.stdout.flush()
。
如果这个 Python 程序是一个 User Unit,那么你需要 sudo loginctl enable-linger <username>
来确保它可以开机自启。
将图片生成 PDF¶
答案改自 Martian: https://stackoverflow.com/a/26610519 :
for i in `ls -v *.jpg`; do convert $i ${i//jpg/pdf}; done gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=merged_file.pdf -dBATCH `ls -v *.pdf`
(两个命令均需要额外安装。 convert
来自 imagemagick,而 gs
来自 ghostscript。) 这里假设图片均为 .jpg
后缀,并且文件名中没有空格,最好是 1.jpg 2.jpg 3.jpg ...
这样的。 这个可以配合上面提到的 pdf2djvu ocrmypdf ocrodjvu 来使用。
从命令行操纵粘贴版¶
请见 xclip
从命令行打开文件¶
类似文件管理器双击,可以使用 exo-open
或者是 xdg-open
命令。可能需要额外安装。(在 Arch Linux 上的包分别是 exo
和 xdg-utils
。)
直接 exo-open 文件
或是 xdg-open 文件
即可,会自动使用文件类型对应的默认程序打开。
ZIP 文件解压中文乱码¶
使用 unzip
解压的话,文件名中有中文的时候可能会有乱码,可以转而使用 unar
命令:
来源: https://www.cnblogs.com/tonyc/p/8059802.html
Arch Linux 下需要安装 unarchiver 包:
与 tar 有关的解压¶
实时记录网络流量¶
netstat 在 Arch 下已经不赞同使用了。(见 Deprecation of net-tools )
现在的一个方法是安装 vnstat
, sudo systemctl start vnstat.service
之后,用 sudo vnstat --live [网络接口]
查看。其中 [网络接口]
可以用 vnstat --iflist
获取。
当然,更高大上的方法可能是用 Grafana 之类的。这里就不折腾了。
E2fsck 记录坏块¶
E2fsck 只适用与 EXT2, EXT3, EXT4 这些文件系统,其它文件系统还请自己查询操作方法。
一般来说,要将所有坏块都加入到分区的坏块列表里,常用的命令是 badblocks 或是 fsck 命令(在上面有提到)。 但有时候,错误在 SMART 里刷刷地冒,我们明确知道那几个出错扇区是一定是坏块了: 我们不想麻烦 fsck 再去做一次全盘扫描,而是希望可以直接把这几个扇区直接加入坏块表。
LBA 与磁盘逻辑块转换¶
SMART 里记录的是错误块的 LBA 地址,而 e2fsck 需要的是逻辑块编号。这两个之间的转换可以参考 Bad block HOWTO for smartmontools 。下面一段是这篇文章的一个摘要,以 GNU Free Documentation License 发布。
Copyright © 2004-2017 Bruce Allen
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts.
For an online copy of the license see https://www.gnu.org/licenses/fdl.html
下面的 /dev/sda
请相应更改。
获取 LBA 地址:(当然也可以从 gsmartcontrol
等工具里复制过来)
$ sudo smartctl --log=xerror /dev/sda | grep Error: | awk -F'= ' '{print $3}' | sort --unique 23421417
获取 LBA 块大小,并判断坏块对应的分区:
$ sudo fdisk -lu /dev/sda Disk /dev/sda: 123.5 GB, 123522416640 bytes 255 heads, 63 sectors/track, 15017 cylinders, total 241254720 sectors Units = sectors of 1 * 512 = 512 bytes Device Boot Start End Blocks Id System /dev/sda1 * 63 4209029 2104483+ 83 Linux /dev/sda2 4209030 5269319 530145 82 Linux swap /dev/sda3 5269320 238227884 116479282+ 83 Linux /dev/sda4 238227885 241248104 1510110 83 Linux
在上面的例子里,LBA 块大小是 512 字节,坏块 23421417
在 /dev/sda3
。然后获取逻辑块大小:
用下面的公式换算:
b = (int)((L-S)*512/B) where: b = 我们所求的逻辑块位置 512 = LBA 块大小(一般其实都是 512) B = 逻辑块大小 L = LBA 位置 S = fdisk -lu 给出的 Start 一列所展示的分区开始 LBA 位置 上面的 (int) 表示向下取整。
算出来例子里是 2269012
。把所有这样计算的结果按分区汇总,一行一个逻辑块位置分别存在不同文件里,例如:
=== sda3.badblocks.txt: 汇总属于 sda3 的坏块 === 2269012 2269013 2269014 2269015 === sda4.badblocks.txt: 汇总属于 sda4 的坏块 === (这里不列举了)
E2fsck 操作¶
其实得到逻辑块汇总文件之后很简单:
然后就是一路 y
确认了。这里还是建议手动按 y
而不是用 a
等选项,并在按 y
的时候留意一下坏块到底影响到了那些文件。
已挂载分区的操作¶
如果不是根分区的话,那可以把逻辑块汇总文件存到根分区里,重启到 Recovery shell ,再使用上面的 e2fsck
命令。
如果是根分区的话……我还没有机会尝试。您可以尝试一下上面的 Recovery shell 途径,如果不幸的话,您可能需要一个 Live USB 。
弹出移动硬盘¶
毕竟是移动硬盘, umount
不够的,最好的还是让硬盘彻底停转之后再拔。 弹出有多种方法,不同设备、不同电脑可能有效的方法都不同,可以依次试一下: (来自 Eject USB drives / eject command 。)
(以 /dev/sdd
为例,请在下面的命令中将其替换为对应的设备。)
sudo eject /dev/sdd
gio mount -e /dev/sdd
gio mount -t /dev/sdd
sudo udisksctl power-off -b /dev/sdd
-
更手动一点:
在 Virtual Console 里显示中文¶
Linux 默认的 Virtual Console( Ctrl+Alt+F1
组合键切换到的那种)是不支持中文显示的,也没有什么办法能让它直接显示中文。 要在终端里显示中文,我们需要把默认的给替换成 KMSCON 。
Arch 系统的可以看 Arch Wiki 上的 KMSCON 配置教程,其它系统可能只能自己编译。安装好之后需要在配置文件 /etc/kmscon/kmscon.conf
里选择中文字体:
最后启用 sudo systemctl enable [email protected] && sudo systemctl start [email protected]
, tty8
里的数字即为 Ctrl+Alt+F8
里的数字。
如果对 KMSCON 的历史感兴趣的话可以看看 https://aur.archlinux.org/packages/kmscon-patched-git#comment-907249 这个评论。
评论