menu Chancel's blog
rss_feed
Chancel's blog
有善始者实繁,能克终者盖寡。

Linux

作者:Chancel Yang, 创建:2023-07-25, 字数:20573, 已阅:180, 最后更新:2023-09-20

这篇文章更新于 211 天前,文中部分信息可能失效,请自行甄别无效内容。

本文是我多年来使用Linux的经验总结。我将分成两个部分来介绍,一部分是命令行界面(CLI),另一部分是桌面环境(KDE Plasma)的使用技巧

请注意,本文默认是基于Ubuntu 20.04 LTSKDE Plasma 5进行说明,但其他发行版和桌面环境也可以参考这些技巧

在CLI部分,我将分享一些我在终端中常用的命令和技巧;而在KDE部分,我将介绍一些我喜欢的KDE Plasma的特性和定制化选项。我会谈到如何调整桌面壁纸和主题,以及如何添加和管理小工具。分享一些对于提高生产力和舒适性非常有用的插件和扩展。

本文将为使用Linux的用户提供一些实用的技巧和惊艳的功能,无论是在CLI还是在桌面端。无论你使用哪个发行版或桌面环境,都可以借鉴这些惊艳

1. CLI

1.1. SSH

现在,你在互联网上购买一台服务器,无特别要求,一般都会默认使用一个Linux系统

而连接这台Linux服务器,通常会采用SSH的方式

SSH(Secure Shell)是一种网络协议,用于在不安全的网络上进行安全的远程登录和文件传输。它通过加密通信和身份验证机制,确保数据传输的机密性和完整性

1.1.1. SSH安全

而服务器通常是暴露在公网中的主机,如果仅仅只是按照默认设置,很容易被一些软件扫描以及攻击,对于普通用途的服务器来讲,做好以下3点就足够拦截大部分自动扫描攻击了

  1. 更改默认的22连接端口
  2. 禁止Root用户登录
  3. 禁止密码登录

编辑/etc/ssh/sshd_conf,修改以下3处

TEXT
#       $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $

# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.
...

# 更改默认端口为21093
Port 21093

# 禁止密码登录
PasswordAuthentication no

# 禁止Root用户登录
PermitRootLogin no
...

因为禁止了密码登录,所以我们需要采用证书登录

编辑~/.ssh/authorized_keys添加我们的公钥,并修改文件属性为600

公钥生成请看下一节

最后,重启我们的SSH服务,这样就可以规避大部分SSH登录机器人发起的请求了

Bash
sudo systemctl restart sshd

1.1.2. SSH公钥生成

SSH关闭密码登录之后,采用公钥私钥的方式登录会更安全,如何生成公钥私钥呢?

linux系统生成密钥非常简单,Windows可以使用其他第三方工具生成密钥

Bash
ssh-keygen -t rsa

创建时会询问你是否需要passphrase,这是用于使用证书时,验证密码来二次确保证书没有被盗用,根据需要自行选择

创建后,目录下会多出2个文件id_rsaid_rsa.pub,请妥善保存

id_rsa.pub是你的公钥文件,文件内容添加到任意服务器的.ssh/authorized_keys后,你就可以使用id_rsa连接到该服务器

同时,SSH也带有一个小工具方便我们快速的将公钥推送到远程服务器上,示例如下

Bash
ssh-copy-id -i id_rsa.pub -p 22 chancel@192.168.1.1

1.2. Shell

在Linux中,shell是一种命令行解释器,它是用户与操作系统之间进行交互的接口

1.2.1. Bash

常见的Linux shell有Bash(Bourne Again Shell)、Csh(C Shell)、Ksh(Korn Shell)等

我们经常执行:bash example.sh,其实就是用bash去执行example.sh这个脚本,与我们在Windows上双机打开exe的原理类似

同时,Shell还提供了许多功能,如变量定义、条件判断、循环等功能,可以视为一个比较简单的脚本语言

与Python类似

