← 返回博客

Ubuntu 操作备忘录

Ubuntu 日常运维常用命令合集,涵盖网络配置、磁盘挂载、CUDA 安装、用户管理、服务管理、进程追踪等操作速查。

#Ubuntu#Linux#运维#系统管理

bubblewrap支持

# 临时生效(立即可用)
 
echo 0 | sudo tee /proc/sys/kernel/apparmor_restrict_unprivileged_userns
 
# 永久生效
 
echo "kernel.apparmor_restrict_unprivileged_userns=0" | sudo tee /etc/sysctl.d/60-apparmor-namespace.conf
 
# 应用
 
sudo sysctl --system
 
# codex依赖bubblewrap沙盒, 因此需要开启他,不然提示: ⚠ Codex's Linux sandbox uses bubblewrap and needs access to create user namespaces.
 

环境变量最佳实践

# 写入 ~/.bashrc
 
cat << 'EOF' >> ~/.bashrc
if [ -f /workspace/bin/self.sh ]; then
    source /workspace/bin/self.sh
fi
EOF
 
# 创建并写入 /workspace/bin/self.sh
 
mkdir -p /workspace/bin && cat << 'EOF' > /workspace/bin/self.sh
#!/bin/bash
 
export JAVA_HOME=/home/leiax00/.jdks/jdk-21.0.10+7
export MAVEN_HOME=/workspace/tools/apache-maven-3.9.14
export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH
 
# 设置代理
 
proxy_on() {
    local address_port=\${1:-"vpn.yushe.ai:7890"}
 
    export http_proxy="http://\$address_port"
    export https_proxy="http://\$address_port"
    export no_proxy="localhost,127.0.0.1,.local"
 
    export HTTP_PROXY="http://\$address_port"
    export HTTPS_PROXY="http://\$address_port"
    export NO_PROXY="localhost,127.0.0.1,.local"
 
    echo "Proxy ON (http://\$address_port, socks5://\$address_port)"
}
 
proxy_off() {
    unset http_proxy
    unset https_proxy
    unset no_proxy
 
    unset HTTP_PROXY
    unset HTTPS_PROXY
    unset NO_PROXY
 
    echo "Proxy OFF"
}
 
proxy_status() {
    if [ -z "\$http_proxy" ]; then
        echo "No proxy set"
    else
        echo "Current proxy: \$http_proxy"
    fi
}
EOF
 
# 更新环境
 
. ~/.bashrc

添加一个目录下所有bin到环境变量

export PATH="$(ls -d ~/.jdks/*/bin 2>/dev/null | tr '\n' ':')$PATH"

安装英伟达驱动

# 查询电脑最适合的显卡驱动版本, 选择recommended进行安装
 
ubuntu-drivers devices
 
# 用命令行进行安装
 
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get install nvidia-driver-525 #此处数字要对应上面查询到的版本号
sudo apt-get install mesa-common-dev
 
# 验证驱动
 
nvidia-smi

cuda安装以及update-alternatives管理

developer.nvidia.com/cuda-toolkit-archive

# 查看有哪些可用的cuda版本, query详细版本, list列出所有注册版本
 
sudo update-alternatives --query cuda
sudo update-alternatives --list cuda
 
# 交互式查看, 并选择
 
sudo update-alternatives --config cuda
 
# 手动选择后恢复成自动
 
sudo update-alternatives --auto cuda
 
# 注册版本
 
sudo update-alternatives --install /usr/local/cuda cuda /self/ai/cuda/cuda-11.8 50
 
# 参数解释:
 
# 	/usr/local/cuda:符号链接路径。
 
# 	cuda:备选方案组名称。
 
# 	/self/ai/cuda/cuda-11.8:CUDA实际安装路径。
 
#  50:优先级(数值越大越优先)。
 
# 如果存在错误条目,手动删除(例如错误路径/usr/local/cuda)
 
sudo update-alternatives --remove cuda /usr/local/cuda
 
# 下载安装脚本
 
wget https://developer.download.nvidia.com/compute/cuda/12.8.0/local_installers/cuda_12.8.0_570.86.10_linux.run
 
# 安装依赖gcc, g++, 11.8依赖gcc-11, g++-11版本
 
# CUDA版本	支持的最高GCC版本
 
# CUDA 12.x	GCC 13
 
# CUDA 11.8	GCC 11
 
# CUDA 11.0	GCC 9
 
sudo apt install build-essential
 
# 安装兼容gcc, g++
 
# 安装GCC 11和G++ 11
 
sudo apt install gcc-11 g++-11
 
# 设置GCC 11为默认编译器
 
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 50
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 50
 
# 选择匹配版本
 
sudo update-alternatives --config gcc / g++
 
# 验证版本
 
gcc --version  # 应输出gcc-11.x.x
 
# 安装cuda
 
sudo sh cuda_12.8.0_570.86.10_linux.run \
  --toolkit --samples --silent \
  --toolkitpath=/self/ai/cuda/cuda-12.8 \
  --samplespath=/self/ai/cuda/cuda_samples_12.8
 
