日常编程开发技巧之一

Linux 发行版

1
2
3
4
5
Arch系:ArchLinux/Antergos/Manjaro
Redhat系:CentOS/Fedora/Mageia/openSUSE
Debian系:Debian/Ubuntu/Kali/Kubuntu/LinuxMint/Deepin/UbuntuKylin

Linux排行榜与Linux实时资讯站点:https://distrowatch.com/

Google 搜索引擎指定搜索的语言范围

1
2
3
4
5
6
7
8
默认: 全球各种语言的搜索结果
英文: &lr=lang_en
日文: &lr=lang_ja
中文: &lr=lang_zh-CN
中文(含台湾): &lr=lang_zh-CN%7Clang_zh-TW

举例只搜索中文相关的Java内容:
https://www.google.com/search?lr=lang_zh-CN&q=Java

SSH 客户端通过 Socker5 代理连接到 Linux 目标服务器

1
2
# 下面Socker5代理服务器的IP和端口是127.0.0.1和1080,Linux目标服务器的IP/域名是192.168.1.1,其中Socker5代理服务可以是SS/SSR、Tor...
$ ssh -o ProxyCommand='nc -x 127.0.0.1:1080 %h %p' root@192.168.1.1

Linux 解压文件

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
# 解压.rar后缀的文件
$ unrar x xxx.rar

# 解压.rar后缀的文件,若文件存在则直接覆盖
$ unrar x -o+ xxx.rar

# 指定目录深度,解压目录下的所有RAR文件
$ find -maxdepth 1 -name '*.rar' | xargs -i unrar x {}

# 解决unzip解压文件后,出现中文文件名乱码的问题
$ unzip -O CP936 xxx.zip

# 通过upzip解压文件到指定的目录,前提是指定的目录必须存在
$ unzip -d /usr/local gradle-5.4.1-bin.zip

# 指定目录深度,解压目录下的所有ZIP文件
$ find -maxdepth 1 -name "*.zip" | xargs -i unzip -O CP936 {}

# 指定解压目录,前提是指定的目录必须存在
$ tar -xvf apache-maven-2.6.tar.gz -C /home/www/apache-maven-2.6

# 解压.7z后缀的文件(不保持目录结构)
$ 7za e data.7z

# 解压.7z后缀的文件(保持目录结构)
$ 7za x data.7z

Linux 强制删除查找到的文件

1
2
3
4
5
# 强制删除当前目录下文件名以downloading结尾的所有文件
$ find . -name "*downloading" | xargs rm -rf

# 或者使用-I指定一个替换字符串{},这个字符串在xargs扩展时会被替换掉,当-I与xargs结合使用,每一个参数命令都会被执行一次
$ find . -name "*downloading" | xargs -I {} rm -rf {}

Linux 文件统计

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 统计当前目录下文件(指定后缀)的总个数
$ find . -name "*.html" | wc -l

# 统计当前目录下每个文件(指定后缀)的总行数
$ find . -name "*.html" | xargs wc -l

# 统计当前目录下每个文件(指定后缀)的总字数
$ find . -name "*.html" | xargs wc -w

# 统计当前目录下每个文件(指定后缀)的总字节数
$ find . -name "*.html" | xargs wc -c

# 不加任何参数的wc会统计文件的总行数、总字数、总字节数
$ find . -name "*.html" | xargs wc

解决 Linux 的 tree 命令不能正确显示中文的问题

1
2
# 添加-N参数
$ tree -N

Linux 校验文件的哈希值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 基于MD5加密算法,获取文件的哈希值
$ md5sum tomcat8.tar.gz

# 或者将待校验文件的正确MD5哈希值写入到指定的文件,然后通过“md5sum -c”命令输出MD5哈希值比对的结果
$ vim tomcat8.md5
83aca9b98564ba4064aa0acad7360ceb tomcat8.tar.gz

# 输出文件的MD5校验结果
$ md5sum -c tomcat8.md5
tomcat8.tar.gz: OK

# 基于SHA1加密算法,获取文件的哈希值
$ sha1sum tomcat8.tar.gz

# 同上,也可以使用“sha1sum -c”命令进行SHA1哈希值的比对