Bash是非常好用的,但在现在来看有些不够人性化了

1.2.2. ZSH

与sh和bash相比,ZSH在功能和特性方面更加强大和灵活

它提供了更高级的命令行编辑功能、更丰富的主题和插件支持、更强大的自动补全功能等

现在很多Linux发行版都会带上ZSH作为默认的Shell程序了

与之相映衬的是oh-my-zshoh-my-zsh是一个开源的zsh配置管理框架,提供了一系列的优化与增强

  • 大量漂亮的主题
  • 插件支持(很实用的语法高亮、自动补全、自动纠错、命令补全)
  • 更优雅更人性化的操作

如果已经安装了zsh,可以通过oh-my-zsh官方的脚本直接安装oh-my-zsh

Bash
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

1.3. 网络命令

1.3.1. 占用端口查找(netstat、ss、lsof、ffuser)

netstatss 是非常常见的端口占用查询方式,以下命令等价

Bash
netstat -tulpn | grep 8080 # 查找占用端口8080的程序
ss -tulpn | grep 8080 # 查找占用端口8080的程序

lsoffuser 是Linux中用于查看打开文件的命令行程序,也可以用于查看端口占用情况

Bash
lsof -i :8080 # 查找占用端口8080的程序
fuser -v 8080/tcp # 查找占用端口8080的程序

1.3.2. 网络探测(nc、telnet)

nc命令是Linux中非常好用的网络探测器,常用于检查对向端口(tcp/udp)是否开启

Bash
nc -zuv -w 5 114.114.114.114 53 # 查询114.114.114.114服务器的53端口是否接受UDP
nc -ztv -w 5 114.114.114.114 53 # 查询114.114.114.114服务器的53端口是否接受TCP

此外,还可以利用nc来扫描服务器开放端口

Bash
nc -ztv -w 2 114.114.114.114 1-100 # 查询114.114.114.114端口1-100的开放情况(tcp)

telnet命令是Linux/Windows下都支持的端口连通测试工具

Bash
telnet 114.114.114.114 53

1.3.3. 路由追踪(traceroute)

traceroute命令用于追查数据包的路由走向,判断两个网络之间的连通情况

Bash
traceroute -q 5 119.29.113.112

常见-q参数用于设置数据包数量,默认是3个数据包

1.4. 文本命令

grep查找匹配文本,sed更进一步查找匹配并编辑文本,awk适合定义复杂处理编辑文本方法

1.4.1. grep

grep是global regular expression print的缩写,其工作原理是读取每行并与搜索的字符串相匹配输出,支持正则表达式的输出

如常见的查找进程

Bash
❯ ps -ef | grep aria2c
chancel     1715    1358  0  2022 ?        00:00:30 /usr/bin/aria2c --conf=/etc/aria2c/aria2c.conf

对于grep而言,以下列举较为常见的匹配

Bash
# 统计head.js出现的次数
➜ grep -c 'head.js' www.log
449

# 搜索出现head.js的日志文件
➜ grep -l 'head.js' *
blog.log
www.access.log
www.log

# head.js出现的位置上下行展示 -A表示后面内容,-B表示前面内容,-C可代表A+B
➜ grep -A2 -B2 'head.js' www.log
36.235.132.115 - - [03/Jan/2023:08:46:02 +0000] "GET /static/css/mdui.min.css HTTP/1.1" 200 325338 "https://www.chancel.me/sw.js" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
36.235.132.115 - - [03/Jan/2023:08:46:02 +0000] "GET /static/js/mdui.min.js HTTP/1.1" 200 74021 "https://www.chancel.me/sw.js" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
36.235.132.115 - - [03/Jan/2023:08:46:02 +0000] "GET /static/js/head.js HTTP/1.1" 200 4602 "https://www.chancel.me/sw.js" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
36.235.132.115 - - [03/Jan/2023:08:46:02 +0000] "GET /static/icons/material-icons/MaterialIcons-Regular.woff2 HTTP/1.1" 304 0 "https://www.chancel.me/sw.js" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
36.235.132.115 - - [03/Jan/2023:08:46:02 +0000] "GET /static/fonts/roboto/Roboto-Regular.woff2 HTTP/1.1" 304 0 "https://www.chancel.me/sw.js" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"