# 配置环境变量
 
sudo tee /etc/profile.d/cuda.sh << 'EOF'
export CUDA_HOME=/usr/local/cuda
export PATH=$CUDA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH
EOF
 
# 立即生效
 
source /etc/profile.d/cuda.sh
 
# 检查CUDA编译器
 
nvcc --version
 
# 加入update-alternatives管理
 
sudo update-alternatives --install /usr/local/cuda cuda /self/ai/cuda/cuda-12.8 100
 
# 重新安装后可能会提示之前的管理链接被损坏, 这个时候需要移出, 然后重新添加管理
 
root@lax-tsj:/self/ai/cuda/cuda-12.8# sudo update-alternatives --install /usr/local/cuda cuda /self/ai/cuda/cuda-12.8 100
 
update-alternatives: warning: forcing reinstallation of alternative /self/ai/cuda/cuda-11.8 because link group cuda is broken
 
root@lax-tsj:/self/ai/cuda/cuda-12.8# sudo update-alternatives --remove cuda /self/ai/cuda/cuda-11.8
 
root@lax-tsj:/self/ai/cuda/cuda-12.8# sudo update-alternatives --install /usr/local/cuda cuda /self/ai/cuda/cuda-11.8 50
 

避免用户总是需要输入密码

sudo visudo
 
# 文末添加一行
 
leiax00 ALL=(ALL) NOPASSWD: ALL
 
# 仿照root用户设置自己用户也行
 
root    ALL=(ALL:ALL) ALL
leiax00 ALL=(ALL:ALL) ALL

监听文件变化

tail -f acs-cwmp-access.log -n 10 |grep -E 'ERROR|WARN'
 
# -f 实时监听
 
# -n 显示最后多少行
 
# grep -E 显示包含xxx的行
 

查看文件的MD5

md5sum <file_name>

日志管理

logrotate日志管理

vmware

#  17pro秘钥
 
JU090-6039P-08409-8J0QH-2YR7F
4A4RR-813DK-M81A9-4U35H-06KND
NZ4RR-FTK5H-H81C1-Q30QH-1V2LA
4Y09U-AJK97-089Z0-A3054-83KLA
4C21U-2KK9Q-M8130-4V2QH-CF810
MC60H-DWHD5-H80U9-6V85M-8280D
ZA30U-DXF84-4850Q-UMMXZ-W6K8F
AC590-2XW97-48EFZ-TZPQE-MYHEA
YF39K-DLFE5-H856Z-6NWZE-XQ2XD
AC15R-FNZ16-H8DWQ-WFPNV-M28E2
CZ1J8-A0D82-489LZ-ZMZQT-P3KX6
YA11K-6YE8H-H89ZZ-EXM59-Y6AR0
 
# vmware tools
 
apt install open-vm-tools open-vm-tools-desktop

安装deb文件

sudo dpkg -i microsoft-edge-stable_121.0.2277.128-1_amd64.deb

rclone使用

进程追踪

# 查看当前系统状态, 可以获取到大概的进程ID, 资源等信息
 
top
 
# top查看指定进程信息
 
top -p <proc_id>
 
# 根据进程ID查看进程详情
 
ps aux | grep <proc_id>
 
# pidstat 命令可以显示指定进程ID的统计信息,包括 CPU、内存、I/O 等方面的使用情况。
 
pidstat -p <proc_id>
 
# 查看进程的执行文件信息
 
ls -l /proc/<proc_id>/exe
 
# 获取该进程的父进程
 
ps -o ppid= -p <proc_id>

开启网络唤醒

sudo apt install ethtool
nano /etc/systemd/system/wol.service
 
# <mark>=</mark>
 
[Unit]
Description=Configure Wake On LAN
 
[Service]
Type=oneshot
ExecStart=/usr/sbin/ethtool -s eno2 wol g
 
[Install]
WantedBy=basic.target
#<mark>=</mark>
 
systemctl daemon-reload
systemctl start wol
systemctl enable wol
 
sudo ethtool eno2 | grep -i wake-on
Supports Wake-on: pumbg
Wake-on: d
    Supports Wake-on: pumbg:表示网卡支持的唤醒模式。g 是关键,它表示支持“Magic Packet”唤醒(即远程唤醒)。
    Wake-on: d:表示当前设置为禁用。
 
方法B:使用 netplan 配置(如果你的网络由 netplan 管理)
编辑你的 netplan 配置文件(通常在 /etc/netplan/ 目录下):
sudo nano /etc/netplan/01-netcfg.yaml
 
在对应的网络接口配置下添加 wakeonlan: true,例如:
network:
  version: 2
  ethernets:
    eth0:
      dhcp4: true
      wakeonlan: true
 
保存后,应用配置:
sudo netplan apply
 
# 固定IP(有线)
 
network:
  version: 2
  renderer: NetworkManager
 
  ethernets:
    eno1:
      dhcp4: no
      addresses:
        - 192.168.1.222/24
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses:
          - 192.168.1.1
          - 8.8.8.8