Git 强制更新并覆盖本地仓库与工作区的文件,即本地强制同步远程仓库的所有文件

1
$ git fetch --all && git reset --hard origin/master && git pull

PM2 服务相关操作命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 启动某个应用
$ sudo pm2 start api_server

# 关闭某个应用
$ sudo pm2 stop api_server

# 查看某个应用的运行状态
$ sudo pm2 show api_server

# 启用PM2开机自启动
$ sudo systemctl enable pm2-root

# 禁用PM2开机自启动
$ sudo systemctl disable pm2-root

Centos7 防火墙配置

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
# 切换至Root用户
$ su - root

# 查看防火墙运行状态
# firewall-cmd --state

# 查看防火墙运行状态
# systemctl status firewalld

# 关闭防火墙
# systemctl stop firewalld

# 启用防火墙
# systemctl start firewalld

# 配置防火墙永久开放某个端口
# firewall-cmd --zone=public --permanent --add-port=8080/tcp
# firewall-cmd --zone=public --permanent --add-port=8080/udp

# 配置防火墙关闭开放某个端口
# firewall-cmd --zone=public --permanent --remove-port=8000/tcp

# 保存防火墙配置
# firewall-cmd --reload

# 查看防火墙已开放的端口
# firewall-cmd --list-ports

# 查看防火墙已开放的服务
# firewall-cmd --list-services

查看 Linux 系统的发行版本

1
2
3
4
5
6
7
8
9
10
# 以下方法中,至少有一种方法适用于Redhat、SuSE、Debian系的Linux发行版

# 方法一(在不同Linux发行版中,lsb_release命令不一定都存在)
$ lsb_release -a

# 方法二(xxx为发行版名称,例如os-release、centos-release)
$ cat /etc/xxx-release

# 方法三
$ cat /etc/issue

Linux 查看端口占用的情况

1
2
3
4
5
# 查看端口占用,且显示进程ID(推荐)
# netstat -anp|grep 80

# 或者(不显示进程ID)
# netstat -aon|grep 80

Debian/Ubuntu 防火墙配置

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
# 查看防火墙现有规则
# ufw status

# 开启防火墙
# ufw enable

# 关闭防火墙
# ufw disable

# 开放指定的tcp、udp端口
# ufw allow 22/tcp
# ufw allow 22/udp

# 同时开放tcp与udp端口
# ufw allow 22

# 删除开放22端口的规则
# ufw delete allow 22

# 拒绝指定的tcp、udp端口
# allow/deny 20/tcp
# allow/deny 20/udp

# 保存防火墙配置
# ufw reload

Git 设置代理

1
2
3
4
# 下面的http://127.0.0.1:8118是代理服务器的访问地址,也可以是本地代理工具的访问地址
$ git config --global http.proxy http://127.0.0.1:8118
$ git config --global https.proxy http://127.0.0.1:8118
$ git config --global http.sslverify false

YUM 设置代理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 方法一
# vim /etc/yum.conf
proxy=http://127.0.0.1:8118

# 方法二

# 临时添加环境变量
# export http_proxy=http://127.0.0.1:8118
# export https_proxy=http://127.0.0.1:8118

# 测试代理
# curl -I www.google.com

# 移除环境变量
# unset http_proxy
# unset https_proxy

Eclipse 常用快捷键

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
alt + /:代码补全
ctrl + d:删除当前行
ctrl + h:打开搜索界面
ctrl + w:关闭当前Tab页
crtl + t:显示类的继承关系
ctrl + f:当前查找/当前替换
ctrl + shift + x:转换为大写
ctrl + shift + y:转换为小写
crtl + q:返回到最近编辑的地方
ctrl + shift + f:格式化代码
ctrl + o:查看当前类的属性、方法
ctrl + l:定位到当前文件的某一行
ctrl + shift + o:快速生成导入包
ctrl + o:查看当前类所有的方法、属性
ctrl + f1:快速显示错误代码的Fix方案
alt + shift + r:重命名方法名、属性名
f3:快速定位光标位置的某个类、方法、属性
ctrl + shift + w:关闭打开的所有Tab页
ctrl + shift + g:查找类、方法、属性被引用的情况
alt + shift + w:快速定位当前文件所在项目中的路径
ctrl + shift + t:全局查找Java类文件,可以使用通配符
ctrl + shift + r:全局查找文件(包括Java类文件),可以使用通配符