# 正则表达式匹配
➜ grep -E '\?v\=[0-9]+' www.log
...
14.145.137.86 - - [03/Jan/2023:09:08:53 +0000] "GET /static/js/vue.min.js?v=1672489087.0 HTTP/1.1" 304 0 "https://www.chancel.me/articles/71" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
14.145.137.86 - - [03/Jan/2023:09:08:53 +0000] "GET /static/js/mdui.min.js?v=1672489087.0 HTTP/1.1" 304 0 "https://www.chancel.me/articles/71" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
14.145.137.86 - - [03/Jan/2023:09:08:53 +0000] "GET /static/js/head.js?v=1672489087.0 HTTP/1.1" 304 0 "https://www.chancel.me/articles/71" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
14.145.137.86 - - [03/Jan/2023:09:08:53 +0000] "GET /static/fonts/roboto/Roboto-Bold.woff2 HTTP/1.1" 304 0 "https://www.chancel.me/static/css/mdui.min.css?v=1672489087.0" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"

此外,还有以下常见参数

  • -s: 忽略错误信息
  • -i: 忽略大小写

1.4.2. sed

sed是stream editor的缩写,常见的用法是用于搜索替换一行,其形式通常类似于

Bash
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
Bash
# 删除gfwlist文件中的@@和||
➜ sed -i '/^$\|@@/d' gfwlist.txt

1.4.3. awk

...

1.5. 其他命令

1.5.1. ssh

ssh-copy-id 可推送ssh公钥到指定服务器上,将自动创建$HOME/.ssh/authorized_keys文件并写入公钥,如下

TEXT
ssh-copy-id -i id_rsa.pub -p 22 chancel@192.168.1.1

1.5.2. du

du指令用于查看当前文件目录大小,但并不直观,以下列举常规用法

Bash
# 查看整个文件夹大小
du -sh

# 查看文件夹中分布的文件大小
du -hsx *

# 使用排序查看前6个文件夹大小
du -hsx *| sort -rh |

1.5.3. 命令输出

column -t 可以将大部分输出规整为表格形式输出,如下

Bash
mount | column -t

2. 桌面端

2.1. 发行版

引用维基百科的解释

Linux 发行版(英语:Linux distribution,也被叫做GNU/Linux 发行版),为一般用户预先集成好的Linux操作系统及各种应用软件。一般用户不需要重新编译,在直接安装之后,只需要小幅度更改设置就可以使用,通常以软件包管理系统来进行应用软件的管理。Linux发行版通常包含了包括桌面环境、办公包、媒体播放器、数据库等应用软件。这些操作系统通常由Linux内核、以及来自GNU计划的大量的函数库,和基于X Window的图形界面。

本质上,选择发行版,是在选择包管理器与生态环境,可以认为选择一款发行版,即选择与之对应的社区生态

通常,包管理器与桌面环境也是可更改的,但这不是本文的重点

Linux包管理器大部分人都接触过Ubuntu系的apt与Cent系的yum/dnf,当然还有ZYppurpmi

不同的是,aptdnf/yum这两者几乎是Linux桌面环境下官方Linux安装包

当一款软件说他支持Linux时,你会发现他通常提供了debrpm

2.1.1. 常见发行版

Debian系发行版,个人认为是个人用户的最佳选择之一

Debian类发行版中最有名气的大约是Ubuntu系列了,Ubuntu是一个非常适合体验Linux桌面发行版的操作系统

常见的Debian系发行版列表如下