查看当前网卡状态

root@lax-pi:/repo/dev/software# ethtool eth0
 
Settings for eth0:
	Supported ports: [ TP	 MII ]
	Supported link modes:   10baseT/Half 10baseT/Full
	                        100baseT/Half 100baseT/Full
	                        1000baseT/Half 1000baseT/Full
	Supported pause frame use: Symmetric Receive-only
	Supports auto-negotiation: Yes
	Supported FEC modes: Not reported
	Advertised link modes:  10baseT/Half 10baseT/Full
	                        100baseT/Half 100baseT/Full
	                        1000baseT/Half 1000baseT/Full
	Advertised pause frame use: Symmetric Receive-only
	Advertised auto-negotiation: Yes
	Advertised FEC modes: Not reported
	Link partner advertised link modes:  10baseT/Half 10baseT/Full
	                                     100baseT/Half 100baseT/Full
	                                     1000baseT/Full
	Link partner advertised pause frame use: Symmetric Receive-only
	Link partner advertised auto-negotiation: Yes
	Link partner advertised FEC modes: Not reported
	Speed: 1000Mb/s
	Duplex: Full
	Auto-negotiation: on
	master-slave cfg: preferred slave
	master-slave status: slave
	Port: Twisted Pair
	PHYAD: 1
	Transceiver: external
	MDI-X: Unknown
	Supports Wake-on: d
	Wake-on: d
        Current message level: 0x00000007 (7)
                               drv probe link
	Link detected: yes
 
# Speed: 1000Mb/s  表示目前网卡为千兆网
 
# Duplex: Full  表示目前网口为全双工模式
 

umount一个挂载的硬盘

# 示例挂载目录: /repo
 
root@lax-jxgm:/repo# umount /repo
 
umount: /repo: target is busy.
 
# 查询哪些进程在占用目录
 
root@lax-jxgm:/repo# lsof +D /repo
 
COMMAND       PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash      2106456 root  cwd    DIR   8,16     4096    2 /repo
sftp-serv 2106518 root    4r   DIR   8,16     4096    2 /repo
lsof      2127034 root  cwd    DIR   8,16     4096    2 /repo
lsof      2127035 root  cwd    DIR   8,16     4096    2 /repo
 
# 停止所有占用目录的线程
 
root@lax-jxgm:/# fuser -k /repo
 
/repo:               2106518
 
# 查询哪些进程在占用目录
 
root@lax-jxgm:/# lsof +D /repo
 
# 移除挂载
 
root@lax-jxgm:/repo# umount /repo
 

修改DNS

network:
  ethernets:
    ens33:
      dhcp4: true
      nameservers:
        addresses: [223.5.5.5, 119.29.29.29, 8.8.8.8]
  version: 2
 
# 阿里云: 223.5.5.5
 
# DNSPod:119.29.29.29
 

两台电脑之间测速

在Ubuntu 20.04上,你可以使用以下命令测试两台电脑之间的网速:

  1. 安装iperf3:iperf3是一个用于测试网络带宽的工具。在终端中运行以下命令以安装iperf3:

    sudo apt-get update
    sudo apt-get install iperf3
  2. 在第一台电脑上启动iperf3服务:在第一台电脑上,在终端中运行以下命令以启动iperf3服务:

    iperf3 -s

    这将启动iperf3服务,并等待第二台电脑连接。

  3. 在第二台电脑上运行iperf3测试:在第二台电脑上,在终端中运行以下命令以测试带宽:

    iperf3 -c <第一台电脑的IP地址>

    请将<第一台电脑的IP地址>替换为第一台电脑的IP地址。例如,如果第一台电脑的IP地址是192.168.1.100,则命令应该是:

    iperf3 -c 192.168.1.100

    这将在第二台电脑和第一台电脑之间测试网络带宽,并显示测试结果。测试结果将包括带宽、传输时间和数据包丢失率等信息。

请注意,iperf3测试需要两台电脑都连接到同一个网络中。如果你的电脑之间不在同一个网络中,则你需要通过设置VPN或其他方式来连接它们。

释放内存cache

sudo sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
#这个命令将同步磁盘并清空文件系统缓存,以释放内存。这个操作不会影响inode和目录项缓存,因此可能会更加安全和可靠。
 
sudo sysctl -w vm.drop_caches=3
#这个命令将清空所有的缓存(包括文件系统缓存、目录项缓存和inode缓存),并释放内存。请注意,这个操作会导致一些文件系统数据的丢失,并且可能会影响系统性能,因此请谨慎使用。

挂载webdav

sudo apt-get install davfs2 -y
sudo mkdir /repo
sudo mount -t davfs -o noexec http://10.1.0.3:12714/ /repo
 
sudo lsof | grep /repo
kill xxx
sudo umount /repo
 
# 通过fstab挂载
 
cat << EOF | sudo tee -a /etc/fstab
 
