Tips on Linux

1. 复制一份备份文件

cp /etc/sysconfig/iptables{,.back}

2. 重命名

mv /etc/sysconfig/iptables{,.back}

3. 追加内容到文件尾

echo "123" >> /path/file

4. 树形查看目录大小

du -h --max-depth=1

5. 指定源搜索软件

yum repo-pkgs REPO list
yum repo-pkgs epel list | grep nginx
ANOTHER WAY TO
yum --disablerepo "*" --enablerepo REPO list
yum --disablerepo "*" --enablerepo REPO list | grep nginx

6. MySQL 5.7.37

password —> authentication_string

7. 挂载磁盘设备

fdisk /dev/vdb1
{n, p, size, type, w}
mkfs.ext4 /dev/vdb1
mount /dev/vdb1 /data

8. 使用代理

curl -–socks5 127.0.0.1:10808 https://www.google.com
wget -e http_proxy=127.0.0.1:10808 http://www/google.com
wget -e https_proxy=127.0.0.1:10808 https://www/google.com

8.1 测试是否使用代理

curl cip.cc

8.2 设置临时代理

export  http_proxy="http://username:password@proxyServer:port/"
export https_proxy="http://username:password@proxyServer:port/"
export ftp_proxy="http://username:password@proxyServer:port/"
export no_proxy="127.0.0.1,192.168.124.0/16,*.example.com"

8.3 取消代理

unset  http_proxy
unset https_proxy
unset ftp_proxy
unset no_proxy

8.4 永久代理

cat   >>  /etc/profile   << EOF
export http_proxy="http://username:password@proxyServer:port/"
export https_proxy="http://username:password@proxyServer:port/"
export ftp_proxy="http://username:password@proxyServer:port/"
export no_proxy="127.0.0.1,192.168.124.0/16,*.example.com"
EOF

source /etc/profile

9. 清空正在使用的文件

/usr/bin/cp /dev/null /path2yourFILE
> /path2yourFILE
cp使用绝对路径, 避免出现cp提示是否覆盖文件
对正在使用的文件,如果直接rm -rf 文件是没了, 但是占用的空间还在.

10. 图形化配置网络ip

nmtui

nmtui 是 NetworkManager 工具的一部分,它为你提供了一个漂亮的用户界面来配置网络。这是 NetworkManager-tui 包的一部分,当你完成最小服务器的安装时它应该默认安装。

11. 删除某个目录下除了某个文件之外

rm -rf /pathtoyourdir/(!xx.txt)

12. 不重启系统识别新添加的硬盘

for i in 0 1 2; do echo "- - -" > /sys/class/scsi_host/host$i/scan; done

13. 删除乱码文件

ls -i
find -inum xxxx -delete

14. 查找已删除但正在使用的文件

lsof +L1
lsof | grep deleted

  • +L 启用文件链接计数
  • -L 关闭文件链接计数
  • +L1 列出已打开但是被取消链接的文件 (一般指deleted)

15. Windows切换samba用户

  • 查看当前链接net use
  • 删除链接 net use * /del

16. 判断口段是否开放

nc -zv <ip> <port>

17. 99-sysctl.conf

99-sysctl.conf 是一个在 /etc/sysctl.d/ 目录中的文件,它是用来配置系统内核参数的。文件名中的数字 99 表示它的优先级较高,因为数字越大,优先级越高。在应用 sysctl 设置时,系统会按照文件名的字典序来顺序加载这些文件,较高优先级的文件会覆盖较低优先级的文件中相同参数的设置。

在 99-sysctl.conf 文件中,您可以指定各种系统内核参数的设置,比如网络参数、内存参数等。这些参数的设置可以影响系统的性能、安全性和行为

18. I/O读写情况

pidstat -d | sort -k 5 -n -r | head -n 10

pidstat -d : 查看磁盘I/O
sort: -k : 第五列 -n : 数值大小 -r : 逆序

19. 查看 MySQL 各个数据库的大小

  • 查看所有数据库大小

    SELECT table_schema AS `Database`, 
    ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS `Size (MB)`
    FROM information_schema.tables
    GROUP BY table_schema;
  • 查看某个数据库的所有表

    SELECT 
    table_name AS `表名`,
    ROUND((data_length + index_length) / 1024 / 1048576, 2) AS `表大小(GB)`
    FROM
    information_schema.tables
    WHERE
    table_schema = 'your_dbname'
    ORDER BY
    (data_length + index_length) DESC;

20. MySQL一些初始测试

CREATE database IF NOT EXISTS rand_db character SET utf8 collate utf8_general_ci;
CREATE user IF NOT EXISTS 'admin'@'%' identified BY 'admin123';
GRANT all privileges ON rand_db.* TO 'admin'@'%';
flush privileges;