名称 特点
Ubuntu 一个非常流行的发行版
Debian 信奉自由软件、由志愿者开发维护
Kubuntu 使用KDE桌面的Ubuntu
Linux Mint 从Ubuntu派生并与Ubuntu兼容的系统
Knoppix 第一个Live CD系统
OpenGEU Ubuntu的派生版
Elementary OS 基于Ubuntu,酷似Mac OS X

除了Debian系的发行版,基于RPM软件包管理器的Red Hat系发行版是国内服务器最为常见的操作系统,包括阿里云的云操作系统也是基于Cent系列的魔改

如下是常见的Red Hat系的发行版列表

名称 特点
Red Hat Enterprise Linux Fedora的上游版
openSUSE 由Slackware分离出来的发行版
Fedora Red Hat的社区版
PCLinuxOS Mandriva的派生版本
CentOS 从Red Hat发展而来的发行版,由志愿者维护,提供百分百兼容Red Hat的兼容性
Megeia Mandriva发展而来的系统

除了Debian/Red Hat系列,还有许多优秀的发行版值得尝试

名称 特点
ArchLinux 一个基于KISS(keep it simple and tupid)的滚动更新发行版
CHakra ArchLinux的KDE桌面版
GENtoo 一个面向高级用户的发行版(需要自动编译)
Slackware 最早的linux发行版之一

选择哪个发行版取决于喜好,对于图形服务的PC来说,发行版的影响小于桌面环境的选择

2.1.2. 桌面环境

Linux发行版提供了许多不同的桌面环境供用户选择,如KDE PlasmaGNOMEXFCE等等。即使发行版没有提供所需的桌面环境,社区也会提供其他版本,例如Budgiei3等。

我长期使用的桌面环境是KDE,尽管我也尝试过GNOME和XFCE,但最终还是回归到了KDE,相较于其他桌面环境,KDE更注重开箱即用的体验,非常适合入门使用,而且在稳定性和扩展性方面都有优势,适合广大用户

使用一圈下来,比较主观的体验如下:

  • XFCE注重稳定性和低资源消耗,但为了达到这个目标,它减少了许多动画效果,简化了界面。在扩展性和自定义性方面不如其他两个桌面环境
  • KDE Plasma主打流畅和类似Windows的体验,降低了学习成本。它常常内置了一些常用的插件,不要被它外表的简单欺骗。KDE支持丰富的扩展插件和高度自定义设置
  • GNOME,它具有恰到好处的简洁风格,同时保留了基本功能

接下来的内容基于KDE Plasma,如果使用其他桌面环境,请自行查阅相关资料

2.2. 输入法

作为新手,在安装系统之后有非常多的问题需要查询,但此时可能恰好,大部分Linux发行版都不提供中文输入法

如果没有中文输入的需求可以跳过输入法安装

2.2.1. Fcitx5

Fcitx5是一个输入法框架,,许多发行版甚至直接就内置了Fcitx,如果没有,则需要我们手动来安装

Bash
sudo apt install fcitx5 fcitx5-chinese-addons fcitx5-frontend-gtk4 fcitx5-frontend-gtk3 fcitx5-frontend-gtk2 fcitx5-frontend-qt5 fcitx5-rime

编辑~/.xprofile,内容如下

Bash
export XMODIFIERS=@im=fcitx
export QT_IM_MODULE=fcitx
export GTK_IM_MODULE=fcitx

接下来安装rime输入法后就可以使用中文输入了

2.2.2. Rime

Rime是开源的高度自定义中文输入法,支持自定义词库,导入百万词库,导出个人词库,同步配置等功能,在Linux下使用习惯了Rime是非常爽的

2.2.2.1. Rime安装

创建用于存放rime的配置文件的文件夹:~/.local/share/fcitx5/rime,接着创建输入法的默认配置~/.local/share/fcitx5/rime/default.custom.yaml

YAML
# default.custom.yaml
# save it to: 
#   ~/.config/share/fcitx5/rime  (linux)
#   ~/Library/Rime       (macos)
#   %APPDATA%\Rime       (windows)