# personal webdav
 
http://10.1.0.3:12714 /repo  davfs _netdev,user,uid=nobody,gid=nobody,auto,x-systemd.automount 0 0
http://10.1.0.3:12715 /repo_dev  davfs _netdev,user,uid=nobody,gid=nobody,auto,x-systemd.automount 0 0
http://127.0.0.1:5244 /alist davfs _netdev,user,uid=nobody,gid=nobody,auto,x-systemd.automount 0 0
EOF
 
# 保存密码
 
cat << EOF | sudo tee -a /etc/davfs2/secrets
http://10.1.0.3:12714 leiax00 lax4832.
http://10.1.0.3:12715 leiax00 lax4832.
http://127.0.0.1:5244 leiax00 lax4832.
EOF

怎么让docker在webdav挂载完成后再启动

你可以使用Systemd单位文件(systemd unit file)来实现在WebDAV挂载完成后再启动Docker。

  1. 创建Systemd单位文件:在终端中运行以下命令以创建Systemd单位文件:

    bashCopy code
    sudo nano /etc/systemd/system/docker.service.d/webdav.mount
     

    在文件中添加以下内容:

    makefileCopy code
    [Unit]
    Requires=webdav.mount
    After=webdav.mount
     
    [Service]
    ExecStartPre=/bin/sleep 10s
    ExecStart=
    ExecStart=/usr/bin/dockerd
     

    该文件定义了Docker服务依赖于webdav.mount单元,并且在webdav.mount单元之后启动。ExecStartPre设置了一个10秒的延迟,确保WebDAV挂载完成后再启动Docker服务。

  2. 重新加载Systemd并启动Docker:在终端中运行以下命令以重新加载Systemd并启动Docker服务:

    sqlCopy code
    sudo systemctl daemon-reload
    sudo systemctl start docker
     

现在,当你启动Ubuntu 20.04时,Systemd将首先挂载WebDAV,然后启动Docker服务。如果WebDAV挂载失败,则Docker服务将不会启动。

查询软件包

dpkg -l | grep 软件名
 
# 卸载软件
 
apt-get --purge remove 软件名

挂载硬盘

lsblk -f
---------------------------------------------------
NAME                                                                    FSTYPE         FSVER    LABEL       UUID                                   FSAVAIL FSUSE% MOUNTPOINTS
loop0                                                                   squashfs       4.0                                                               0   100% /snap/core20/1953
loop1                                                                   squashfs       4.0                                                               0   100% /snap/core20/1977
loop2                                                                   squashfs       4.0                                                               0   100% /snap/lxd/23545
loop3                                                                   squashfs       4.0                                                               0   100% /snap/lxd/24326
loop4                                                                   squashfs       4.0                                                               0   100% /snap/snapd/19365
loop5                                                                   squashfs       4.0                                                               0   100% /snap/snapd/19459
sda                                                                     LVM2_member    LVM2 001             1CGLRW-SNP0-Rhp9-vDlD-MkV1-0XIq-o5fAZf
└─ceph--cddeb01f--e18e--471e--bc5c--c9e01c864b8c-osd--block--630c5549--a6f4--4713--944f--76954462d42e
                                                                        ceph_bluestore
sdb
├─sdb1
└─sdb2                                                                  ntfs                    repo        **BE2E54D02E548377**                         14.2T     3% /repo
mmcblk0
├─mmcblk0p1                                                             vfat           FAT32    system-boot D7E2-9D99                                65.1M    74% /boot/firmware
└─mmcblk0p2                                                             ext4           1.0      writable    b09bb4c8-de4d-4ce6-a93f-30c4c9241a58     85.6G    23% /
rbd0                                                                                                                                                 92.9G     0% /self/db
rbd1
 
# 通过uuid挂载, /dev/sdb2在驱动器变更的时候会变化
 
UUID=**BE2E54D02E548377** /repo ntfs defaults,nofail,utf8,uid=1000,gid=1000,umask=022 0 0
-------------------------------------------------------------------
	ntfs:文件系统类型,根据自己硬盘调整
	defaults:使用文件系统的默认挂载参数
	nofail:忽略错误,如果设备不存在则忽略;不加这个,如果开机时设备不存在会导致系统无法正常启动
	utf8:字符编码
	uid、gid:挂载这个硬盘的用户 id 和组 id
	dmask、fmask:权限设置,
			在挂载时添加 umask fmask dmask 参数,Linux 系统中,目录默认权限为 755,文件默认权限为 644。
				umask:目录与文件的权限
				fmask:文件的权限, fmask=133:文件权限 = 777 - 133 = 644,即 rw-r--r--
				dmask:目录的权限, dmask=022:目录权限 = 777 - 022 = 755,即 rwxr-xr-x
	0:不自动备份
	0:开机不自检
 
# ntfs格式需要安装: apt install ntfs-3g
 
/dev/sdb2 /repo ntfs-3g defaults 0 0
 
# 挂载linux filesystem
 
