Linux 常用命令
2021年5月25日 · 1995 字 · 4 分钟
Linux 命令行下有很多常用工具,每个工具又有各种使用方法。这里记录一些常用工具的常用使用方法。对于较为复杂的工具,比如 ffmpeg
则记录在单独的日志里。
python-pip(3)
pip install(uninstall) cmake
## pip 安装完软件后,可能需要将 /home/<user>/.local/bin 配置到 $PATH 中
QT 安装,不包括 QT creator,用于无 GUI 环境下编译 QT 开发的程序
apt install qt5-default libqt5multimedia5 qtmultimedia5-dev libqt5multimediawidgets5 libqt5multimedia5-plugins clang -y
## clang 可选
gradlew
proxy="-DsocksProxyHost=xx.xx.xx.xx -DsocksProxyPort=1087 -DsocksNonProxyHosts=xxx.xxx.xxx.xxx"
./gradlew $proxy sLinkSDKFiles
rm
## 删除当前目录下所有文件,不包括 file1, file2, *.zip 文件
## 下面这句,好像 zsh 不支持, 换成 bash,可以执行
> rm -rfv * !("file1"|"file2"|*.zip)
grep
常规使用
grep "Ubuntu" /etc/lsb-release
cat /etc/lsb-release | grep "Ubuntu"
AND & OR & NOT
grep "abc.*134" $file ### 过滤出包含 abc .* 123 的行
grep "abc\|123" $file ### 过滤出包含 abc 或者 123 的行
grep -v "abc\|123" $file ### 过滤出不包含 abc 或者 123 的行
特殊使用
## grep 匹配数字
echo "my ID is 16h68j98k" | grep -o "[[:digit:]]"
echo "my ID is 16h68j98k" | grep "[[:digit:]]"
常用参数
*. -o 只显示匹配部分
curl -s google.com | grep -o "http.*\.com"
rsync
date
date "+%Y-%m-%d-%H-%M-%S"
pavucontrol 音频管理
sudo apt install pavucontrol
## GUI 工具
v4l2loopback 虚拟摄像头
sudo apt install v4l2loopback-dkms v4l2loopback-utils v4l-utils
## 增加虚拟设备
sudo modprobe v4l2loopback card_label="Fake Webcam" exclusive_caps=1
## 查看虚拟设备
ls -ltr /dev/video*
## 填充数据
ffmpeg -stream_loop -1 -re -i balabala.mp4 -vcodec rawvideo -threads 0 -f v4l2 /dev/video<*>
## 删除虚拟设备
sudo modprobe --remove v4l2loopback
df - report file system disk space usage
df -h
du
du -h --max-depth=1 ### linux
systemd-analyze
## 分析启动时间
systemd-analyze blame
## 关闭最耗时的服务
sudo systemctl disable apt-daily.service
sudo systemctl disable NetworkManager-wait-online.service
sudo systemctl mask plymouth-quit-wait.service
sudo systemctl stop apt-daily.timer
sudo systemctl stop apt-daily.service
sudo systemctl stop apt-daily-upgrade.timer
sudo systemctl stop apt-daily-upgrade.service
sudo systemctl disable apt-daily.service
sudo systemctl disable apt-daily.timer
sudo systemctl disable apt-daily-upgrade.timer
sudo systemctl disable apt-daily-upgrade.service
sudo systemctl stop apport.service
sudo systemctl disable apport.service
sudo sed -i 's@enabled=1@enabled=0@g' /etc/default/apport
sudo sysctl -p
cat
## 查看分区,自动挂载硬盘
sudo cat /etc/fstab
python http
## 快速搭建 http 服务,共享文件。
python -m SimpleHTTPServer 8000 ## python
python3 -m http.servepy 1234 ## python3
ufw
sudo ufw allow 8000 ## enable
sudo ufw delete allow 8000 ## disable
nohup
nohup {python -m SimpleHTTPServer 8000} &
ps
ps -awux | ps {command}
## melot 4600 0.0 0.1 44232 9312 pts/14 S 17:50 0:00 python -m SimpleHTTPServer 8000
## melot 4731 0.0 0.0 15964 912 pts/14 S+ 17:51 0:00 grep --color=auto python
kill -9 4600
speedometer
## 命令行显示网络使用情况,上传、下载速度
# 下载命令行工具 `speedometer`
sudo apt-get install speedometer
speedometer -l -r {wlan0/eth1} -t {wlan0/eth1} -m $(( 1024 * 1024 * 3 / 2 ))
scp
## 两台 linux 主机之间传输文件(夹) scp
# scp <src> <dst>
scp foo.txt root@192.168.0.2:/home/
scp root@192.168.0.2:/home/foo.txt .
## 修改 dns (for Ubuntu):
sudo vim /etc/resolvconf/resolv.conf.d/base
nameserver 8.8.8.8
nameserver 8.8.4.4
sudo resolvconf -u
netstat
## 查看端口使用
netstat -tulpn | grep LISTE
pkg-config
## 用 pkg 查看库版本
pkg-config --help
pkg-config --list-all
pkg-config --modversion <library>
pkg-config --libs
pkg-config --cflags
## e.g.
pkg-config --modversion glib-2.0
pkg-config --modversion libwebsockets
# 如果查找不到,可以查找 *.pc 文件
gsettings
## ubuntu 删除默认快捷键
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-left "['']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-right "['']"
gsettings set org.gnome.system.proxy.http host ''
gsettings set org.gnome.system.proxy.http port 0
gsettings set org.gnome.system.proxy.https host ''
gsettings set org.gnome.system.proxy.https port 0
gsettings set org.gnome.system.proxy.ftp host ''
gsettings set org.gnome.system.proxy.ftp port 0
gsettings set org.gnome.system.proxy.socks host '10.0.17.125'
gsettings set org.gnome.system.proxy.socks port 1087
gsettings set org.gnome.system.proxy mode 'manual'
locate
## 查找文件
locate xxxx
find -name "xxxx"
mkdir
## 循环创建目录
mkdir rc{0,1,2,3,4,5,S}.d
ssh
# 普通密码鉴权
# 方式 1
[ -e ~/.ssh/id_rsa ] || ssh-keygen -t rsa && \
echo 服务器用户名 && read user && \
echo 服务器地址 && read host && \
echo ${user}@${host} && \
ssh ${user}@${host} mkdir -p .ssh && \
cat ~/.ssh/id_rsa.pub | ssh ${user}@${host} 'cat >> .ssh/authorized_keys'
# 方式 2
ssh-copy-id -i .ssh/id_rsa.pub <user>@<ip> -p <port>
# 方式 3
# pem 文件鉴权
ssh -i ~/.ssh/xxxxx.pem root@IP
chmod 400 ~/.ssh/xxxxx.pem
ssh-add -k ~/.ssh/xxxxx.pem
ssh root@IP
# 常见错误
# 1. ECDSA host key "ip地址" for has changed and you have requested strict checking.
ssh-keygen -R "你的远程服务器ip地址"
# 代理
ssh <user>@<x.x.x.x> -p <port> -o "ProxyCommand nc -X 5 -x 127.0.0.1:1089 %h %p"
# 远端服务器执行简单命令并返回
ssh <user>@<x.x.x.x> -p <port> “date && pwd && echo "hello"”
rsync && ssh
# 本地 编写 md 文档
# 本地 --同步-> 服务端
# 服务端 hexo 生成静态博客
# -P 显示进度信息
rsync -P -av -e 'ssh -p <port>' --exclude=".gitignore" --exclude=".git" <local directory> <user>@<host>:<remote directory> && ssh <user>@<host> -p <port> "cd blog && <hexo cmd>"
ffmpeg v4.x
# ubuntu 18.04 / ffmpeg 4.0.x
sudo add-apt-repository ppa:jonathonf/ffmpeg-4
sudo apt-get update
sudo apt-get install ffmpeg
strace
## 查看一个程序的系统调用
strace xxx.app
##### or
strace -p PID
pip/pip3
## pip config proxy
pip install --proxy=https://[username:password@]proxyserver:port somepackage
## Wifi 驱动
sudo apt-get update
sudo apt-get install bcmwl-kernel-source
## or
## sudo echo 'blacklist acer-wmi' >> /etc/modprobe.d/blacklist.conf
## Ubuntu fix broken package
sudo apt-get update –fix-missing
sudo dpkg –configure -a
sudo apt-get install -f
## 下载 `webrtc` 或者其他 google 项目时,代理的配置
set https_proxy=http://localhost:1080
set http_proxy=http://localhost:1080
# 下载 webrtc 源码时,更新/下载 命令尽可能带详细日志参数如 -v
curl
curl http://xxx.com
curl -X GET $url
-H "referer: https://google.com/" \
-H "sec-ch-ua-mobile: ?1" \
-H "sec-fetch-dest: empty" \
-H "sec-fetch-mode: cors" \
-H "sec-fetch-site: cross-site" \
-H "user-agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Mobile Safari/537.36"
wget http://xxx.com -O xxx.mp4
docker
# docker
docker run -it ubuntu:18.04
docker rm <container>
docker rmi <images>
docker cp <container>:/root/xxx .
docker log <container>
docker ps -a
docker stop <container>
docker start <container>
## docker system 命令 [df 查看存储占用]
docker system df
## docker 内命令 运行完后返回
docker run ubuntu:18.04 ls -l /
## grep
curl xxx | grep -o 'http.*m3u8'
## sed
cat filter.log | sed -e "s/$b/$a/g"
sed -i "s/$b/$a/g" filter.log
## 如果 $b 中含有 / 符号,上面的命令就会报错, 上面的 ‘/’ 符号可以修改成其他符号,例如:
sed -i 's|aaa|bbb|g' file
# link
ln -s ~/.../src.xxx ~/.../dst.xxx
# date
date "+%Y-%m-%d-%H-%M-%S"
shutdown -h 0
reboot
## win 平台下 GB2312 编码的文件 转码成 UTF-8
iconv -f GB2312 -t UTF-8 <src.log> -o <dest.log>
aria2
aria2c [-d ~/tt] --seed-time=0 "magnet:?xt=urn:btih:D4BDA37E5EF4CC3217B3F1ACD9E4D14AFDB3723A"
## 使用 proxychains
## 配置代理
sudo vim /etc/proxychains.conf
## git log 或者 git diff
export LESSCHARSET=utf-8
git config --global core.quotepath false
## 安装 openjdk8 和配套的 openjfx
apt install openjdk-8-jdk openjfx-source=8u161-b12-1ubuntu2 openjfx=8u161-b12-1ubuntu2 libopenjfx-java=8u161-b12-1ubuntu2 libopenjfx-jni=8u161-b12-1ubuntu
apt-mark hold openjfx libopenjfx-java libopenjfx-jni openjfx-source
## 增加 ssh 保活时间
sudo vim /etc/ssh/ssh_config
## 增加
ServerAliveInterval 120
# Pulse
## input
pacmd list-sources | egrep '^\s+name: .*alsa_input'
## output
pacmd list-sources | egrep '^\s+name:.*\.monitor'
## recording
parecord --channels=1 -d alsa_input.usb-Focusrite_Scarlett_Solo_USB-00.analog-stereo filename.wav
tr
## tr 命令
echo "hello\nwold" | tr "[a-z]" "[A-Z]"
## HELLO
## WORLD
echo "hello world" | tr ' ' '\n'
## hello
## world
echo "hello world" | tr '[:space:]' '\n'
## hello
##
## world
echo "hello world" | tr -s ' ' '\n'
## hello
## world
echo "{ban}" | tr "{}" "()"
## (ban)
echo "hello world" | tr -d "ol"
## he wrd
echo "my ID is 73535" | tr -d "[:digit:]"
## my ID is
echo "my ID is 73535" | tr -cd "[:digit:]"
## 73635
输出重定向
> file redirects stdout to file
1> file redirects stdout to file
2> file redirects stderr to file
&> file redirects stdout and stderr to file
nc
## tcp 端口探测
## -z 使用0输入/输出模式,只在扫描通信端口时使用。
## -w<超时秒数> 设置等待连线的时间。
## -v 显示指令执行过程。
nc -zv -w1 <IP> <PORT>
nc -zv -w1 <IP> <PORT-PORT>
livestreamer 下载 m3u8 视频文件
## https://github.com/chrippa/livestreamer
livestreamer -l debug --hls-segment-threads 10 "https://v4.cdtlas.com/20211104/3SvMCrla/1200kb/hls/index.m3u8" best -o xxxxx.ts
安装 VS code
#!/bin/bash
sudo apt-get install wget gpg
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg
sudo install -D -o root -g root -m 644 packages.microsoft.gpg /etc/apt/keyrings/packages.microsoft.gpg
sudo sh -c 'echo "deb [arch=amd64,arm64,armhf signed-by=/etc/apt/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main" > /etc/apt/sources.list.d/vscode.list'
rm -f packages.microsoft.gpg
sudo apt install apt-transport-https
sudo apt update
sudo apt install code # or code-insiders
删除 snap 相关
#!/bin/bash
sudo systemctl disable snapd.service
sudo systemctl disable snapd.socket
sudo systemctl disable snapd.seeded.service
sudo snap remove firefox
sudo snap remove snap-store
sudo snap remove gtk-common-themes
sudo snap remove gnome-3-38-2004
sudo snap remove core18
sudo snap remove snapd-desktop-integration
sudo rm -rf /var/cache/snapd/
rm -rf ~/snap
sudo apt autoremove --purge snapd
ubuntu clean
#!/bin/bash
sudo apt purge yelp
sudo apt-get remove update-notifier
zsh 相关
#!/bin/bash
cd ~
sudo apt install -y git zsh dconf-cli
chsh -s /usr/bin/zsh
#!/bin/bash
ch ~
echo $SHELL
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
git clone https://github.com/zsh-users/zsh-autosuggestions.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
sed -i "s|ZSH_THEME=\".*\"|ZSH_THEME=\"powerlevel10k/powerlevel10k\"|g" .zshrc
sed -i "s|plugins=(.*)|plugins=(git zsh-autosuggestions zsh-syntax-highlighting)|g" .zshrc
cd ~/Documents
git clone https://github.com/dracula/gnome-terminal
cd gnome-terminal
./install.sh
wget 带用户名和密码
wget --user admin --password admin "http://127.0.0.1:8080/nnnnnn.mp4" -O nnnnn.mp4
ubuntu 视频文件预览图 参考
sudo apt install -y ffmpegthumbnailer gstreamer1.0-libav
rm -r ~/.cache/thumbnails/fail