patch:
  schema_list:
    #    - schema: luna_pinyin          # 朙月拼音
        - schema: luna_pinyin_simp     # 朙月拼音 简化字模
    #    - schema: luna_pinyin_tw       # 朙月拼音 臺灣正體模式
    #    - schema: terra_pinyin         # 地球拼音 dì qiú pīn yīn
    #    - schema: bopomofo             # 注音
    #    - schema: bopomofo_tw          # 注音 臺灣正體模式
    #    - schema: jyutping             # 粵拼
    #    - schema: cangjie5             # 倉頡五代
    #    - schema: cangjie5_express     # 倉頡 快打模式
    #    - schema: quick5               # 速成
    #    - schema: wubi86               # 五笔86
    #    - schema: wubi_pinyin          # 五笔拼音混合輸入
    #    - schema: double_pinyin        # 自然碼雙拼
    #    - schema: double_pinyin_mspy   # 微軟雙拼
    #    - schema: double_pinyin_abc    # 智能ABC雙拼
    #    - schema: double_pinyin_flypy  # 小鶴雙拼
    #    - schema: wugniu        # 吳語上海話(新派)
    #    - schema: wugniu_lopha  # 吳語上海話(老派)
    #    - schema: sampheng      # 中古漢語三拼
    #    - schema: zyenpheng     # 中古漢語全拼
    #    - schema: ipa_xsampa    # X-SAMPA 國際音標
    #    - schema: emoji         # emoji表情
    # # # "translator/dictionary": luna_pinyin.extended

注销当前登录后重新加载KDE,在Konsole中输入命令打开fcitx5配置工具

Bash
fcitx5-configtool

在界面中配置输入方式添加rime输入法

2.2.2.2. Rime词库

对输入法而言最重要的当然是词库,这里推荐2个Wiki的词库,非常全面

在Github的页面中选择Release并下载词典文件(YAML格式),把下载的词典移动到存放Rime默认配置的文件夹,如下

Bash
mv moegirl.dict.yaml ~/.local/share/fcitx5/rime/
mv zhwiki.dict.yaml ~/.local/share/fcitx5/rime/

创建导入词库的配置文件:~/.local/share/fcitx5/rime/luna_pinyin.custom.yaml

INI
patch:
    "translator/dictionary": extended # 指向当前目录的extended.dict.yaml配置文件

创建扩展词库的配置文件: ~/.local/share/fcitx5/rime/extended.dict.yaml

INI
name: extended
version: "2021.02.19"
sort: by_weight
use_preset_vocabulary: true
import_tables:
  - luna_pinyin
  # 此处对应2个词典的文件名(不包含dict.yaml)
  - zhwiki
  - moegirl

tips: 如何验证词库加载成功?打个“刘畊宏”试试看能不能匹配出来

2.2.2.3. Rime输入法皮肤

可参考Github仓库:https://github.com/thep0y/fcitx5-themes.git

快捷执行下面命令即可安装

Bash
git clone https://github.com/thep0y/fcitx5-themes.git
cp -r fcitx5-themes/spring ~/.local/share/fcitx5/themes
cp -r fcitx5-themes/summer ~/.local/share/fcitx5/themes
cp -r fcitx5-themes/autumn ~/.local/share/fcitx5/themes
cp -r fcitx5-themes/winter ~/.local/share/fcitx5/themes
cp -r fcitx5-themes/green ~/.local/share/fcitx5/themes
cp -r fcitx5-themes/transparent-green ~/.local/share/fcitx5/themes
rm -r fcitx5-themes

创建配置文件:~/.config/fcitx5/conf/classicui.conf

Bash
Vertical Candidate List=False # 关闭垂直候选列表
PerScreenDPI=True # 根据屏幕DPI调整后选词大小
Font="Smartisan Compact CNS 13"
Theme=spring

在托盘区域重启fcitx5程序,再看看是否失效

提示1:遇到第三方软件无法正常使用输入法,请确认是否已安装了fcitx5-qt