/dev/sda1 /repo_dev ext4 defaults 0 0
 
UUID=95a1d411-b8fc-49cf-bb4e-32e65daf5e3d /repo_dev ext4 defaults 0 0
UUID=2c9fd185-71d7-4628-ae19-ddd4c10e4378 /repo ext4 defaults 0 0
 
UUID="e545418a-81e2-4cda-85cb-fd0dd30b9d67" /self ext4 defaults 0 0
UUID="95a1d411-b8fc-49cf-bb4e-32e65daf5e3d" /repo_dev ext4 defaults 0 0
UUID="2c9fd185-71d7-4628-ae19-ddd4c10e4378" /repo ext4 defaults 0 0
 
UUID="46be24c9-03db-498c-9a8b-4227a3241eb4" /repo ext4 defaults 0 0
 
UUID="e545418a-81e2-4cda-85cb-fd0dd30b9d67" /self ext4 defaults 0 2
 
第二个数字:2 - Fsck 检查顺序
    它是什么:这个数字决定了系统启动时,fsck(File System ChecK)工具检查文件系统的顺序。
    它如何工作:
        0: 表示这个文件系统不需要被 fsck 检查。
        1: 表示这个文件系统具有最高优先级,应该第一个被检查(通常只用于根文件系统 /)。
        2 (或更大的数字): 表示这个文件系统具有较低优先级,应该在优先级为 1 的文件系统之后被检查。
 
# ubuntu 2404
 
## 分区
 
# 1. 创建GPT分区表和单个分区
 
sudo parted /dev/sda --script mklabel gpt
sudo parted /dev/sda --script mkpart primary ext4 0% 100%
 
# 2. 格式化为ext4
 
sudo mkfs.ext4 /dev/sda
 
# 3. 获取UUID
 
sudo blkid /dev/sda
 
# 复制输出的UUID,后面会用到
 

本地文件同步

rsync — 实现本地到本地, 远程到本地等等

apt -y install rsync
 
rsync [OPTION]... SRC DEST
rsync [OPTION]... SRC [USER@]HOST:DEST
rsync [OPTION]... [USER@]HOST:SRC DEST
 
# 常用命令
 
	rsync -az SRC DEST
	# 增加日志输出
	rsync -avz SRC DEST
	# 增加日志输出, 并删除dst中多余的文件
	rsync -avz --delete SRC DEST
 
# OPTION:
 
-a 归档同步, 包括属主, 时间等信息
-z 压缩传输
-v 输出同步的文件
 
# pi上应用数据同步命令, 周三晚上2点定时同步
 
0 2 * * 3 rsync -avz --delete /repo_dev/devData /repo
 
# /repo/medias 拷贝到当前目录, 显示进度
 
rsync -ah --info=progress2 /repo/medias ./

C语言编译环境 — gcc & make

sudo apt install build-essential

用户相关操作

# 查询用户所属组 -- 用户信息
 
groups <用户>
id <用户>     # 推荐
 
# 添加用户到分组
 
sudo usermod -aG docker your_username   # 退出,然后重新登录,以便让权限生效。
 

解压与压缩

# tar.xz文件
 
# 解压为 xxx.tar文件
 
xz -d xxx.tar.xz
 
# 解压tar文件
 
tar -xf xxx.tar
 
# tgz / tar.gz文件
 
tar zxvf filename.tgz
 
# .tar.gz 压缩
 
tar -zcf filename.tar.gz 目录或文件

修改文件所属/组

# 将目录target的所属主修改为用户liubai
 
# sudo chown username filename
 
$ sudo chown liubai target
$ sudo chown -R liubai target
 
# 将目录target的所属组修改为用户liubai
 
$ sudo chgrp liubai target
 
# 将目录target及其中所有文件的所属主修改为用户liubai
 
$ sudo chown -R liubai target
 
# 将目录target及其中所有文件的所属组修改为用户liubai
 
$ sudo chgrp -R liubai target
 
# 同时修改目录target的所属主和所属组为liubai和liubai
 
# sudo chown username(主):username(组) target
 
$ sudo chown liubai:liubai target
 
# 修改文件或修改目录下所有文件的方法与上述相同
 

磁盘使用情况

root@leiax-tdp:~# df -h
 
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           390M  2.2M  387M   1% /run
/dev/sda3        20G   15G  3.8G  80% /
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           1.9G     0  1.9G   0% /run/qemu
/dev/sda2       512M  5.3M  507M   2% /boot/efi
tmpfs           390M  4.7M  385M   2% /run/user/1000
overlay          20G   15G  3.8G  80% /var/lib/docker/overlay2/56c92b98b6fbd103ccda5f89ef4477e81469bdcffa0b2a1414cfbc16f062f7ef/merged
/dev/sr1        3.5G  3.5G     0 100% /media/leiax00/Ubuntu 22.04 LTS amd64
tmpfs           390M   64K  390M   1% /run/user/0
 
# 磁盘信息
 
root@leiax-tdp:~# parted -l
 
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sda: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
 