CREATE TABLE IF NOT EXISTS rand_db.rand_table (
id INT AUTO_INCREMENT PRIMARY KEY,
column1 VARCHAR(255),
column2 INT,
column3 DATETIME
);

21. pve 去除订阅弹窗

编辑文件
/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
Ext.Msg.show –> Ext.Msg.noshow

22. firewalld public不生效

public区域没有指定接口的时候, 相关public的设置不一定生效

firewall-cmd --zone=public --add-interface=eth0 --permanent

23. Linux 终端快捷键

快捷键 功能
Ctrl + A 切换光标至行首
Ctrl + E 切换光标至行尾
Ctrl + U 删除光标至行首
Ctrl + K 删除光标至行尾
Ctrl + W 删除光标前一个词
Ctrl + L 清屏
Ctrl + C 停止正在执行的进程或命令
Ctrl + D 注销或退出终端
Ctrl + Z 暂停正在执行的进程(fg恢复)
Ctrl + R 在命令历史中进行逆向搜索
!! 重复执行上一条命令
!n 重复执行命令历史中的第 n 条命令

24. yum 撤回安装操作

某些情况下,为了安装某些软件需要安装大量依赖,比如下面

yum install cmake3 glib2-devel libpcap libpcap-devel libgcrypt-devel glib2-devel qt-devel qt5-qtbase-devel qt5-linguist qt5-qtmultimedia-devel qt5-qtsvg-devel libcap-devel libcap-ng-devel gnutls-devel krb5-devel libxml2-devel lua-devel lz4-devel snappy-devel spandsp-devel libssh2-devel bcg729-devel libmaxminddb-devel sbc-devel libsmi-devel libnl3-devel libnghttp2-devel libssh-devel libpcap-devel c-ares-devel redhat-rpm-config rpm-build gtk+-devel gtk3-devel desktop-file-utils portaudio-devel rubygem-asciidoctor docbook5-style-xsl docbook-style-xsl systemd-devel python34 cmake3 git gcc gcc-c++ flex bison doxygen gettext-devel libxslt cmake

某些包已经存在, 会直接跳过安装, 安装依赖后发现软件还是无法安装, 这个时候我们打算撤回依赖安装
此时yum remove的话,会删除关键依赖

yum remove cmake3 glib2-devel libpcap libpcap-devel libgcrypt-devel glib2-devel qt-devel qt5-qtbase-devel qt5-linguist qt5-qtmultimedia-devel qt5-qtsvg-devel libcap-devel libcap-ng-devel gnutls-devel krb5-devel libxml2-devel lua-devel lz4-devel snappy-devel spandsp-devel libssh2-devel bcg729-devel libmaxminddb-devel sbc-devel libsmi-devel libnl3-devel libnghttp2-devel libssh-devel libpcap-devel c-ares-devel redhat-rpm-config rpm-build gtk+-devel gtk3-devel desktop-file-utils portaudio-devel rubygem-asciidoctor docbook5-style-xsl docbook-style-xsl systemd-devel python34 cmake3 git gcc gcc-c++ flex bison doxygen gettext-devel libxslt cmake

正确做法:

yum history查看yum操作记录

[root@pve-centos7 ~]# yum history 
Loaded plugins: fastestmirror, langpacks
ID | Login user | Date and time | Action(s) | Altered
-------------------------------------------------------------------------------
168 | root <root> | 2024-05-24 14:46 | Install | 84
167 | root <root> | 2024-05-24 14:09 | Erase | 1
166 | root <root> | 2024-05-24 10:55 | Install | 2
165 | root <root> | 2024-05-24 10:09 | Update | 7
164 | root <root> | 2024-05-16 09:25 | Install | 1
163 | root <root> | 2024-05-15 16:48 | Install | 46
162 | root <root> | 2024-05-14 09:51 | Install | 1
161 | root <root> | 2024-05-08 08:46 | Update | 2 P<
160 | <dev> | 2024-05-06 15:36 | Install | 1 >
159 | <dev> | 2024-05-06 15:36 | Install | 2 P<
158 | <dev> | 2024-05-06 11:21 | I, U | 26 ><
157 | root <root> | 2024-04-29 10:39 | Erase | 1 >
156 | root <root> | 2024-04-26 16:37 | Install | 9
155 | root <root> | 2024-04-26 13:25 | Update | 7
154 | root <root> | 2024-04-24 10:19 | Install | 9 EE
153 | root <root> | 2024-04-24 09:09 | Install | 1
152 | root <root> | 2024-04-15 15:39 | Update | 5 <
151 | root <root> | 2024-04-07 16:50 | Install | 8 >
150 | root <root> | 2024-04-07 16:49 | Install | 2
history list

撤回刚才的操作直接 yum history undo 168 即可

25. vim 常见快捷键

