Skip to content

Latest commit

 

History

History
2528 lines (1747 loc) · 76.3 KB

Linux_Note.md

File metadata and controls

2528 lines (1747 loc) · 76.3 KB
aliases
tags
linux
archlinux
centos
fedora
ubuntu
tar
shell
network
created 2023-08-18 12:44:52 -0700
modified 2026-10-06 19:34:14 -0700

Linux 笔记


目录


终端


版本

内核版本

可以到内核官网查看内核信息:Linux Kernel

查询系统版本

cat 方式

cat /proc/version

uname

# 查询版本所有信息
uname -a

# 查询linux内核版本信息
uname -r
uname 选项
-a, --all                按如下次序输出所有信息,其中若 -p 和 -i 的
                             探测结果为未知,则省略:
-s, --kernel-name        输出内核名称
-n, --nodename           输出网络节点的主机名
-r, --kernel-release     输出内核发行号
-v, --kernel-version     输出内核版本号
-m, --machine            输出主机的硬件架构名称
-p, --processor          输出处理器类型(不可移植)
-i, --hardware-platform  输出硬件平台(不可移植)
-o, --operating-system   输出操作系统名称
    --help        显示此帮助信息并退出
    --version     显示版本信息并退出

Tip

uname 可以看到当前系统用到的 内核版本。

lsb_release

LSB 是 Linux Standard Base(Linux 标准库)的缩写, lsb_release 命令 用来与具体 Linux 发行版相关的 Linux 标准库信息。

[!info] LSB 译法

LSB 的译法有 Linux 标准库,Linux 标准规范

显示所有版本信息:

lsb_release -a

lsb 其他选项和参数:

  • -r:发行版版本号
  • -c:发行版代号
  • -d:发行版描述信息
  • -i:发行商名称 ID
  • -v:lsb 版本信息

配置文件

  • profile 文件

    profile(/etc/profile) 文件用于设置系统级的环境变量和启动程序,在这个文件下配置会对所有用户生效。

    ~/.profile 这是用户级别的环境变量配置文件。

    大多数发行版使用的是 ~/.profile 。因为 ~/.profile 文件可以被所有 Shell 读取,而 ~/.bash_profile 仅能被 Bash Shell 读取。

  • bashrc

    bashrc 只会被 bash shell 调用。

    bashrc 文件分为两种级别:

    • 系统级:/etc/bashrc
    • 用户级:~/.bashrc

    bashrc 是交互式非登录 Shell 时被执行。

  • bash_profile 文件

    bash_profile 文件是作为交互式登录 Shell 被调用情况下,被读取执行。

在登录 Shell 的 bash 环境时,会依序执行以下三个文件其中一个:

  • ~/.bash_profile
  • ~/.bash_login
  • ~/.profile

根据使用者账号,于其 homt 目录内读取 ~/.bash_profile ;

读取失败则会读取 ~/.bash_login ;

再次读取失败则读取 ~/.profile

Tip

这三个文件设定基本无差别,仅读取上有优先关系

[!tip] path 变量路径 路径末尾不能以 / 结尾,否则将导致整个 PATH 变量出错。


输入输出

标准输入输出

管道

基本用法:command1 | command2

限制:command2必须支持从标准输入中读取数据,否则管道无法直接使用。

xargs

xargs:参数转换器,用于从标准输入构建和执行命令。它接受一个命令的输出,并将其作为参数提供给另一个命令。

xargs是为了使一些不支持 标准输入作为参数的命令,如echo,能够接收标准输入而存在的一个「转换器」,即将标准输入输出 的数据转换为普通参数,让那些只支持参数的命令能够接收。

xargs与 管道 简单对比示例:

$ echo hello world | echo                                                                                  
# silascript @ (base) in ~ [1:53:17] 
$ echo hello world | xargs echo
hello world

常用参数及选项:

-n:限制每个命令的参数数量

示例:

$ echo hello world | xargs -n 1 echo
hello
world

环境变量

env

env 命令是用于显示系统中已存在的环境变量,以及在定义的环境中执行指令。

[!info]

Shell 文件开头的那个 #!/usr/bin/env bash 命令,意思就是使用 env 去找 Bash 解析器来解析当前的 Shell 脚本。


用户

更改用户组:

# -R 选项是表示递归文件或目录
chgrp -R 用户名 目录名

Tip

-R:表示递归,即当前目录名的所有文件及子目录其及文件均更改。下面那些 更改用户名,这个参数也同样适用。

更改用户名: ^linux-chown

# -R 选项是表示递归文件或目录
chown -R 用户名 文件名
# 连同用户组一起改
chown -R 用户名:用户组名 文件名

权限

chmod 命令是用来修改用户权限的。

id 命令

[!quote]

Linux 内核其实只认数字:UID(用户 ID)和 GID(组 ID)。用户名只是给人类看的昵称而已。

id命令能查看当前系统 UID 及GID。

示例:

$ id
uid=1000(silascript) gid=1000(silascript) 组=1000(silascript),90(network),98(power),956(docker),984(users),987(storage),991(lp),994(input),996(audio),998(wheel)

常用参数:

  • -u:显示用户 ID
  • -g 或 --group:显示用户所属组的 ID
  • -G 或 --goups:显示用户所属附加组的 ID
  • -n或 --name:显示用户、所属组及附加组的名称,不能单独使用,需跟-u、-g 等一起使用
$ id -un  
silascript

打包压缩

Linux 下打包和压缩是分两部分的。

打包用的是 Tar 命令。

压缩工具 在 Linux 上常用的主要有以下四种:

Tar 命令

Linux 下最常用的打包程序就是 tar。

tar 本身只能用来打包,不具备压缩能力。但 tar 可以与 gzip、bzip2 等压缩工具结合一起来用。

tar 包以 .tar 为后缀名。

tar 常用选项和参数:

  • -f(--file):指定存档或设备中的文件(默认是 「-」,表示 标准输入/输出)
  • -v (--verbose):显示文件处理过程
  • -t (--list):查看存档中的文件列表
  • -C (--directory):提取存档到指定目录
  • -c (--create):创建一个新的存档,即「压缩」
  • -x (--extract):从存档提取文件,即「解压」
  • -r (--append):将文件附加到存档结尾,即增加文件到包中
  • -u (--update):仅将较新的文件附加到存档中,即更新

-u 只会添加 mtime 初修改过的文件;-r 直接添加,不检查 mtime。


压缩工具

gzip

gzip 是 GNU 组织开发的一个压缩程序,后缀名为 .gz 。

与 gzip 相对的解压的程序是 gunzip。

与 tar 配合使用,通过 -z 参数来调用。

使用示例:

# 打包并使用 gzip 压缩
tar -czvf xxx.tar.gz *.jpg

# 解压
tar -xzvf xxx.tar.gz

# 查看包内文件
tar -tzf xxx.tar.gz

# 如果加上v 可以看到包内文件的如权限等详细信息
tar -czvf xxx.tar.gz
tar -xzvf xxx.tar.gz

# 另上-C 参数 解压到指定目录
tar -xzvf xxx.tar.gz -C ./xxx

bzip2

bzip2 是一个压缩能力更强的压缩程序,后缀名为 .bz2。

与 bzip2 相对的解压程序是 bunzip2。

与 tar 配合使用,通过 -j 参数来调用。

使用示例:

tar -cjf xxx.tar.bz2 *.jpg

# 解压
tar -xjf xxx.tar.bz2

# 如果加上v 可以看到包内文件的如权限等详细信息
tar -cjvf xxx.tar.bz2
tar -xjvf xxx.tar.bz2

compress

compress 也是一个压缩程序,不过用得比较少,后缀名为 .Z。

与 compress 相对的解压程序是 uncompress。

与 tar 配合使用,通过 -Z 参数来调用。

使用示例:

tar -cZf xxx.tar.Z *.jpg

# 解压
tar -xZf xxx.tar.Z

# 如果加上v 可以看到包内文件的如权限等详细信息
tar -cZvf xxx.tar.Z
tar -xZvf xxx.tar.Z

XZ Utils

XZ Utils 是使用 「LZMA」算法的无损数据压缩的压缩程序。

因为早期 xz 与 tar 没有整合,所以压缩和解压得分「两步走」。

常用选项:

  • -z,--compress:压缩文件并删除被压缩文件
  • -d,--decompress:解压并删除压缩包
  • -k,--keep:压缩或解压时保留源文件
  • -0...9:设置压缩等级,0~9,不设置默认为 6
  • -v:压缩和解压过程详细信息

示例:

  • 压缩
# 先 tar
tar -cvf xxx.tar xxx
# 压缩
xz -z xxx.tar
  • 解压
# 解压 xz
xz -d xxx.tar.xz
# 如果保留压缩包
xz -dk xxx.tar.xz