Number  Start   End     Size    File system  Name                  Flags
 1      1049kB  2097kB  1049kB                                     bios_grub
 2      2097kB  540MB   538MB   fat32        EFI System Partition  boot, esp
 3      540MB   21.5GB  20.9GB  ext4
 
Warning: Unable to open /dev/sr1 read-write (Read-only file system).  /dev/sr1
has been opened read-only.
Error: /dev/sr1: unrecognised disk label
Model: Unknown (unknown)
Disk /dev/sr1: 3655MB
Sector size (logical/physical): 2048B/2048B
Partition Table: unknown
Disk Flags:

wget添加代理

wget <url> -e "https_proxy=http:127.0.0.1:20172"
 
# 将/etc/wgetrc中与proxy有关的几行复制到~/.wgetrc,并做如下修改:
 
#You can set the default proxies for Wget to use for http, https, and ftp.
 
# They will override the value in the environment.
 
https_proxy = http://10.1.0.3:20172/
http_proxy = http://10.1.0.3:20172/
ftp_proxy = http://10.1.0.3:20172/
 
# If you do not want to use proxy at all, set this to off.
 
use_proxy = on
 
-Y, --proxy=on/off           打开或关闭代理

查询端口占用情况

netstat -ap | grep 53
ss -tnlp | grep 53
lsof -i :39850
 
# 示例
 
root@lax-tx:~# lsof -i :39850
 
COMMAND    PID            USER   FD   TYPE     DEVICE SIZE/OFF NODE NAME
nginx   759269 systemd-resolve    5u  IPv4 1348961014      0t0  UDP lax-tx:39850->10.1.255.1:33478
 
root@lax-tx:~# netstat -ap | grep 39850
 
udp        0      0 lax-tx:39850            10.1.255.1:33478        ESTABLISHED 759269/nginx: worke

配置通配域名解析

# /etc/hosts 不支持通配域名解析
 
apt install dnsmasq

查询当前目录大小

du -h --max-depth=0
 
# 修改max-depth可以递归获取当前目录下各层级的大小
 

网络测速

apt install speedtest-cli
speedtest-cli

添加虚拟网卡

vim /etc/network/interfaces
 
# 添加以下内容
 
auto eth0:0
iface eth0:0 inet static
address 101.43.30.251
netmask 255.0.0.0
 
# <mark>=</mark><mark>=</mark><mark>=</mark><mark>=</mark><mark>=</mark><mark>=</mark>=
 
ifconfig eth0:0 121.43.144.14 up
ifconfig eth0:0 down
 
ifconfig docker0 down
ip link delete docker0

ssh相关操作

> sudo apt-get update
> sudo apt install openssh-server
> vim /etc/ssh/sshd_config
 
# 支持root用户FTP访问:注释配置[PermitRootLogin](https://www.notion.so/git-0abf263777c94cc79a4af70e7100a483?pvs=21)放开,设置为yes
 
> sudo /etc/init.d/ssh restart
> echo "test for starting success"
> ssh localhost
> echo "sftp style mode:"
> echo "for example: sftp://ubuntu:xxx@192.168.1.107:22/usr/local/dev/sdk"
> ssh-keygen
> echo "set login no password"
> ssh-copy-id -i ~/.ssh/id_rsa.pub root@hostname

启动Cgroups v2

# 适用于Ubuntu Server 18.04, 20.04 LTS
 
# 文件存在则已启用, 否则未启用
 
cat /sys/fs/cgroup/cgroup.controllers
 
# 修改内核阐述
 
sudo vim /etc/default/grub
 
# 在GRUB_CMDLINE_LINUX行新增:
 
systemd.unified_cgroup_hierarchy=1
 
# 更新并重启
 
sudo update-grub
sudo reboot

网络桥接流量状态

ip route
 
ip -4 -o addr
 
# 查看路由表
 
sudo iptables-save
iptables -t nat -L -n --line-numbers

Iptables 规则用法小结

查看环境信息

[root@iZbp1ajqzkbhcpuqipa88iZ ~]# cat /proc/version
 
Linux version 3.10.0-957.27.2.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) ) #1 SMP Mon Jul 29 17:46:05 UTC 2019
[root@iZbp1ajqzkbhcpuqipa88iZ ~]# uname -a
 
Linux iZbp1ajqzkbhcpuqipa88iZ 3.10.0-957.27.2.el7.x86_64 #1 SMP Mon Jul 29 17:46:05 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
[root@iZbp1ajqzkbhcpuqipa88iZ ~]# uname -m
 
x86_64
[root@iZbp1ajqzkbhcpuqipa88iZ ~]# lsb_release -a
 
LSB Version:	:core-4.1-amd64:core-4.1-noarch
Distributor ID:	CentOS
Description:	CentOS Linux release 7.6.1810 (Core)
Release:	7.6.1810
Codename:	Core
[root@iZbp1ajqzkbhcpuqipa88iZ ~]#

xrdp相关配置

apt install xrdp
 