快捷键 功能
x 向右删除光标所在的文本
X(大写) 向左删除光标所在的文本
y 复制选中的文本
i 在当前光标位置前插入
I 在当前行首插入
a 在当前光标位置后插入
A(大写) 在当前行尾插入
0 切换至行首

26. 端口检测

某些情况下系统可能没有安装 telnet ,nc , nmap 等端口检测工具, 可以利用一下常见的命令变相检测端口的连通性.

  • ssh -v $IP -p $PORT

参数解释:
-v 标识详细模式
-p 指定端口

输出内容中看到 Connection established 表示该端口是开放的

图

  • echo >/dev/tcp/$IP/$PORT

图

27. 容器检测nginx进程

检测所有容器是否包含某个进程,并返回该容器的容器名

#!/bin/bash
containers=$(docker ps -q)
for container in $containers; do
container_name=$(docker inspect --format '{{.Name}}' $container | sed 's/^\/\([^/]*\)$/\1/')
if docker exec $container pgrep -x nginx > /dev/null 2>&1; then
echo "Container $container_name is running Nginx"
fi
done

28. 基于TCP的时间同步

基于 TCP端口37的时间同步

服务端:

yum install xinetd

配置文件:

vim /etc/xinetd.d/time-stream
disable = yes —> disable = no

客户端:

yum install rdate
rdate -s server_ip

29. 查看非空行和非注释行

grep -E '^\s*[^#]' example.txt
egrep -v "^$|^#" example.txt

30. docker镜像便捷传输

docker save mysql:5.7.44 | gzip | ssh [email protected] 'gunzip | docker load'

31. docker 配置代理

docker 不支持socks代理,请使用http代理

more /etc/systemd/system/docker.service.d/http-proxy.conf 
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:10809"
Environment="HTTPS_PROXY=http://127.0.0.1:10809/"
Environment="NO_PROXY=localhost,127.0.0.1,10.0.0.0/16,192.168.0.0/16"

Environment="HTTP_PROXY=socks://127.0.0.1:10809"
Environment="HTTPS_PROXY=socks://127.0.0.1:10809/"

32. 下载rpm包

rpm -aq | grep boost | xargs yumdownloader --destdir=./
--destdir=./ : 指定下载路径
- -resolve : 下载依赖

33. Linux 终端命令提示符

# 设置颜色
USER_COLOR="\[\e[0;32m\]" # 绿色
HOST_COLOR="\[\e[0;34m\]" # 蓝色
PATH_COLOR="\[\e[0;33m\]" # 黄色
RESET_COLOR="\[\e[0m\]" # 重置颜色

# 设置提示符
if [ "$EUID" -eq 0 ]; then
PS1="[${USER_COLOR}\u@\h${RESET_COLOR} ${PATH_COLOR}\w${RESET_COLOR}]# "
else
PS1="[${USER_COLOR}\u@\h${RESET_COLOR} ${PATH_COLOR}\w${RESET_COLOR}]$ "
fi

34. git 代理

  • http/https代理
    git config --global http.https://github.com.proxy socks5://127.0.0.1:10808
  • ssh 代理
    vim ~/.ssh/config
    Host github.com
    Hostname ssh.github.com
    Port 443
    User git
    ProxyCommand nc -v -x 127.0.0.1:10808 %h %p
    IdentityFile ~/.ssh/id_rsa
    TCPKeepAlive yes

35. 任务后台运行

yum install screen -y

  • 启动新会话
    screen -S $SESSION_NAME

  • 将会话放入后台
    Ctrl + A, D

  • 查看后台运行的会话
    screen -ls

  • 重新连接会话
    screen -r $SESSION_NAME 或者 screen -r SESSION_ID

  • 结束会话
    Ctrl + D 或者 会话中执行 exit

  • 强制终止会话
    screen -X -S SESSION_NAME quit

36. 不借助 netstat, ss, lsof 命令查看进程监听的端口

某些情况, 比如容器内, 没有netstat, ss, lsof这些命令的情况下查看端口监听情况

cat /proc/net/tcp 查看所有进程的监听情况
cat /proc/1121/net/tcp 查看进程id为1121的端口监听情况

 cat /proc/net/tcp | awk 'NR>1 {
split($2,local,":");
split($3,remote,":");
printf("Local: %d.%d.%d.%d:%d Remote: %d.%d.%d.%d:%d\n",
strtonum("0x"substr(local[1],7,2)),
strtonum("0x"substr(local[1],5,2)),
strtonum("0x"substr(local[1],3,2)),
strtonum("0x"substr(local[1],1,2)),
strtonum("0x"local[2]),
strtonum("0x"substr(remote[1],7,2)),
strtonum("0x"substr(remote[1],5,2)),
strtonum("0x"substr(remote[1],3,2)),
strtonum("0x"substr(remote[1],1,2)),
strtonum("0x"remote[2]))
}'