IntelliJ IDEA 常用快捷键

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
alt + /:代码补全
ctrl + f:当前查找
ctrl + x:删除当前行
ctrl + f4:关闭当前Tab页
crtl + h:显示类的继承关系
alt + shift + f:收藏代码
ctrl + r:当前查找/当前替换
ctrl + alt + l:格式化代码
ctrl + shift + u:大小写转换
ctrl + e:查看最近打开过的文件
ctrl + alt + o:快速生成导入包
alt + left:返回到上一个编辑的页面
alt + right:进入到下一个编辑的页面
ctrl + shift + back :回到上一次改动的位置
ctrl + alt + ← : 回到上一次光标所在的位置
ctrl + alt + → : 回到后一次光标所在的位置
ctrl + shift + v:选择要粘贴的内容
crtl + shift + r:全局查找/全局替换
alt + enter:万能解错/生成返回值变量
ctrl + alt + h:查看方法被引用的情况
shift + f6:更改文件名、方法名、属性名
ctrl + f12:查看当前类所有的方法、属性
ctrl + alt + u:在当前Tab页显示类的继承结构图
ctrl + shift+i --> ctrl + enter:查看Java源码
ctrl + shift + ”+/-”:展开全部代码、折叠全部代码
ctrl + alt + shift + u:在新的Tab页显示类的继承结构图
ctrl + n:全局搜索普通文件与Java类文件,若需要搜粟包括Jar包里面的内容,需要勾选“include non-project classes”选项

Centos7 重启 IBUS 输入法

1
# ibus-daemon -r -d -x

Centos7 时间同步

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
# 由于Centos7默认使用chronyd来同步时间,如果需要安装其他时间同步服务(ntpd),则需要禁用chronyd
# systemctl disable chronyd

# 安装ntp服务
# yum install ntp

# 使用ntp手动同步时间
# ntpdate pool.ntp.org

# 开机启动ntp服务
# systemctl enable ntpd

# 启动ntp服务
# systemctl start ntpd

# 查看ntp服务的运行状态
# systemctl status ntpd

# 设置亚洲时区
# timedatectl set-timezone Asia/Shanghai

# 启用ntp同步
# timedatectl set-ntp yes

# 查看当前系统时间、时间同步状态
# timedatectl status

# 查看时间同步服务器列表
# ntpq -p

JVM 设置代理

1
2
3
4
5
6
7
# 不支持Socket代理,只支持Http代理

-Dhttp.proxyPort=8118
-Dhttp.proxyHost=127.0.0.1
-Dhttps.proxyPort=8118
-Dhttps.proxyHost=127.0.0.1
-Dhttp.nonProxyHosts="localhost|127.0.0.1|*.aliyun.com"

Centos7 调节屏幕亮度

1
2
3
4
5
# 安装xgamma
# yum install xgamma

# 调节调度,其中 0.1 < n < 10.0
# xgamma -gamma n

解决 Centos 的 Qt 桌面应用程序无法正常运行的问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 具体表现为应用的界面无法正常显示(白屏 + 界面过度拉伸),一般是Qt对高DPI显示器的配置出了问题

# 添加环境变量
# vim /etc/profile
export QT_AUTO_SCREEN_SCALE_FACTOR=0

# 使环境变量生效
# source /etc/profile

# 如果应用是在ZSH Shell环境下使用命令启动,则需要在ZSH的配置文件中添加环境变量(区分不同的Linux用户)
# vim ~/.zshrc
export QT_AUTO_SCREEN_SCALE_FACTOR=0

# 使ZSH配置文件生效(区分不同的Linux用户)
# source ~/.zshrc

Centos7 的应用快捷方式指定环境变量

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
# 配置示例,在快捷方式文件里指定环境变量:QT_AUTO_SCREEN_SCALE_FACTOR=0