提示2:遇到系统软件无法正常使用输入法,使用fcitx5-diagnose程序检查fcitx5环境配置是否正常

2.3. Chrome/Chromium

发部分Linux发行版一般都自带了Firefox,如只使用Firefox倒也轻松不少,chrome官网就支持下载deb

在下载deb包后,使用apt进行安装

Bash
sudo apt install ./google-chrome-stable_current_amd64.deb

2.4. 虚拟机KVM

Linux下的KVM虚拟软件相比其他虚拟软件提供了内核级别的虚拟,最大性能的共享物理机器的性能

KVM安装的过程可以参考 KVM(简体中文) - ArchWiki,参考安装步骤如下

检查支持情况,执行结果大于0说明支持虚拟化

Bash
egrep -c '(vmx|svm)' /proc/cpuinfo

安装KVM以及相关依赖项,并启动后台服务

Bash
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager

# 开机启动服务
sudo systemctl enable libvirtd.service
sudo systemctl start libvirtd.service
# 开启默认网络服务
sudo virsh net-start default
sudo virsh net-autostart default

# 添加你的用户到 libvirt 组,以便你可以运行虚拟机
sudo adduser `id -un` libvirt

在应用程序中搜索vm找到Virtual Machine Manager启动,界面操作简单,有其他虚拟软件经验零成本上手

2.5. freerdp

Windows自带RDP协议远程(即mstsc),在Linux上有着许许多多优秀的RDP协议客户端,这些客户端基本都上基于FreeRDP程序实现的

举例远程一台192.168.1.100的Windows PC,映射本地文件夹/mnt/sda,接收远程音频,设定分辨率大小1080P,方法如下

Bash
xfreerdp /v:192.168.1.100 /u:chancel /size:1920x1080 /drive:/mnt/sda,SDA /audio-mode:0

如果觉得命令行远程较为麻烦,也有很多第三方GUI客户端,推荐FreeRDP项目的Remmina客户端,Remmina支持主流的远程协议包括RDP/VNC/SSH/SFTP,除此之外,详尽的属性配置还能高度自定义化远程细节,如图

这是Linux下我最推荐的远程工具了,安装方式较为简单,Ubuntu/Arch可以直接使用包管理器安装,其他发行版可以自行参考Github上remmina项目安装说明进行安装

Bash
sudo apt install remmina

在参数设置复杂时,Remmina不太稳定容易闪退

注意,Remmina要使用RDP协议必须安装freerdp

2.6. 截图和录屏

截图与录屏是日常开发沟通时候有效的沟通手段,在Windows下,不少人都习惯了QQ/微信自带的截图,非常好用

在Linux桌面下与之类似体验的是deepin-screenshot,唯一的缺点是兼容性一般,不是所有桌面都能运行

如果deepin-screenshot无法使用,那么可以借助脚本搭配桌面环境自带的截图工具来实现类似的效果

KDE Plasma自带的spectacle举例,脚本如下

Bash
#!/bin/bash
#author:chancel
#date:2022-08-16

filename=`date +%Y%m%d.%H%M%S`.png
if [[ $2 == full ]]
then
        /usr/bin/spectacle -c -f -b -o $1/$filename
fi
if [[ $2 == monitor ]]
then
        /usr/bin/spectacle -c -m -b -o $1/$filename
fi
if [[ $2 == window ]]
then
        /usr/bin/spectacle -c -a -b -o $1/$filename
fi
if [[ $2 == area ]]
then
        /usr/bin/spectacle -c -r -b -n -o $1/$filename
fi

将上述脚本保存为spectacle.sh,使用方法如下

Bash
# 选定区域截图
/bin/bash spectacle.sh ~/Pictures area
# 截图当前活动窗体
/bin/bash spectacle.sh ~/Pictures window

录屏的话推荐peek

Bash
sudo apt install peek

2.7. Visual Studio Code

Visual Studio Code是微软旗下的轻量级IDE,大部分中小型项目使用轻量级IDE来跑是完全没有问题的