# 解决黑屏问题: vim /etc/xrdp/startwm.sh
 
unset DBUS_SESSION_BUS_ADDRESS
unset XDG_RUNTIME_DIR
test -x /etc/X11/Xsession && exec /etc/X11/Xsession
exec /bin/sh /etc/X11/Xsession
 
service xrdp restart

ubuntu server 安装桌面环境

sudo apt-get update
sudo apt-get install ubuntu-desktop
 
# 以上命令将安装 Gnome 桌面环境。
 
# 如果你不想安装一些附加的程序例如电子邮件程序和OpenOffice套件,可用以下命令:
 
sudo aptitude install --no-install-recommends ubuntu-desktop
 
# 如果你想来一个轻量级的桌面 xfce,执行:
 
sudo apt-get install xubuntu-desktop
sudo apt-get autoremove --purge xubuntu-* && sudo apt-get autoremove --purge xfce*
 
# KDE 桌面则用以下命令:
 
sudo apt-get install kubuntu-desktop
 
# gdm3为gnome的管理器, lightdm是Ubunt, Xubuntu和 Lubuntu的
 

ubuntu中root使用edge打不开

	vim /usr/bin/microsoft-edge
 
# 在最后一行的启动命令:exec -a "$0" "$HERE/msedge" "$@" 后添加`–user-data-dir --no-sandbox
 
exec -a "$0" "$HERE/msedge" "$@"  --user-data-dir --no-sandbox

测试读写速度

touch testWriteOrRead
touch testWriteAndRead
time dd if=/dev/zero of=./testWriteOrRead bs=8k count=1000000
time dd if=./testWriteOrRead of=/dev/null bs=8k count=1000000
time dd if=./testWriteOrRead of=./testWriteAndRead bs=8k count=1000000

新增快捷方式

cd /usr/share/applications
sudo touch idea.desktop
sudo gedit idea.desktop
 
# 输入内容
 
[Desktop Entry]
Name=IntelliJ IDEA
Comment=IntelliJ IDEA
Exec=/usr/local/idea/bin/idea.sh
Icon=/usr/local/idea/bin/idea.png
Terminal=false
Type=Application
Categories=Developer;
 
# <mark>=</mark><mark>=</mark><mark>=</mark><mark>=</mark><mark>=</mark><mark>=</mark>===
 
sudo chmod u+x idea.desktop

修改ubuntu其他用户, 可以不输出sudo

sudo vim /etc/sudoers
 
# 找到 root ALL=(ALL)ALL, 在之后追加:
 
# USERNAME ALL=(ALL)ALL
 

ubuntu安装google拼音

sudo apt install fcitx
im-config
sudo apt install fcitx-googlepinyin -y
fcitx-config-gtk3

ubuntu查看已安装的软件

dpkg -l |grep xxx

添加定时任务

crontab -l  #查看详情
crontab -e #设置定时任务
#例子:
*  *  *  *  *  command
分 时 日 月 周 命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行命令
例子:
	*/30 * * * * /home/mysql_back.sh                             #每隔30分钟执行脚本
	30 21 * * * /usr/local/etc/rc.d/lighttpd restart             #*晚的21:30重启apache。
	45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart        #每月1、10、22日的4 : 45重启apache。
	10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart            #每周六、周日的1 : 10重启apache。
	0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart        #每天18 : 00至23 : 00之间每隔30分钟重启apache。
	0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart              #每星期六的11 : 00 pm重启apache。
	0 */1 * * * /usr/local/etc/rc.d/lighttpd restart             \#每一小时重启apache
	0 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart          \#晚上11点到早上7点之间,每隔一小时重启apache
	0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart        \#每月的4号与每周一到周三的11点重启apache
	0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart             \#一月一号的4点重启apache
 
重启下定时任务程序:
rm /var/run/crond.reboot
sudo service cron restart
 
journalctl -u cron -f
 
# 日志提示Skipping @reboot jobs -- not system startup
 
			\#(1)把文件/var/run/crond.reboot删除
      \#(2)service cron restart 重启任务

更改时区和时间

# 查看当前时区
 
timedatectl
 
root@ww-lax:/mnt/c/Users/leiax# timedatectl
               Local time: Tue 2024-02-27 18:00:41 CST
           Universal time: Tue 2024-02-27 10:00:41 UTC
                 RTC time: Tue 2024-02-27 10:00:41
                Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes
              NTP service: inactive
          RTC in local TZ: no
 
修改时区:
	1.执行命令:dpkg-reconfigure tzdata
	2.选择Asia->Shanghai
		防止系统重启后时区改变,执行下面一行命令
		cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
 
同步网络时间:
	1. 安装ntpdate工具 # sudo apt-get install ntpdate
	2. 设置系统时间与网络时间同步 # ntpdate cn.pool.ntp.org
	3. 将系统时间写入硬件时间 # hwclock --systohc
	cn.pool.ntp.org是位于中国的公共NTP服务器
 
timedatectl set-timezone Asia/Shanghai
systemctl restart rsyslog
 