# 解压 tar包
tar -xvf xxx.tar

与 tar 配合使用,通过 -J 参数来调用。

低版本的 tar 不支持,就得先 tar 再使用

示例:

# 压缩
tar -Jcf xxx.tar.xz *.jpg

# 解压
tar -Jxf xxx.tar.xz

zip

zip 能通用于 Linux 和 Windows。

压缩

语法:zip(选项)(参数)

zip 最终压缩包名称 要打包的文件或目录

常用参数

-r:递归,包括了目标文件的目录一起打包 -q:不显示压缩过程 -j:不会将目标文件的目录一起打包,但子目录也同样不会打包

示例:

zip -q -r xxx ./xxx/*.txt

Tip

压缩包不用写后缀,最终打成包后是自动加上 .zip 后缀的。

解压

unzip xxx.zip:在当前目录下解压。

unzip xxx.zip -d ./xxx :解压到指定目录。

unzip -v xxx.zip:不解压查看压缩包中的目录。

$ unzip -v SwitchWindow-0.5.0.zip 
Archive:  SwitchWindow-0.5.0.zip
649c8df77df115f9de7635553523d61874df9e1b
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
       0  Stored        0   0% 2023-08-08 00:51 00000000  SwitchWindow-0.5.0/
      19  Stored       19   0% 2023-08-08 00:51 a7e541a5  SwitchWindow-0.5.0/.gitattributes
      16  Stored       16   0% 2023-08-08 00:51 79d3c83b  SwitchWindow-0.5.0/.gitignore
       3  Stored        3   0% 2023-08-08 00:51 fa693369  SwitchWindow-0.5.0/.python-version
     248  Defl:N      135  46% 2023-08-08 00:51 d765ba2c  SwitchWindow-0.5.0/Default (Linux).sublime-keymap
     248  Defl:N      135  46% 2023-08-08 00:51 d765ba2c  SwitchWindow-0.5.0/Default (OSX).sublime-keymap
     248  Defl:N      135  46% 2023-08-08 00:51 d765ba2c  SwitchWindow-0.5.0/Default (Windows).sublime-keymap
     493  Defl:N      249  50% 2023-08-08 00:51 66341975  SwitchWindow-0.5.0/Default.sublime-commands
    1087  Defl:N      630  42% 2023-08-08 00:51 cf152373  SwitchWindow-0.5.0/LICENSE
     743  Defl:N      318  57% 2023-08-08 00:51 9ba993f2  SwitchWindow-0.5.0/Main.sublime-menu
    2560  Defl:N     1047  59% 2023-08-08 00:51 ffa06466  SwitchWindow-0.5.0/README.md
    4603  Defl:N     1326  71% 2023-08-08 00:51 5bba7037  SwitchWindow-0.5.0/plugin.py
--------          -------  ---                            -------
   10268             4013  61%                            12 files

unzip -l xxx.zip:列出压缩包的的文件信息,比 unzip -v 显示的信息更简洁一些。

$ unzip -l SwitchWindow-0.5.0.zip                   
Archive:  SwitchWindow-0.5.0.zip
649c8df77df115f9de7635553523d61874df9e1b
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2023-08-08 00:51   SwitchWindow-0.5.0/
       19  2023-08-08 00:51   SwitchWindow-0.5.0/.gitattributes
       16  2023-08-08 00:51   SwitchWindow-0.5.0/.gitignore
        3  2023-08-08 00:51   SwitchWindow-0.5.0/.python-version
      248  2023-08-08 00:51   SwitchWindow-0.5.0/Default (Linux).sublime-keymap
      248  2023-08-08 00:51   SwitchWindow-0.5.0/Default (OSX).sublime-keymap
      248  2023-08-08 00:51   SwitchWindow-0.5.0/Default (Windows).sublime-keymap
      493  2023-08-08 00:51   SwitchWindow-0.5.0/Default.sublime-commands
     1087  2023-08-08 00:51   SwitchWindow-0.5.0/LICENSE
      743  2023-08-08 00:51   SwitchWindow-0.5.0/Main.sublime-menu
     2560  2023-08-08 00:51   SwitchWindow-0.5.0/README.md
     4603  2023-08-08 00:51   SwitchWindow-0.5.0/plugin.py
---------                     -------
    10268                     12 files

unzip -j:只保存文件名称及其内容,而不存放任何目录名称,即去掉目录,是所有目录,包括子目录,只留文件,慎用。

unzip -o xxx.zip -d xx:强制解压到 xx 目录,并覆盖原有内容。

unzip -n xxx.zip -d xx:解压到 xx 目录,如果目录已存在则跳过解压。

zipinfo

zipinfo -s xxx.zip:使用 zipinfo 能查看压缩包中的信息。不过信息的样式与 unzip -v 或 unzip -l 有所区别。

最大区别就是多了一栏 Zip file,显示了文件类型及读写情况,这非常适合进一步对 zip 包中目录或文件的统计操作。

$ zipinfo SwitchWindow-0.5.0.zip 
Archive:  SwitchWindow-0.5.0.zip
Zip file size: 6049 bytes, number of entries: 12
drwx---     0.0 fat        0 bx stor 23-Aug-08 00:51 SwitchWindow-0.5.0/
-rw----     0.0 fat       19 tx stor 23-Aug-08 00:51 SwitchWindow-0.5.0/.gitattributes
-rw----     0.0 fat       16 tx stor 23-Aug-08 00:51 SwitchWindow-0.5.0/.gitignore
-rw----     0.0 fat        3 tx stor 23-Aug-08 00:51 SwitchWindow-0.5.0/.python-version
-rw----     0.0 fat      248 tx defN 23-Aug-08 00:51 SwitchWindow-0.5.0/Default (Linux).sublime-keymap
-rw----     0.0 fat      248 tx defN 23-Aug-08 00:51 SwitchWindow-0.5.0/Default (OSX).sublime-keymap
-rw----     0.0 fat      248 tx defN 23-Aug-08 00:51 SwitchWindow-0.5.0/Default (Windows).sublime-keymap
-rw----     0.0 fat      493 tx defN 23-Aug-08 00:51 SwitchWindow-0.5.0/Default.sublime-commands
-rw----     0.0 fat     1087 tx defN 23-Aug-08 00:51 SwitchWindow-0.5.0/LICENSE
-rw----     0.0 fat      743 tx defN 23-Aug-08 00:51 SwitchWindow-0.5.0/Main.sublime-menu
-rw----     0.0 fat     2560 tx defN 23-Aug-08 00:51 SwitchWindow-0.5.0/README.md
-rw----     0.0 fat     4603 tx defN 23-Aug-08 00:51 SwitchWindow-0.5.0/plugin.py
12 files, 10268 bytes uncompressed, 4013 bytes compressed:  60.9%

zipinfo 也有短格式:

$ zipinfo -s zip_tmp.zip
Archive:  zip_tmp.zip
Zip file size: 9868321 bytes, number of entries: 17
drwxr-xr-x  2.0 unx        0 bx stor 24-Sep-18 23:18 tmp/
-rw-r--r--  2.0 unx  1305313 bX defN 24-Jun-16 23:42 tmp/A File Icon.sublime-package
-rw-r--r--  2.0 unx   655376 bX defN 24-Sep-18 21:15 tmp/CommandsBrowser.sublime-package
-rw-r--r--  2.0 unx   200864 bX defN 24-Sep-18 21:14 tmp/ConvertToUTF8.sublime-package
-rw-r--r--  2.0 unx   132169 bX defN 21-Dec-07 14:44 tmp/Emmet.sublime-package
-rw-r--r--  2.0 unx  3623354 bX defN 24-Sep-18 21:14 tmp/gruvbox.sublime-package
-rw-r--r--  2.0 unx    99791 bX defN 24-Sep-18 21:15 tmp/Less.sublime-package
-rw-r--r--  2.0 unx  3884049 bX defN 24-Sep-18 21:14 tmp/NeoVintageous.sublime-package
-rw-r--r--  2.0 unx    14464 bX defN 24-Sep-18 21:14 tmp/NeoVintageousHighlightLine.sublime-package
-rw-r--r--  2.0 unx   306208 bX defN 24-Sep-18 21:14 tmp/SideBarTools.sublime-package
-rw-r--r--  2.0 unx   228092 bX defN 24-Feb-14 03:52 tmp/ST4_DoxyDoxygen.sublime-package
-rw-r--r--  2.0 unx     5563 bX defN 23-Aug-08 03:56 tmp/Switch Window.sublime-package
-rw-r--r--  2.0 unx    12366 bX defN 24-Sep-18 21:15 tmp/Terminal.sublime-package
-rw-r--r--  2.0 unx   116812 bX defN 24-Sep-18 21:15 tmp/Terminus.sublime-package
drwxr-xr-x  2.0 unx        0 bx stor 24-Sep-19 10:42 zip_tmp/
-rwxr-xr-x  2.0 unx      416 bX defN 24-Feb-29 11:15 4169_cracked_untested.sh
-rwxr-xr-x  2.0 unx      623 bX defN 24-Sep-14 03:37 4180_cracked_untested.sh
17 files, 10585460 bytes uncompressed, 9864875 bytes compressed:  6.8%

配合 Linux 其他命令,可以作进一步信息的查看,如查看目录情况:

$ zipinfo AFileIcon-3.28.0.zip | grep "^d"        
drwx---     0.0 fat        0 bx stor 24-Jun-16 23:38 AFileIcon-3.28.0/
drwx---     0.0 fat        0 bx stor 24-Jun-16 23:38 AFileIcon-3.28.0/core/
drwx---     0.0 fat        0 bx stor 24-Jun-16 23:38 AFileIcon-3.28.0/core/utils/
drwx---     0.0 fat        0 bx stor 24-Jun-16 23:38 AFileIcon-3.28.0/core/vendor/
drwx---     0.0 fat        0 bx stor 24-Jun-16 23:38 AFileIcon-3.28.0/icons/
drwx---     0.0 fat        0 bx stor 24-Jun-16 23:38 AFileIcon-3.28.0/icons/multi/
drwx---     0.0 fat        0 bx stor 24-Jun-16 23:38 AFileIcon-3.28.0/icons/single/
drwx---     0.0 fat        0 bx stor 24-Jun-16 23:38 AFileIcon-3.28.0/media/
drwx---     0.0 fat        0 bx stor 24-Jun-16 23:38 AFileIcon-3.28.0/preferences/

只显示文件名:

$ zipinfo -1 zip_tmp.zip
tmp/
tmp/A File Icon.sublime-package
tmp/CommandsBrowser.sublime-package
tmp/ConvertToUTF8.sublime-package
tmp/Emmet.sublime-package
tmp/gruvbox.sublime-package
tmp/Less.sublime-package
tmp/NeoVintageous.sublime-package
tmp/NeoVintageousHighlightLine.sublime-package
tmp/SideBarTools.sublime-package
tmp/ST4_DoxyDoxygen.sublime-package
tmp/Switch Window.sublime-package
tmp/Terminal.sublime-package
tmp/Terminus.sublime-package
zip_tmp/
4169_cracked_untested.sh
4180_cracked_untested.sh
zipinfo 示例
  1. 统计包中目录的数量
zipinfo xxx.zip | grep "^d" | wc -l
  1. 列出包中一级文件(包括目录)
zipinfo -1 zip_tmp.zip | awk 'BEGIN{FS="/"}{print $1}' | uniq

或者写成这样:

zipinfo -1 AFileIcon-3.28.0.zip | awk -F "/" '{print $1}' | uniq

[!info]

awk 'BEGIN{FS="/"}' 这是改变分隔符为斜杠 /,{print $1} 取出第一列,就是一级文件。

uniq 很简单去重,把相同一级目录都去掉重复,就知道 zip 包中一级文件与目录有多少了。


rar

在 Linux 系统中压缩和解压 .rar 格式的压缩包,得使用专门的程序。

在 Linux 系统 .rar 不是常用压缩格式,所以一般更多的是解压,而在 Linux 系统中解压 .rar 压缩包得选安装 unrar 程序。

# Ubuntu
# 安装 rar
sudo apt install rar

# 安装 unrar
sudo apt install unrar
# ArchLinux、manjaro
# 安装 rar
pacman -S rar

# 安装 unrar
pacman -S unrar

Tip

ArchLinux_Note 如果安装了 AUR Helper,如 yay,就能使用相应的 aur helper 来安装。

unrar 简单示例:

# 不解压只查看压缩包中的信息
# 简略模式
unrar l task.rar
# 详细模式
unrar v task.rar

# 解压
unrar e a.rar




rar 示例:

# rar a -vSIZE  压缩后的文件名 被压缩的文件或者文件夹
# -v后跟的是分包的大小,单位可以是b/B、k/K、m/M、g/G、t/T。

rar a -v50000k eclipse.rar eclipse

# 解压
# 如果压缩包是以分包形式存在,只要指定第一个分包,程序会自动进行下一个分包的解压
rar x xxx.part1.rar

[!quote]

其他压缩小技巧

zip 包分包及并包

分包

# 先压成zip包
zip -r temp.zip data/
# 然后对这个zip包进行分包操作
zip -s 10m temp.zip --out data.zip

[!tip] zip 命令

-s 是指定分包的大小。10m、10g 等

--out 指定分包的包名

将分包合并再解压:

方法 1:

# 先将分包合并成一个包
cat data.* > tounzip.zip
# 然后再解压
unzip tounzip.zip

Tip

并包时使用到了 > 这个重定向符 此方法我试过,并包存在错误。

方法 2:

zip -F 烤肉500.zip --out 500.zip

Tip

-F 是修复压缩包

这种方式就是通过修复包的方式合并压缩包。进过测试,这方法是有效的。

相关连接:


目录文件

复制

cp

cp 命令用来复制文件或目录。

选项:

  • -r:递归复制目录及其内容
  • -i:使用交互模式,覆盖前提示用户确认
  • -f:强制复制,覆盖目标文件而不提示
  • -v:显示详细的复制过程

Tip

如果目标文件已存在,默认情况下 cp 会覆盖它(除非使用 -i 选项)

删除

rm

rm 命令可以从系统中删除文件。

基本语法:rm 文件

删除目录

删除目录:rm -r 目录

rm -r 这个命令删除目录时,会会删除指定目录及其所有文件,当然在删除前什么询问是否确定删除。

如果不想逐个确认删除,可以加个 -f 选项,意思为强制删除。

[!info]

强制删除目录完全命令是:rm -rf 目录。

rmdir

rmdir 命令可以用来删除目录。

如果目录中包含任何文件和子目录,rmdir 不会继续进行处理,这可以避免误删文件的可能。

文件查找

find

fd

fd 是一个更友好的 find,它是用 Rust 编写。

ln

ln 命令功能是为某一个文件在另外一个位置建立一个同上涌的链接。

需要在不同目录,用到相同的文件时,不需要在每一个需要的目录下,都放一个相同的文件,只需要在某个固定的目录,放上该文件,在其他目录下,用 ln 命令链接它就可以了,这种方式不必重复占用磁盘空间。

创建一个链接使用 ln 命令。语法:ln from to,即ln 源文件或目录 目标文件或目录

链接分为两种:

  • 硬链接:一个档案可以有多个名称
  • 软链接:产生一个特殊的档案,该档案的内容是指向另一个档案的位置。

软链接

软链接也称为「符号链接」,命令就加个 s 参数,即ln -s。

软链接特点:

  • 软链接,以路径形式存在,类似 Windows 中的快捷方式
  • 软链接可以跨文件系统
  • 软链接可以对一个不存在的文件名进行链接
  • 软链接可以对目录进行链接

硬链接

硬链接特点:

  • 硬链接,以文件副本的形式存在,但不占用实际空间。
  • *不允许给目录创建硬链接。
  • 硬链接只有在同一个文件系统中才能创建。

文本处理

文本处理常用命令

cat

cat 命令是由第一行开始显示文件内容。

常用选项及参数:

  • -A:可列出一些特殊字符而不是空白而已
  • -b:列出行号,仅针对非空白行做行号显示,空白行不标行号
  • -E:结尾的断行字符 $ 显示出来
  • -n:打印出行号,连空白行也会有行行号
  • -T:将 tab 键以 ^I 显示出来
  • -v:列出一些看不出来的特殊字符

cat -n 这是将行号也一并打印出来。

cat n

cat 常用示例
# 将某文件内容清空,但不删除
cat /dev/null > t01.txt

tac

tac 命令是从最后一行开始显示,tac 是 cat 的倒着写。

nl

nl 添加行号打印

nl 选项和参数:

选项和参数 功能
-b, --body-numbering=样式 使用 <样式> 对正文的行进行编号
-d, --section-delimiter=CC 使用 CC 作为逻辑页分隔符
-f, --footer-numbering=样式 使用 <样式> 对页脚的行进行编号
-h, --header-numbering=样式 使用 <样式> 对页眉的行进行编号
-i, --line-increment=数值 设置每一行行号的自动递增值
-l, --join-blank-lines=数值 将 <数值> 行连续的空行视为一行
-n, --number-format=格式 按照指定 <格式> 插入行号
-p, --no-renumber 在切换至下一节时不重置行号值
-s, --number-separator=字符串 在可能出现的行号后添加 <字符串>
-v, --starting-line-number=数值 每一节第一行的行号
-w, --number-width=数值 设置行号的宽度为 <数值> 列

样式列表:

样式参数 功能
a 对所有行编号
t 仅对非空行编号
n 不对任何行编号
pBRE 仅对匹配基本正则表达式 BRE 的行编号

示例:

# 默认什么参数都不加
nl Ship_Note.md

nl 1

# 只有非空行显示行号
nl -b t Ship_Note.md
# 所有行都不显示行号
nl -b n Ship_Note.md
# 所有行都显示行号,包括空行
nl -b a Ship_Note.md

行号格式:

参数 对齐方式 有无前导 0
ln 左对齐 无前导 0
rn 右对齐 无前导 0
rz 右对齐 有前导 0

示例:

nl -b t -n ln Ship_Note.md

nl ln

nl -b t -n rn Ship_Note.md

nl rn

nl -b t -n rz Ship_Note.md

nl rz

效果相似命令对比:

与 nl 命令相似,但 cat -n 是连空行也一并加上行号,而 nl 默认不加任何参数或选项,行号是忽略空行。如下图:

cat n diff nl

more

cat、tac 和 nl 这三个命令都是把文件一次性打印在屏幕上。想要一页页的翻动查看,就使用 more 命令和 less 命令。

more 命令一些按键操作:

  • 空格(space): 向下翻一页
  • Enter: 向下一行
  • /: 向下搜索「字符串」
  • :f: 显示出文件名及目前显示的行数
  • q: 退出 more,不再显示该文件内容
  • b 或 ctrl-b: 往回翻页,只对文件有用

more 命令中的搜索: / 后输入要搜索的内容,按回车就开始向下搜索,按 n 就会跳转到下一个搜索结果。

less

less 命令比 more 命令要灵活很多,more 命令只能向下翻页,而 less 可上可下。

参数:

  • -N:显示行号

head

tail

tr

wc

wc 命令用于统计指定文本的行数、字数、字节数,格式:wc [参数] 文本。

参数 功能
-l 统计行数
-w 统计字数
-c 统计字节数

如果任何参数都不给,就是依次显示行数、字数和字节数的统计结果。

stat

stat 命令用于查看文件的具体不住信息和埋单信息,格式为:stat 文件名称。

正则表达式

grep

#grep

Grep 笔记

sed

#sed

awk

#awk

awk 历史与简介

awk 写于 1977 年。作者:Alfred V Aho、Peter J.Weinberger 和 Brian W Kernighan。awk 这名,就是取自三位作者姓氏的首字母。

awk 有多处版本,包括旧版的 awk、nawk(new awk)、gawk(GNU 版本)以及 POSIX awk 等。

现在大部分 Linux 发行版默认装的都是 gawk,而 awk 只是 gawk 的一个软链接 -- 这在 Red hat Linux9 时代就已经是这样了。

语法

awk 逐行扫描文件,从第一行到最后一行寻找匹配对家模式的行,并在这些行上运行指定的动作。

awk 由包含模式和动作的单行或多行文本组成。

awk 语法结构:awk 'pattern {action} pattern {action}..' 文件

列

  • $0:表示整行文本。
  • $1:表示文本行中的第一列。
  • $N:表示文本行中第 N 列。
  • $NF:表示文件行中的最后一列。

行

NR==N:指定行号

多行

使用逗号 , 分隔,表示显示一个连续范围的行,即标示要打印的「区间」,如 NR==1,NR==3:打印 1 至 3 行

使用分号 ; 分隔,表示分别显示各行,如 NR==1;NR==3;NR==6:打印第 1 行、第 3 行和第 6 行。

示例

行和列综合使用:

unzip -l xxx.zip |awk 'NR==5{print $NF}':列出 zip 包中的文件列表,显示第 5 行最后一列信息


字体

安装 字体:

  1. 使用字体安装程序点击安装

[!info]

也可以直接将字体文件复制到 /usr/share/fonts 目录下
如果是 ttf 字体,应复制在 /usr/share/fonts/TTF 目录下
也可以直接把字体文件复制到 ~/.local/share/fonts 目录, 这是仅当前用户可用的字体

  1. 刷新
fc-cache -fv

字体相关命令

查看字体:

# 查看中文字体
fc-list :lang=zh

搜索字体:

fc-list :lang=zh | grep -i "wqy"

服务

  1. 列出所有已加载、正在运行的服务:
systemctl list-units --type=service
  1. 列出所有服务(包括未运行的、已禁用的):
systemctl list-unit-files --type=service

网络

一些网络概念

相关笔记列表:

以太

以太 是一种虚拟的物质,英文 Ether 的音译,一般可以理解为一种看不见摸不着的物质。

最早提出「以太」概念是亚里士多德。

随着科学发展,「以太」理论也逐渐被科学界抛弃。

虽然以太理论已经基本被淘汰,但「以太」这词在使用中并未消亡,「以太网」就是其一。

以太网是一种计算机局域网技术,而 IEEE 802.3 标准则是以太网技术被广泛应用之后制定的以太网技术标准。

以太网是目前应用最普遍的局域网技术。

也就是因为有此原因,所以 Linux 系统中网络接口都使用 「eth」为名称。

网桥

简单说,网桥就是连通两个本来处于隔离的网络的一个「桥梁」。


Linux 中网络相关命令和工具

IP 概念

ip 命令 是用来查询或维护网络相关的工具。

包括 路由(Routing)、网络设备(Device)、策略路由(Policy Routing)以及 隧道(Tunnel)。

ip 常用命令
  • ip link:显示网络设备
  • ip addr :查看网络地址 这个命令是把网络设置及网络地址、掩码都显示出来。比 ip link 多显示一些信息。
  • ip linke show 网络设备名称:显示指定网络设备的信息。
  • ip link set 网络设备 up:启用网络设备
  • ip link set 网络设备 down:禁用网络设备

命令下载工具

curl

curl curl repo 是一个用来对服务器发起请求并把响应输出到标准输出的工具。所以单纯把它当成一个下载器,有点小瞧它了。

curl 常用操作
# 什么参数选项都不要,就是向指定地址发送一个 get 请求
# 然后将服务器响应的内容打印在屏幕上
curl http://www.baidu.com
# 包括协议的响应的 head 信息
# Include protocol response headers in the output
curl -i, --include url

# Show document info only
curl -I, --head url

# 返回状态码
curl -w "%{http_code}\n" url

# 使用 /dev/null 把多余的信息过滤掉
curl -w "%{http_code}\n" -o /dev/null url

# 只返回状态码
curl -s -o /dev/null -w "%{http_code}\n" url
# 将服务器响应保存成文件`a.html`
curl -o a.html http://xxx.com
# 注意这是 大 O,与上面的小 o 需要自已定义保存文件名不一样
# 将服务器响应保存成文件,以请求的最后部分当成文件名
	# 完整选项应该是 --remote-name 顾名思义就是使用链接中的文件名当作保存文件的文件名
curl -O http://www.com/a.html
culr --output-dir 目录 -O http://xxx/xxx/xxx.xx
# 或者
culr --output-dir 目录 -o xxx.xx http://xxx/xxx/xxx.xx

[!info]

--outplut-dir 是指定文件的保存目录,与 wget 的 -P 功能一样。

另外,使用了这个选项,那还得使用 -O 或 -o 来指定保存的文件名。

如果目录不存在,想要创建目录可以加上 --create-dirs 选项。

# 指定代理
curl -x [protocol://]host[:port] Use this proxy
# 指定请求方式 : GET POST 等
# 一般来说,请求 GET 和 POST 都能向服务器发出获取数据的请求
# 但 HTTP 协议在制定时,默认给了这些方式相应的语义,从这个请求的名称就能看出
# GET 请求是向服务器发出获取数据的请求;而 POST 请求,是将数据提交到服务器的请求
# 示例
curl -X POST
# 指定参数,或提交数据
curl -d 

[!info]

curl 相关资料

wget

 wget 跟 curl 类似的命令行下载器。

wget 与 curl 不一样,它主要就是用于下载。

wget 主要操作
# 无参 直接下载文件
wget http://xxx.com

由无参这种 默认 方式,wget 是直接下载文件,就能看出 wget 重点是放在下载上的。

  1. 重命名

-o 或 -O 是重命名下载文件的文件名。

Tip

这操作实际已经包含指定目录的操作,即包含了 -P 的操作,如果重命名时,目录不存在,会像 -P 一样先创建目录,然后才开始下载然后对下载文件进行重命名。

 # 大O 下载并重命令文件
 # 相当于 curl 的小o参数的操作
 # 如果当前目录已存在同名文件将覆盖
 wget -O rename.zip http://xxxx.com/xxx.xxx
 
 # 小o与大O类似,就是重命名文件
 # 区别是小o不显示下载过程
 wget -o rename.zip http://xxxx.com/xxx.xxx
  1. 指定目录

-P 操作非常单纯,就是指定要下载到哪个目录。

如果只是想指定下载目录,可以使用这个参数,但如果同时想进行重命名,那就应该使用 -o 或 -O 参数。

# 指定下载到哪目录
# 文件名使用下载地址最后部分
# -P 指定的目录如果不存在则自动创建
# 如果有重同文件,不会覆盖,会将新下载的文件文件名后加.序号,如 .1 .2等
wget -P /home/test http://xxxx
  1. 断点续传
# 断点下续传
# 使用 wget -c 重新启动下载中断的文件
wget -c http://xxx.com

-c 和 -O 组合使用下载示例:

 wget -c -O miniconda_py39_4.12.0.sh https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py39_4.12.0-Linux-x86_64.sh
  1. 限速
# --limit-rate= 使用来限速的
wget --limit-rate=400k URL
  1. 检测连接
# 检测连接
wget –-spider URL
  1. 关闭详细输出信息
# 关闭详尽输出,但不进入安静模式
wget -nv, --no-verbose                

示例:

wget spider

# 用于下载一个网站的多个资源
# -r 是递归下载
wget -r URL
# 与递归下载配合使用,限定只下载指定类型的文件
# -A 或 --accept= 后跟限定的文件类型,即文件扩展名列表,名扩展名使用逗号分隔
wget -r -A 扩展名 URL

# 与 -A 或 --accept 相反,--reject= 是拒绝下载指定类型文件,后面同样跟的是扩展名列表,同样使用逗号分隔
wget -r --reject=pdf,exe URL

# -l 或 --level=数字 指定递归深度,0 为不限制
wget -r -l 1 URL

# 示例:
# 只递归一层 只下载 扩展名为 azw3 的文件
wget -r -l 1 -A azw3 http://xxxxx

Tip

如果不想检查 certification 可以加下 --no-check-certificate 选项。

[!info]

wget相关资料

aria2

aria2aria2 repo 是一款非常强大的下载工具。

看它的一长串的定语,就知道它的强大:「多平台」、「支持多协议」、「支持多来尖」。

aria2 可以从多个来源、多个协议下载资源,最大程序上利用了你的带宽。

aria2 有着非常小的资源占用,在关闭磁盘缓存的情况下,物理内存占用通常为 4M,BT 下载,CPU 占有率约为 6%。

aria2 特点:

  • 高速、自动多线程下载;断点续传
  • 内存占用少
  • 多平台,支持 Windows、Linux、OSX、Android 等操作系统
  • 模块化;分段下载引擎,文件整合速度快
  • 支持 PRC 界面远程
  • 全面支持 BtiTorrent 协议
aria2 常用操作

最简单的使用,就是什么参数或选项都不加:

# 直接在命令行下载,下载完成自动退出,跟 wget 的工作方式类似
aria2c URL

设置连接数量:

# 下载连接的数量 默认为 5
-s, --split=N 

断点续传:

# 继续下载一个仅部分分完成的文件
-c, --continue[=true|false] 

指定文件保存的文件名:

-o, --out=FILE

后台下载:

-D,–-deamon=true

下载速度限制:

# 单文件下载速度限制 
# 单位 K 或 M
--max-download-limit=速度
# 全局
# 单位 K 或 M
--max-overall-download-limit=速度
# 0 意味着不限制。
# 可附加 K 或 M(1K=1024,1M=1024K)
-u, --max-upload-limit=速度

文件预分配方式:

# 文件预分配方式, 可选:none, prealloc, trunc, falloc, 默认:prealloc
# 预分配对于机械硬盘可有效降低磁盘碎片、提升磁盘读写性能、延长磁盘寿命。
# 机械硬盘使用 ext4(具有扩展支持),btrfs,xfs 或 NTFS(仅 MinGW 编译版本)等文件系统建议设置为 falloc
# 若无法下载,提示 fallocate failed.cause:Operation not supported 则说明不支持,请设置为 none
# prealloc 分配速度慢, trunc 无实际作用,不推荐使用。
# 固态硬盘不需要预分配,只建议设置为 none ,否则可能会导致双倍文件大小的数据写入,从而影响寿命。
--file-allocation=方式

列出 BT 种子的内容:

aria2c -S **.torrent

开启 RPC:

aria2c --enable-rpc --rpc-listen-all
Aria2 配置

默认用户配置文件放在:~/.aria2/aria2.conf 也可以通过命令行 aria2 --conf-path 命令指定配置文件路径。 示例:

aria2c --conf-path="/etc/aria2/aria2.conf"

Aria2 除了使用命令行临时配置,还可以将配置写进配置文件 aria2.conf。

常用配置:

# 磁盘缓存, 0 为禁用缓存,默认:16M
# 磁盘缓存的作用是把下载的数据块临时存储在内存中,然后集中写入硬盘,以减少磁盘 I/O ,提升读写性能,延长硬盘寿命。
# 建议在有足够的内存空闲情况下适当增加,但不要超过剩余可用内存空间大小。
# 此项值仅决定上限,实际对内存的占用取决于网速(带宽)和设备性能等其它因素。
disk-cache=64M

# 文件预分配方式, 可选:none, prealloc, trunc, falloc, 默认:prealloc
# 预分配对于机械硬盘可有效降低磁盘碎片、提升磁盘读写性能、延长磁盘寿命。
# 机械硬盘使用 ext4(具有扩展支持),btrfs,xfs 或 NTFS(仅 MinGW 编译版本)等文件系统建议设置为 falloc
# 若无法下载,提示 fallocate failed.cause:Operation not supported 则说明不支持,请设置为 none
# prealloc 分配速度慢, trunc 无实际作用,不推荐使用。
# 固态硬盘不需要预分配,只建议设置为 none ,否则可能会导致双倍文件大小的数据写入,从而影响寿命。
file-allocation=none

# 文件预分配大小限制。小于此选项值大小的文件不预分配空间,单位 K 或 M,默认:5M
no-file-allocation-limit=64M

# 断点续传
continue=true

# 文件预分配大小限制。小于此选项值大小的文件不预分配空间
# 单位 K 或 M,默认:5M
no-file-allocation-limit=64M

# GZip 支持,默认:false
http-accept-gzip=true

网上大神配置模板,可以参考着配:https://github.com/P3TERX/aria2.conf/blob/master/aria2.conf

Aria2 UI 工具

aria2 本身没有 UI ,这使得一些依赖图形界面的用户用起来不太方便,然后就出现各种基于 aria2 的带图形界面的下载器。

下面介绍几款,用得比较多的基于 aria2 的下载器。


IPtables

IPtables 中可以做各种网络地址转换,网络地址转换主要有两种:SNAT 和 DNAT。

SNAT 是 「source networkaddress translation」的缩写,即「源地址目标转换」。

DNAT 是 「destination networkaddress translation」的缩写,即「目标网络地址转换」。

代理

临时代理

#proxy

想要在当前窗口临时设下代理,可以使用 export 命令设置 http_proxy 或 https_proxy 的值。如下:

export http_proxy=http://127.0.0.1:端口
# 或者
export https_proxy=http://127.0.0.1:端口

# 当然可以二个一起设
export all_proxy=socks5://127.0.0.1:端口

如果使用 socks5 就这样设置:

export http_proxy=socks5://127.0.0.1:端口
# 或者
export https_proxy=socks5://127.0.0.1:端口
# 同样的可以二个一起设
export all_proxy=socks5://127.0.0.1:端口

Tip

http_proxy 后面的值,可以加双引号 \",也可以不加。即可以写成这样:export https_proxy="http://127.0.0.1:7897"

如果使用 Clash 客户端,如 Clash-Verge-Rev,其中有个功能能方便复制「环境变量」,点一个,就能复制出要执行的代码,诸如:export https_proxy=http://127.0.0.1:7897 http_proxy=http://127.0.0.1:7897 all_proxy=socks5://127.0.0.1:7897,将代码贴到终端中,执行下,当前终端窗口就能启用临时代理了。

设置完,先用 echo $http_proxy 命令查看当前窗口是否设置了 http_proxy 值。然后测试下代理是否真能生效:

  1. curl ip.gs
  2. curl cip.cc
  3. curl https://www.google.com

清除环境变量可以这样:

unset http_proxy  
unset https_proxy

[!info] 相关资料


进程

常用命令

  • ps aux
  • ps -ef
  • ps -elf

PID:进程 ID PPID:父进程 ID

大部分应用程序的父进程都是 /usr/lib/systemd/systemd --user 这个当前用户主进程。

常用示例

按进程名称查询

ps -ef |grep '进程名':按进程名称搜索正在运行的进程

Tip

这个查询的结果会多一个, 这个进程是 grep 的。

过滤掉 grep 本身进程: ps -elf |grep '进程名' | grep -v grep:这是使用 grep -v 把 grep 本身的进程过滤掉,这才是真正想要的结果。

  • pgrep '进程名' -a:显示进程 PID 及进程的程序全路径名
  • pgrep '进程名' -l:显示进程 PID 及进程名,比上面的简洁一些

字体

Linux 中安装 字体,就是把字体文件丢到指定目录下,刷新下即可。

  • 全局安装:/usr/share/fonts
  • 用户安装:~/.local/share/fonts

刷新命令:fc-cache -fv


SSH

安装和设置 SSH

以 debian 系为例

安装:

apt-get update
apt-get upgrade

apt-get install openssh-server

设置:

对 /etc/ssh/sshd_config 文件进行设置。

  • 开启端口:Port 22

  • 监听地址:ListenAddress 0.0.0.0

  • 添加 PermitRootLogin yes 使用 root 登录的权限

  • 将 PermitTTY 设为 yes

  • 将 UsePAM 设为 no

重启

service ssh restart
# 或者
systemctl restart sshd.service

Note

查看 ssh 是否已开启,可以使用 ssh -V 命令。

或者使用 systemctl status sshd.service 来查看 ssh 服务状态。

连接

使用 ssh 命令连接到远程服务器:

ssh 用户名@ip -p 端口

SSH 各种问题

Host key verification failed 错误

解决方法:

方法 1: 直接将 .ssh/known_hosts 文件删除即可。

方法 2: 修改 /etc/ssh/ssh_config 配置文件中,设置 StrictHostKeyChecking 的值

默认情况下,StrictHostKeyChecking=ask 。出现提示,如果连接和 key 不匹配,给出提示,并拒绝登录。

StrictHostKeyChecking=no 是最不安全的级别。如果连接 server 的 key 在本地不存在,那么就自动添加到文件中(默认是 .ssh/known_hosts 文件中),并且给出一个警告。

StrictHostKeyChecking=yes 是最安全级别。如果连接与 key 不匹配,就拒绝连接,不会提示详细信息。

SSH 工具

Putty

这是款古老的 SSH 工具。

优点:小巧、免费。 缺点:设置不太人性化

Electerm

Electerm Electerm Repo 开源免费,而且 win、mac 和 linux 平台都能用。

其实 Electerm 是能当终端使用的。

颜值还非常高: electerm

Tabby

Tabby Tabby Repo 同样是一款 Win、Linux 和 Mac 都能用的开源 SSH 工具。之前的名字叫 「Terminus」。

其实这货更像是一个终端,只是集成了 SSH 功能。

这颜值比 Electerm 更高,功能更强。就是字体设置不太方便,还得手动输入字体名。

这货还能装插件,太过分了!

有一大堆的配色方案可选,真的非常过分了!

搭配插件,tabby 的配置能使用 gist 进行同步。

FinalShell

FinalShell 是一款 Win、Linux 和 Mac 都能用的 ssh 工具。

优点:功能强、设置顺手,所有平台都能用

缺点:耗内存、启动有点慢

terminal 相关

复制粘贴

在通常情况下,粘贴剪切版的内容使用 Shift+Insert 就可以实现。

但在终端中,Shift+Insert 只能粘贴第一次复制的内容,如果有新复制的内容,使用 Shift+Insert 就会失效。

解决这个问题其实很简单,只要使用 Ctrl+Shift+Insert 就好了!

[!info] 相关资料


Shell 相关

sh 命令

sh 命令其功能是 Shell 语言的解释器。

Tip

sh 其实不是实际存在的命令文件,而是 bash 的别名命名,所以使用 bash 效果相同。

语法格式:sh [参数] 脚本名

参数

  • -c:从字符串中读取命令,即可以执行简单的命令

[!example]

sh -c 'echo "hello world!"'
  • -i:实现脚本交互
  • -n:进行语法检查
  • -v:显示执行过程详细信息
  • -x:实现逐条语句跟踪
  • --help:帮助文档
  • --versoin:sh 的版本信息

Shell 语言相关内容:Shell笔记


Desktop

  1. 新建 desktop 文件 在/usr/share/applications/目录中新建一个后缀名为 desktop 的文件

Tip

也可以在 .local/share/applications 目录新建 desktop 文件

  1. 编辑 desktop 文件

[!info] desktop 文件格式

[Desktop Entry] (这里大小写敏感,写错一个就不会显示)
Type=Application 类型(这个属性是必须的,默认可以就写 Application) Name=名称
Name[zh_CN]=简中名称
Name[zh_TW]=繁中名称
Comment=鼠标放在图标上时的提示文字
Comment[zh_CN]=与上类似不过是简体中文
Comment[zh_TW]=繁中的提示文字
Icon=图标路径
Exec=可执行文件的路径
Categories=程序的分类标签,多个标签使用; 号分隔 (Application;IDE;Development;Editor)
Terminal=false 是否使用启用终端
StartupNotify=true StartupWMClass=指定 WM_Class 值,确保程序启动后任务栏图标与 Icon 指定的图标一致,

示例:

[Desktop Entry]
Name=Watt Toolkit
Comment=A cross-platform Steam toolbox.
Comment[zh_CN]=一个开源跨平台的多功能Steam工具箱。
Type=Application
Exec=/opt/SteamPP/Steam++.sh
Icon=/opt/SteamPP/Icons/Watt-Toolkit.png
# Terminal=false
StartupNotify=true
StartupWMClass=Steam++
Categories=Network;Utility
Keywords=Steam;Steam++;SteamTools;WattToolkit
  1. 刷新
# 刷用户目录
update-desktop-database .local/share/applications
# 刷根目录
sudo update-desktop-database /usr/share/applications

Tip

如果 desktop 不生效,可以使用 desktop-file-validate xxx.desktop 来检测 desktop 文件是否存在语法错误。

Desktop 文件解析

Exec

Exec 这个属性是指定应用的可执行程序

可执行程序可用的参数

  • %f:a single filename.
  • %F:multiple filenames.
  • %u:a single URL.
  • %U:multiple URLs.
  • %d:a single directory. Used in conjunction with %f to locate a file.
  • %D:multiple directories. Used in conjunction with %F to locate files.
  • %n:a single filename without a path.
  • %N:multiple filenames without paths.
  • %k:a URI or local filename of the location of the desktop file.
  • %v:the name of the Device entry.
Icon

Icon 这个属性是指定应用的 Logo 图标

Categories

Categories 这个属性是指定应用的分类,是将桌面快捷文件归类到哪个应用目录。

Linux App Desktop Categories shotcut

StartupWMClass

StartupWMClass 这个属性,指定应用程序在容器管理中的容器类名,确保应用程序在启动后,任务栏或应用切换器中显示的图标与 .desktop 文件中的图标一致,即使用 icon 指定的桌面图标。

获取方法:在终端中执行 xprop WM_CLASS ,然后点击运行中的窗口 (一般会出现一个鼠标的光标会呈现「十字」,表示「待获取中」,点击窗口后才恢复原状),获取窗口的 WM_CLASS 属性。

如点击 Steam++ 运行中窗口后,终端显示:WM_CLASS(STRING) = "Steam++", "Steam++"

Wayland 获取不到 WM_CLASS 的解决方法

如果是 Wayland,可能上述操作不会生效,所以可以使用以下操作,获取 WM_CLASS 值:

GNOME 桌面 (Wayland):

  1. 按下 Alt + F2,输入 lg 并回车打开 Looking Glass 调试器。
  2. 切换到 Windows 标签页,点击目标窗口,即可看到其对应的 wm_class(即 Wayland 的 app_id)
appimage 获取不到 WM_CLASS 的解决方法

方法一:直接从 AppImage 内部提取(最推荐)

每个标准的 AppImage 镜像内部都包含一个 .desktop 配置文件,里面已经由官方开发者写好了正确的 StartupWMClass。你无需运行软件,直接解压查看即可:

  1. 终端执行解压命令(将命令中的 your-app.AppImage 替换为你的文件名):
./your-app.AppImage --appimage-extract
  1. 查看配置文件:此时当前目录下会生成一个 squashfs-root 文件夹。
  2. 寻找 StartupWMClass:使用命令读取该文件夹下的 .desktop 文件

可以用 cat 命令查看 desktop 文件,如:

cat squashfs-root/obsidian.desktop 

或者什么都不理,直接用 grep 进行检索,如:

grep -i "StartupWMClass" squashfs-root/*.desktop

输出结果中 = 后面的字符串(例如 StartupWMClass=StandardNotes)就是该软件真实的 WM_CLASS(或 Wayland 下的 app_id)。

如:

$ grep -i "StartupWMClass" squashfs-root/*.desktop
StartupWMClass=md.Obsidian
  1. 清理文件:获取到后,可直接删掉解压出的文件夹:
rm -rf squashfs-root

desktop 示例

Obsidian:

[Desktop Entry]
Name=Obsidian
Exec=/home/silascript/myappimages/Obsidian-1.13.7.AppImage %U
Terminal=false
Type=Application
Icon=/home/silascript/myappimages/icons/obsidian.png
StartupWMClass=md.obsidian.Obsidian
X-AppImage-Version=1.13.7
Comment=Obsidian 1.13.7
MimeType=x-scheme-handler/obsidian;
Categories=Office;

Idea:

[Desktop Entry]
Version=1.0
Type=Application
Name=IntelliJ Idea 2025
Icon=idea.png
# Exec=/opt/JavaIDE/idea_iu/bin/idea.sh
Exec=/opt/JavaIDE/idea_iu/bin/idea
Comment=The Java IDE
Categories=Development;IDE;
Terminal=false
StartupWMClass=jetbrains-idea

Pycharm:

[Desktop Entry]
Version=1.0
Type=Application
Name=Pycharm 2025
Icon=pycharm.png
Exec=/opt/pycharm/bin/pycharm
Comment=The Python IDE
Categories=Development;IDE;
Terminal=false
StartupWMClass=jetbrains-pycharm

Eclipse:

[Desktop Entry]
Name=Eclipse-EE
Comment=Eclipse-EE2025-09
Type=Application

Exec=/opt/JavaIDE/eclipse-ee/eclipse
Icon=/opt/JavaIDE/eclipse-ee/icon.xpm

StartupWMClass=Eclipse

Terminal=false
Categories=Development;
StartupNotify=true

思源笔记:

[Desktop Entry]
Name=Siyuan
Exec=/home/silascript/myappimages/siyuan-3.6.3.AppImage --no-sandbox %U
Terminal=false
Type=Application
Icon=/home/silascript/myappimages/icons/siyuan.png
StartupWMClass=siyuan
X-AppImage-Version=3.6.3
Comment=Siyuan 3.6.3
MimeType=x-scheme-handler/siyuan;
Categories=Office;

Tip

思源笔记,弄好 desktop 后,执行 update-desktop-database 命令后,是不能立即让这个 desktop 生效的,重重启系统,才能让生效。

VSCodium(VSCode 类似):

[Desktop Entry]
Name=VSCodium
Comment=Code Editing. Redefined.
GenericName=Text Editor
Exec=/opt/VSCodium/bin/codium %F
Icon=/opt/VSCodium/resources/app/resources/linux/code.png
Type=Application
StartupNotify=false
StartupWMClass=vscodium
Categories=TextEditor;Development;IDE;
MimeType=application/x-code-workspace;
Actions=new-empty-window;
Keywords=vscodium;VSCodium

[Desktop Action new-empty-window]
Name=New Empty Window
Name[cs]=Nové prázdné okno
Name[de]=Neues leeres Fenster
Name[es]=Nueva ventana vacía
Name[fr]=Nouvelle fenêtre vide
Name[it]=Nuova finestra vuota
Name[ja]=新しい空のウィンドウ
Name[ko]=새 빈 창
Name[ru]=Новое пустое окно
Name[zh_CN]=新建空窗口
Name[zh_TW]=開新空視窗
Exec=/opt/VSCodium/bin/codium --new-window %F
Icon=/opt/VSCodium/resources/app/resources/linux/code.png

Steam++(WattToolkit):

[Desktop Entry]
Name=Watt Toolkit
Comment=A cross-platform Steam toolbox.
Comment[zh_CN]=一个开源跨平台的多功能Steam工具箱。
Type=Application
Exec=/opt/SteamPP/Steam++.sh
Icon=/opt/SteamPP/Icons/Watt-Toolkit.png
# Terminal=false
StartupNotify=true
StartupWMClass=Steam++
Categories=Network;Utility
Keywords=Steam;Steam++;SteamTools;WattToolkit

部分软件安装设置

Komodo Edit 安装

  1. 下载
wget https://downloads.activestate.com/Komodo/releases/12.0.1/Komodo-Edit-12.0.1-18441-linux-x86_64.tar.gz
  1. 解压
tar -zxvf xxx.tar.gz
  1. 安装

转到新解压的目录,开始安装:

sudo ./install.sh -I /opt/KomodoEdit
  1. 添加 PATH 变量

.bashrc 或 .bash_profile 文件中添加

export PATH=$PATH:/opt/KomodoEdit/bin

source .bashrc 或 .bash_profile

  1. 如果需要在终端中调,可以添加软链:
sudo ln -s /opt/KomodoEdit/bin/komodo /usr/local/bin/komodo

Grub

grub 模板:/etc/default/grub

每当修改 /etc/default/grub 或者 /etc/grub.d/ 中的文件之后,都需要再次生成主配置文件。

制成配置文件:grub-mkconfig -o /boot/grub/grub.cfg

重启电脑看效果。

常用选项

  • GRUB_TIMEOUT=10:grub 等待时间,单位为秒
  • GRUB_GFXMODE:分辨率,默认是 auto,可以配多个,如 GRUB_GFXMODE=1920x1080,1280x720,1024x768,auto
  • GRUB_DISABLE_OS_PROBER:禁止使用 OS_PROBER(系统探针),默认值是 false,即不禁止OS_PROBER。OS_PROBER这东西是能探测操作系统的,操作系统变化,能及时的更新 Grub 的引导,所以最好不要修改,保持默认。

硬盘相关

smartctl

查看硬盘所有信息:

sudo smartctl -a /dev/sda
  • POR_Recovery_Count:记录硬盘在经历非正常断电、强制关机、死机重启或系统崩溃后,重新通电开机并完成内部状态恢复操作的累计次数。

查看硬盘读写次数:

sudo smartctl -l devstat /dev/sda

查看硬盘健康状态:

sudo smartctl -H /dev/sda

检测结果如下,就是正常:

SMART overall-health self-assessment test result: PASSED

图形界面相关

显示服务器

查询当前使用显示服务器

如果查询当前系统使用的是的 Xorg 还是 Wayland:

echo $XDG_SESSION_TYPE

示例:

# silascript @ (base) in ~ [21:28:21] 
$ echo $XDG_SESSION_TYPE 
wayland

Xorg

Wayland

常见问题

wayland 不加载 xprofile

wayland 模式下,系统是不会加载 .profile 或 .xprofile 文件的,即便是手动 source,也属于临时性的,关闭 Terminal 后,加载效果恢复原状。

因为这个特性,让原有习惯的配置环境变量的方式处于一种「作废」的状态。

解决方案 1
  1. 将环境变量集中到自定义的配置文件中,比如 .local_profile,配置文件的文件名可以自己取,当然为了延续习惯,还是叫 xxprofile 好点。
  2. 如果使用 Zsh_note,可以在 .zshrc 文件中 source 自定义的配置文件。如果只使用 Bash,就在 .bashrc 或 .bash_profile 中 source 自定义配置文件。

Note

如果使用 Zsh,只要在 .zshrc 中 source 下,连 Bash 也生效。

  1. 如果当前是 Xorg,类似的,在 .xprofile 或 .profile 中 source 自定义的配置文件。

Note

如果为了兼容性,可以在 .zshrc 或 .xprofile 文件 source 配置文件时,加个 if 语句判断下:

if [[ $XDG_SESSION_TYPE == "x11" ]] 或 if [[ $XDG_SESSION_TYPE == "wayland" ]] && [[ -f $HOME/.local_profile ]]

这个 .xprofile 就能在 Wayland 模式下得以保留 -- 保留这货,可能对于某些软件是有必要的,如 SublimeText。

示例:

Tip

不要使用 .zshenv 去配置或 source 环境变量,这货,每次 source 或打开一次 Terminal,都会「叠加」一次环境变量,这样就会出现重复,很可怕。个人看来 .zshenv 这货基本就已经是废了,Zsh 怪不得各种资料都不太提这货,一说配置都只说在 .zshrc 里配,这大概是其中一个原因罢。

解决方案 2

解决方案 1 只能解决 Wayland 在 Terminal 这种 Shell 下环境变量的问题,对于一些图形界面软件,则这些环境变量则依然未生效,如 VSCode,虽然使用 解决方案 1,在 Terminal 下 PATH 是配置正确的,但在 VSCode 下却依然找不到相应的配置,这证明了 解决方案 1 存在明显局限性。

要想解决,就得使用类似于在 Xorg 下 .xprofile 文件相似能力的方式。

在 ~/.config/environment.d/ 下创建 .conf 文件,这个文件就是能达到类似于 .xprofile,无论是 Shell 还是其他软件,具有「全局性」的环境变量配置方案。

.conf 文件格式是「键=值」对,跟 rc 或 profile 类似,但比它们更「死板」--rc 或 profile 实则是 shell 脚本,所以使用起来很灵活,能使用 shell 语法写些逻辑代码,但 .conf 文件去真如其名,就只有个「配置文件」,所以使用上得先作下「心态调整」,不要期望它像 rc 或 profile 一样爽。

.conf 文件语法:

  • .conf 文件中变量引用使用 ${},如 ${HOME}

相关命令:

  • systemctl --user show-environment:显示当前环境变量配置情况

[!info] 相关资料

解决方案 3

此方案是迄今为此,最佳解决方案。

使用 .zprofile 替代 xprofile 作为「全局」配置文件,这即不用使用 ~/.config/environment.d/ 目录下的 .conf 配置文件,也不用使用 .xprofile 来「兼容」两种模式,甚至不用在配置文件中使用 if [[ $XDG_SESSION_TYPE == "wayland" ]] 这种判断语句,可以说这是最简洁高效的方案。

[!info]

使用 .zprofile,虽然在 x11 和 Wayland 两种模式下都能使用环境变量生效,而且不止是在 Shell 中生效,图形界面的软件同样也能生效。

但这个方案不是完全完美方案,因为如果配置文件中 eval 配置相关环境变量语法时,在 x11 模式下,环境变量配置是无效。

在当前各 Linux_Note 各大发行版都逐步使用 Wayland 的大趋势,Xorg 模式下存在一点小「bug」,应该也是可以接受的,毕竟 Xorg 已经开始处于「被淘汰」的状态了,所以使用 .zprofile 来代替 .xprofile 已经是「最优解」。

[!tip]

但注意,conda 那个 conda init 生成的配置代码,不能放在 .zprofile 中,虽然 conda 有效,但 conda activate 切换环境就失效了。所以为了 conda 的正常使用,还是将那段代码移到 .zshrc 文件中。

gnome-tweak 启动问题

conda 会引起 gnome-tweak 启动出错,可能会报 ValueError Namespace Gtk not available 这种错误。主要是 conda 接管了 Python 环境造成的。

解决方案

将 gnome-tweaks 的启动文件中的第一行,即 python 路径修改。

#!/usr/bin/python3 或 #!/usr/bin/env python3,自行使用 whereis python 来查询自己的 python 的路径,把路径改下就能启动了!

[!tip] gnome-tweaks 启动文件

使用 whereis gnome-tweaks 查看。一般是 /usr/bin/gnome-tweaks 这文件。

很多时候 gnome-tweaks 使用的是 #!/usr/bin/env python3 这个,而使用的 conda,这个 python 就是 conda 下的 python,一般来说 linux 会自带默认的 python,所以修改为系统默认的 python3,即 /usr/bin/python3,就可以启动 gnome-tweak 了。

ValueError: Namespace Gtk not available

运行:conda install -c conda-forge gtk3。不过很多时候这个错误报出只是表象,更多的是 gnome-tweak 使用了 conda 的 python,而 conda 中是没有 gtk 的,所以还是使用 gnome-tweaks 启动出错解决方案 中的修改 gnome-tweaks 的 python 路径来解决。

相关资料:

theme

主题以目录来区隔,可以放在根也可以放在用户目录:

  • /usr/share/themes/
  • ~/.local/share/themes/

一般使用系统的包管理器安装的主题,都装在根上,即 /usr/share/themes/ 这个目录下。

而为了方便还是建议建在用户目录,即 ~/.local/share/themes

Tip

gnome-look:这个网站拥有大量 gnome 美化相关的资源。

GTK 主题相关

GTK 主题比较突出的一个问题,就是它不随着 Gnome「深浅色模式」切换而切换,虽然使用 tweak 工具可以设,但设完,系统重启或切换深浅色械,它就立即失效。

为了解决这个问题,可以使用 Gnome-Shell 的一个扩展插件:night-theme-switcher 。

night-theme-switcher 这个插件其中有个设置,为「日间」和「夜间」,即深色浅色模式,指定相应的主题 -- 这是自动切换。如果不管日间还是夜间都想用深色主题,那都设置为深色主题就好了。这个小插件非常方便地解决了 GTK 主题不跟 Gnome 深浅色模式切换的「小 Bug」。

[!info] 参考资料

打开文件夹问题

其实是默认应用问题,只要以下代码就能回复打开文件夹功能:

xdg-mime default org.gnome.Nautilus.desktop inode/directory

显示驱动

wayland 仅支持 KMS 驱动。

Inter 显卡:pacman -Syu mesa

  • Mesa 驱动不支持 2 代及之前的 CPU,mesa-amber 可以支持 2 代 cpu
  • 2~4 代 CPU,需要安装 xf86-video-intel,因为 modsettings 驱动不支持 4 代之前的 CPU。

复制粘贴

Linux 命令行剪贴板工具。

wl-clipboard

Wayland环境:用 wl-clipboard包,其专为 Wayland 设计,安全性更好。其中包括 wl-copy 和wl-paste 两块模块。

xclip

x11 或 XWayland 优先使用 xclip。

xsel


小问题

u 盘

挂载问题

因为文件系统格式不同,u 盘挂载不了,可能会出现类型的错误:

Error mounting /dev/sdc1

wrong fs type,bad option,bad superblock

先确定是不是文件系统格式问题,使用 blkid 命令查看:

sudo blkid /dev/sdc1

如果返回信息中 TYPE="ntfs",这就代表 u 盘是 ntfs 格式,Linux 挂载时可能出现错误,得修复。

修复:

sudo ntfsfix -d /dev/sdc1

小工具

cheat.sh

cheat.sh/:firstpage 是一个快速查询 Linux 命令的小工具。它不但能使用浏览器查询,还能在命令行中使用:

curl cheat.sh

Tip

也可以缩写成这样:curl cht.sh

如查询 awk 的使用,可以敲入这个命令:curl cheat.sh/awk,就会显示 awk 使用示例。

navi

navi 功能与 cheat.sh 类似,就是命令行查询,它是使用 Rust 写的。

FileManager-Actions

FileManager-Actions 这个工具可以方便更改右键菜单。

取色器

Gcolor3

Gcolor3 Gcolor3 Repo 是一个使用 GTK+3 制作的取色小工具。

Gcolor3 screenshot

使用包管理器安装,以 ArchLinux 为例:

yay -S extra/gcolor3

彩色命令行

lsd

lsd 是一个给 ls 命令美化的小工具。

lsd screen

exa

exa 与 lsd 类似功能的小工具 -- 同样也是使用 Rust 语言编写的。

exa screen

exa 可以设置各种显示样式,像什么树型目录,git 标识等。

示例:

alias ll='exa -a --long --header --group --tree --level=2 --icons --time-style=long-iso'

[!info] -a:显示所有文件包括隐藏文件

--long:完整路径

--icons:显示目录及文件图标

--header:显示各列的名称

--group:显示用户组(默认只显示用户)

--tree:以树型结构显示目录结构

--level=2:显示子目录的层数

--time-style=long-iso:这是将时间样式设置成 2023-05-31 01:37 样式。

--git:如果当前目录是 Git 管理目录,将会多出一个显示 git 状态的列,否则这一列将不会显示。

更详细设置请参考:exa 文档

Tip

exa 已经停止更新的,可以使用 eza 平替。

eza

eza 是 exa 的一个 fork 版本。因为 exa 已经停止更新的,所以可以使用 eza 进行替代。

Tip

可以将做 exa 的软链接指向 eza 安装目录。这样之前使用了 exa 的配置将不用修改,无痛过度到 eza。

监控工具

lm_sensors

lm_sensors 是用来获取 CPU 温度的一个小工具。

执行 sensors 命令就能查看当前系统当前的温度列表,如:

$ sensors
acpitz-acpi-0
Adapter: ACPI interface
temp1:        +27.8°C  
temp2:        +29.8°C  

coretemp-isa-0000
Adapter: ISA adapter
Package id 0:  +42.0°C  (high = +82.0°C, crit = +102.0°C)
Core 0:        +42.0°C  (high = +82.0°C, crit = +102.0°C)
Core 1:        +42.0°C  (high = +82.0°C, crit = +102.0°C)

[!info] 相关资料

btop

btop 是一个可以在图形界面或 终端 下运行的系统资源监视器。

它内置了多款 Theme,非常漂亮。

btop screenshot 1

硬件检测

cpu-x

CPU-X 是 「Linux 版的 CPU-Z」,而且是开源的。

[!info] 相关资料

hardinfo2

hardinfo2 是 hardinfo 的重构版。

[!info] 相关资料

相关链接


其他 Linux 笔记


相关资源链接

社区网站

各种资料