官网下载vscode后,可以直接安装

Bash
sudo apt install ./code_1.82.2_amd64.deb

2.8. dbeaver

Windows下navicat软件非常好用,同样也支持Linux,如果有navicat授权,在Linux下使用与Windows上没有区别,如果是要选择其他免费的数据库客户端,在Linux下选择就没有Windows那么丰富了

这里推荐免费开源的dbeaver,它在功能性上并不逊色navicat,在Windows下稳定性尚可,但是在Linux下稳定性只能说非常一般,在易用性方面当然是远不如商业版的navicat的,不过好在支持几乎所有主流数据库

外观上就没什么好挑剔了,基本是工业风格的UI,如下

安装如下

Bash
wget -O - https://dbeaver.io/debs/dbeaver.gpg.key | sudo apt-key add -\necho "deb https://dbeaver.io/debs/dbeaver-ce /" | sudo tee /etc/apt/sources.list.d/dbeaver.list
sudo apt update
sudo apt install dbeaver-ce

其他操作系统可以参考 DBeaver官网

2.9. Docker

官方仓库已经收录了Docker以及Docker Compose了,直接安装后启动并登录

Bash
sudo apt install docker.io
sudo systemctl start docker.service
sudo systemctl enbale docker.service
sudo docker login

拉取portainer运行看看

TEXT
sudo docker run portainer/portainer
sudo docker run -d --name portainer -p 59000:9000 --restart=always portainer/portainer

2.10. 系统小工具

2.10.1. 进程监控

top是Linux下自带的进程监控,如图

top是比较古老的进程监控程序了,这里更推荐htopbtop

Bash
sudo apt install htop btop

htop如图

btop如图

在直观程度以及功能扩展上,btop>htop>top

2.10.2. 磁盘占用分析

Windows下的第三方磁盘分析非常丰富,Linux下如果需要用到磁盘占用分析,推荐baobab

大部分发行版都自带这个软件,可以直接使用软件包管理器进行安装

安装如下

Bash
sudo apt install baobab

效果如图

2.10.3. 网络工具

Linux下有许多优秀的网络分析工具,安装如下

Bash
sudo apt install net-tools dnsutils iptraf-ng mtr proxychains

上述软件包作用如下:

  • net-tools:这个工具包提供了一些传统的网络工具,如ifconfignetstatroute等。它们用于配置网络接口、查看网络连接和路由表等操作
  • dnsutils:这个工具包包含了一些用于进行DNS(域名系统)解析和查询的工具,如nslookupdig等。它们可以帮助你检查和调试域名解析问题,获取有关域名的信息。
  • iptraf-ng:这是一个网络流量监控工具,可以实时监视网络接口的流量、连接数和数据包统计等。它提供了一个可视化的界面,让你可以更好地了解和管理网络流量
  • mtr:这个工具是一种网络诊断工具,结合了ping和traceroute的功能。它可以显示到目标主机的网络延迟(ping)和路径(traceroute),帮助你分析网络连接的问题。
  • proxychains:这是一个代理转发工具,可以将网络流量通过代理服务器转发。它可以帮助你在终端中使用代理访问互联网,用于加密和隐藏你的真实IP地址

其中尤其推荐proxychains,在终端需要使用代理时,往往要利用环境变量,如下

Bash
chancel@R7-4750G ~$ export http_proxy=http://127.0.0.1:11080
chancel@R7-4750G ~$ export https_proxy=http://127.0.0.1:11080
chancel@R7-4750G ~$ curl cip.cc
IP      : 1.2.3.4
地址    : 中国  香港  pccw.com
数据二  : 香港 | 电讯盈科有限公司
数据三  : 中国香港 | 电讯盈科
URL     : http://www.cip.cc/1.2.3.4

这样做不方便且每次都需要手动设置代理环境,proxychains可以非常优雅的解决这个问题

编辑proxychains配置文件/etc/proxychains.conf,在最下方添加代理信息

