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