# 方法一
[Desktop Entry]
Version=1.0
Name=Redis Desktop Manager
Comment=Redis Desktop Manager
Type=Application
Categories=Development;
Exec=env QT_AUTO_SCREEN_SCALE_FACTOR=0 /snap/bin/redis-desktop-manager.rdm %U
Terminal=false
StartupNotify=true
Icon=/var/lib/snapd/snap/redis-desktop-manager/current/usr/share/pixmaps/rdm.png

# 方法二
[Desktop Entry]
Version=1.0
Name=Redis Desktop Manager
Comment=Redis Desktop Manager
Type=Application
Categories=Development;
Exec=bash -c "export QT_AUTO_SCREEN_SCALE_FACTOR=0 && /usr/bin/vlc --started-from-file %U"
Terminal=false
StartupNotify=true
Icon=/var/lib/snapd/snap/redis-desktop-manager/current/usr/share/pixmaps/rdm.png

# 参考博客
# https://askubuntu.com/questions/144968/set-variable-in-desktop-file
# https://askubuntu.com/questions/542152/desktop-file-with-bashrc-environment

Centos7 的应用快捷方式使用 Root 权限启动

1
2
3
4
5
6
7
8
9
10
11
12
# 以下方法使用了gksu-polkit,目前存在无法通过UI界面关闭应用的Bug(即点击界面上的关闭按钮,应用进程不会被杀死)

[Desktop Entry]
Version=4.6.2
Encoding = UTF-8
Type=Application
Name=eclipse-neon
Icon=/usr/local/eclipse-neon/icon.xpm
Exec=gksu-polkit /usr/local/eclipse-neon/eclipse
Comment=JEE IDE
Categories=Development;IDE;
Terminal=false

Centos7 快捷方式的位置

1
2
3
4
5
6
# 全局的应用程序快捷方式
/usr/share/applications/
/usr/local/share/applications/

# 特定用户的应用程序快捷方式
~/.local/share/applications/

Linux 磁盘分区的空间不足

1
2
3
4
5
6
7
8
9
1. 可以尝试使用Gparted等工具进行分区扩容,但不建议这么做,因为容易破坏硬盘的分区表,导致数据丢失或者造成系统无法正常启动。

2. 建议将分区内(磁盘空间不足)体积较大的目录移动到其他分区(磁盘空间充足),然后在分区内(磁盘空间不足)创建软链接或者使用"mount --bind"的方法,指向新目录所在的路径。

3. 假设其他分区也没有充足的磁盘空间,那么此时应该新增硬盘并挂载到系统中,然后通过上面介绍的方法将分区内(磁盘空间不足)体积较大的目录移动到新硬盘的分区即可。

提示:
1) 切记并非所有应用都支持创建软链接(ln -s)的方法,因为创建软链接后有可能会导致部分应用无法正常运行(例如snapd),建议统一使用"mount --bind"
2) 假设通过Gparted工具进行分区扩容,扩容之后系统可以正常启动,磁盘分区的容量也确实增加了,但这一切都不能说明扩容操作真的成功了。因为这类操作可能会留下其他后患,例如扩容后使用"再生龙"备份硬盘为镜像文件时,会出现“无法保存分区”的错误信息。

Docker 配置代理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 此方法适用于Debian/Ubuntu/CentOS系统,修改配置后会持续生效,其中的配置将覆盖docker.service中的选项

# 创建存放配置文件的目录
# mkdir -p /etc/systemd/system/docker.service.d

# 新增代理配置文件
# vim /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://192.168.1.122:1080" "HTTPS_PROXY=http://192.168.1.122:1080" "NO_PROXY=localhost,127.0.0.1,mirrors.aliyun.com"

# 重载配置
# systemctl daemon-reload

# 重启Docker服务
# systemctl restart docker

# 若取消代理,只需删除代理配置文件,并重载配置和重启Docker服务即可

CURL 命令使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 跳过Https证书验证(-k)
# curl -k https://example.com

# 允许跟随重定向(-L)
# curl -I -L http://example.com

# 指定请求方式(-X)
# curl -X GET http://example.com

# 指定用户名密码(-u,注意密码会记录在Bash的历史记录中)
# curl -u username:password http://example.com

# 指定来源(--referer)
# curl -v -I --referer http://source.com htttp://example.com