INI
# proxychains.conf  VER 3.1
#
...
[ProxyList]
# add proxy here ...
# meanwile
# defaults set to "tor"
# socks4        127.0.0.1 9050
http 127.0.0.1 11080

在终端中使用代理请求变得非常简单,如下

Bash
chancel@R7-4750G ~$ proxychains curl cip.cc
ProxyChains-3.1 (http://proxychains.sf.net)
|S-chain|-<>-127.0.0.1:11080-<><>-127.0.0.1:11080-<><>-OK
IP      : 1.2.3.4
地址    : 中国  香港  pccw.com
数据二  : 香港 | 电讯盈科有限公司
数据三  : 中国香港 | 电讯盈科
URL     : http://www.cip.cc/1.2.3.4

其他工具请自行体验

2.10.4. 系统备份

timeshift是非常优秀的增量系统备份工具,支持定时增量备份,指定备份目录以及恢复系统等功能

TEXT
sudo apt install timeshift

2.10.5. 后台运行

在Linux下,后台运行一款软件初学者通常采用nohup

Bash
nohup aria2c -c /etc/aria2/aria2.conf >> /var/log/aria2.log 2>&1 &

nohup有不少缺点,如输出的日志不好切割,进程被干掉不会自动重启,设置环境变量复杂,指定用户运行困难

相对的,可以使用Supervisor来管理后台软件,运行一些常见的软件非常有效果(如aria2、syncthing、frp等不带进程管理的软件)

aria2为例来看看Supervisor将普通程序设置为守护进程,安装并启用supervisor

Bash
sudo apt install supervisor
sudo systemctl enable supervisord
sudo systemctl start supervisord

编辑/etc/supervisor.d/aria2.conf

INI
[program:Aria2]
command=/home/chancel/apps/aria2c/aria2c -c /home/chancel/apps/aria2c/aria2c.conf
autostart=true # 开机自启
autorestart=true
startsecs=10
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stderr_logfile=/var/log/supervisor/%(program_name)s.log
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=1
stdout_capture_maxbytes=1MB
user=chancel

supervisor支持热加载新的配置文件,无需重启

Bash
# 与 supervisorctl reload不同,update不会重启任何未修改的应用,reload会重新读取所有配置文件重启所有应用
sudo supervisorctl update

查看目前正在运行的aria2c进程

Bash
➜ ps -ef | grep aria2c
chancel     1288     940  0 9月01 ?       00:00:15 /usr/bin/aria2c --conf=/etc/aria2c/aria2c.conf

supervisor非常有效的解决了nohup的痛点,对daemon运行程序感兴趣的话还可以进一步了解如何配置systemd的用户级程序

2.11. Deepin系软件

Deepin的大部分软件UI设计都非常不错,下面是常见的Deepin系的软件,Arch都可以直装的,其他发行版需要自助搜索看看

软件 介绍
deepin-calculator Deepin版计算器(推荐)
deepin-screenshot Deepin版截图(推荐)
deepin-system-monitor Deepin版系统监控(推荐)
deepin.com.qq.im Deepin版TIM
deepin-wine-wechat Deepin版微信
deepin.com.qq.office Deepin版WPS
deepin.com.thunderspeed Deepin版迅雷
deepin-movie Deepin版视频播放器
deepin-picker Deepin版取色器

[[replyMessage== null?"发表评论":"发表评论 @ " + replyMessage.m_author]]

account_circle
email
web_asset
textsms

评论列表([[messageResponse.total]])

还没有可以显示的留言...
[[messageItem.m_author]] [[messageItem.m_author]]
[[messageItem.create_time]]
[[getEnviron(messageItem.m_environ)]]
[[subMessage.m_author]] [[subMessage.m_author]] @ [[subMessage.parent_message.m_author]] [[subMessage.parent_message.m_author]]
[[subMessage.create_time]]
[[getEnviron(messageItem.m_environ)]]