crontab -e
0 */1 * * * /usr/sbin/ntpdate time1.aliyun.com

忽略脚本输出

xxx.sh >/dev/null 2>&1

ubuntu设置静态ip

cd /etc/netplan
	# 修改该目录下的yaml配置文件: 20.04 : 00-installer-config.yaml
	network:
	    ethernets:
	        ens33:
	            addresses: [192.168.10.11/24]
	            dhcp4: false
	            gateway4: 192.168.10.2
	            nameservers:
	                addresses: [8.8.8.8]
	            optional: true
	# 修改ip为192.168.10.11
 
netplan apply
 
\#2204后因为netplan升级导致会提示使用routes
 
# nat: 填写net网卡的网关配置
 
network:
    version: 2
    renderer: networkd
    ethernets:
        ens33:
            addresses: [192.168.10.10/24]
            nameservers:
                addresses: [192.168.10.1]
            routes:
                - to: default
                  via: 192.168.10.2
 
# 桥接: 填写路由器的网关配置
 
network:
  version: 2
  renderer: NetworkManager
  ethernets:
    ens33:
      dhcp4: false
      addresses: [192.168.0.10/24]
      nameservers:
        addresses: [192.168.0.1]
      routes:
        - to: default
          via: 192.168.0.1

ssh相关命令

sudo apt-get update
sudo apt install openssh-server
vim /etc/ssh/sshd_config
 
# 支持root用户FTP访问:注释配置PermitRootLogin放开,设置为yes
 
sudo /etc/init.d/ssh restart
echo "test for starting success"
ssh localhost
echo "sftp style mode:"
echo "for example: sftp://ubuntu:xxx@192.168.1.107:22/usr/local/dev/sdk"
ssh-keygen
echo "set login no password"
ssh-copy-id -i ~/.ssh/id_rsa.pub root@hostname

ubuntu2004配置rc-local.service自启动

# 1. 新建服务
 
vim /etc/systemd/system/rc-local.service
 
# 输入<mark>=</mark><mark>=</mark><mark>=</mark><mark>=</mark><mark>=</mark>
 
[Unit]
Description=/etc/rc.local Compatibility
Documentation=man:systemd-rc-local-generator(8)
ConditionFileIsExecutable=/etc/rc.local
After=network.target
 
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no
[Install]
WantedBy=multi-user.target
Alias=rc-local.service
 
# end<mark>=</mark><mark>=</mark><mark>=</mark><mark>=</mark><mark>=</mark>==
 
# 2. 创建rc.local, 加载etc/sysconfig/modules/*.modules文件中的命令
 
vim /etc/rc.local
 
# 输入<mark>=</mark><mark>=</mark><mark>=</mark><mark>=</mark><mark>=</mark>
 
#!/bin/sh -e
 
for file in /etc/sysconfig/modules/*.modules ; do
        [ -x $file ] && $file
done
 
# end<mark>=</mark><mark>=</mark><mark>=</mark><mark>=</mark><mark>=</mark>==
 
# 3. 设置自启动
 
systemctl enable rc-local.service
systemctl restart rc-local.service

br_netfilter自启动

# 依赖于rc-local.service自启动
 
# 1. 新增自启动脚本
 
vim /etc/sysconfig/modules/br_netfilter.modules
 
# 输入<mark>=</mark><mark>=</mark>==
 
modprobe br_netfilter
 
# end<mark>=</mark><mark>=</mark>==
 
# 2. 赋予权限
 
chmod 755 /etc/sysconfig/modules/br_netfilter.modules
 
# 3. 重启服务并查看情况
 
lsmod |grep br_netfilter
 
# 方法二
 
ln -s br_netfilter.service /lib/systemd/system/br_netfilter.service
sudo systemctl daemon-reload
systemctl start br_netfilter.service

systemctl创建服务

# 配置自启动
 
vim /lib/systemd/system/ngrokd.service

####################
vim /usr/local/dev/tools/ngrok/ngrokd.service
ln -s /usr/local/dev/tools/ngrok/ngrokd.service /lib/systemd/system/ngrokd.service
ln -s /usr/local/dev/tools/ngrok/ngrokd.service /etc/systemd/system/ngrokd.service
 
####################
 
##################
[Unit]
Description=ngrokd
After=network.target
 
[Service]
Type=simple
ExecStart=/usr/local/dev/tools/ngrok/ngrokd -domain="nk.leiax00.cn" -httpAddr=":12390" -httpsAddr=":12391" -tunnelAddr=":12392" > /dev/null 2>&1 &
 
[Install]
WantedBy=multi-user.target
##################
 
# 重新加载
 
sudo systemctl daemon-reload
 
sudo systemctl start ngrokd.service
sudo systemctl stop ngrokd.service
sudo systemctl enable ngrokd.service
sudo systemctl disable ngrokd.service

零散命令

# 根据线程编号, 查询对应程序
 
> pwdx 966101
966101: /opt/teamcity/bin