Skip to main content

常用命令集合

Ali服务器命令

nvm安装

########################### nvm 全局安装 ###########################
# 1 全局安装(root用户下执行以下命令)
export NVM_DIR="/usr/local/nvm"
echo $NVM_DIR
sudo mkdir -p $NVM_DIR
# curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.2/install.sh | bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
# 验证
command -v nvm

# 2 配置
# 2.1 方案1(推荐):直接将node和npm ln到全局,所有用户都能直接访问
# 2.1.1 检查/usr/bin/中是否有 node和npm,如果有则通过mv 进行备份
whereis node
mv /usr/bin/node /usr/bin/node8
whereis npm
mv /usr/bin/npm /usr/bin/npm3
# 2.1.2 node和npm 用ln到全局
ln -s /usr/local/nvm/versions/node/v10.24.1/bin/node /usr/bin/node
ln -s /usr/local/nvm/versions/node/v10.24.1/bin/npm /usr/bin/npm

# 2.2 方案2:在每个用户下面配置 node 和 npm 应用程序路径
# 2.2.1 root用户nvm配置
source ~/.bashrc # root用户nvm配置默认已经写入 "~/.bashrc" 所以只需要 source 一下就可以
# 2.2.2 www-data用户配置
su www-data
cd ~ && ls -la
touch ~/.bashrc # 如果没有"~/.bashrc" 用touch创建
vim ~/.bashrc
## 写入如下内容:
export NVM_DIR="/usr/local/nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion

# 3 安装node版本
exit # 回到root用户
nvm ls-remote
nvm install 10
nvm ls

# 4 使用nvm、node和npm
nvm use 10 && node -v && nvm -v && npm -v && npm install && npx gulp # root用户
su -c "node -v && npm -v && gulp" www-data # www-data用户 方案一用法
su -c "source ~/.bashrc && node -v && npm -v && npx gulp" www-data # www-data用户 方案二用法
########################### nvm 全局安装 ###########################


########################### s-pay 安装nvm的history ###########################
$ which nvm
$ which nvm
$ whereis nvm
$ export NVM_DIR="/usr/local/nvm"
$ echo $NVM_DIR
$ sudo mkdir -p $NVM_DIR
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
$ ldd --version
$ exit
$ nvm -v
$ whereis nvm
$ nvm ls-remote
$ nvm list
$ nvm install 10
$ nvm install 16
$ node -v && npm -v
$ nvm use 16
$ node -v && npm -v
########################### s-pay 安装nvm的history ###########################

composer 挂代理

export HTTP_PROXY=http://customer-xxxx-cc-MY:123456@pr.oxylabs.io:7777
export HTTPS_PROXY=http://customer-xxxx-cc-MY:123456@pr.oxylabs.io:7777
curl -v https://ipinfo.io

nginx

systemctl stop nginx
systemctl start nginx
nginx -t
nginx -s reload

php

#1 s***m-api
systemctl restart php7.3-fpm

git

########################### 保存账号密码 ###########################
# 启用永久存储
git config --global credential.helper store
# 执行一次 "git pull" 或 "git push"
- 在执行 git pull 或 git push 时输入用户名和密码,Git 会将凭据存储到纯文本文件中(默认位置为 ~/.git-credentials)。
# 查看保存的凭据
cat ~/.git-credentials
########################### 保存账号密码 ###########################

########################### 删除remote文件并添加ignore ###########################
# 1 从 Git 暂存区中移除文件,告诉 Git 停止跟踪这个文件,但不要从你的本地电脑磁盘上删除它
git rm --cached package-lock.json
# 2 将此更改提交并推送到 GitHub
git commit -m "从版本控制中移除 package-lock.json"
git push # 也可以用 git push origin <你的分支名称>
# 3 永久忽略该文件
## 将 package-lock.json 加入 .gitignore
########################### 删除remote文件并添加ignore ###########################

########################### 重置|强推|同步 ###########################
# 撤销master分支合并 还原到合并前的一个版本
git reset --hard b316ac6d6f6643c589e9c2a46653cae94c61b878
# 强制推送到master分支
git push --force
# 重置本地仓库并将远程同步到本地
git fetch origin
git reset --hard origin/<branch-name>
git pull
########################### 重置|强推|同步 ###########################

########################### 更新 ###########################
#1 普通更新
su -c "git diff" www-data
su -c "git log" www-data
su -c "git checkout . && git pull && composer dumpautoload && gulp" www-data
#2 大更新
su -c "git checkout . && git checkout master && git pull" www-data
su -c "composer update && npm install && gulp" www-data
#3 子命令
su -c 'git pull' www-data
su -c "git checkout ." www-data
su -c "gulp" www-data
su -c "cd /var/www/s***m-store && composer update" www-data
#4 hellochat-Swoft
su -c "git pull && php bin/swoft ws:restart" www-data
su -c 'git pull' www-data
su -c "php bin/swoft ws:restart" www-data
su -c "php bin/swoft ws:stop" www-data
su -c "php bin/swoft ws:start" www-data
su -c "php bin/swoft ws:start -d" www-data
su -c "php bin/swoft http:stop" www-data
su -c "php bin/swoft http:start" www-data
for i in `ps -ef|grep swoft-ws |awk '{print $2}' `; do kill -9 $i ; done;
for i in `ps -ef|grep swoft-http |awk '{print $2}' `; do kill -9 $i ; done;
#4 ms-message
su -c "git pull & php bin/swoft http:restart" www-data
php bin/swoft http:restart
########################### 更新 ###########################

ossutil 和 gpg 安装

# 最新2025 安装配置ossutil和gpg记录
## 下载安装ossutil
cd /var/log/
curl -o ossutil-2.1.2-linux-amd64.zip https://gosspublic.alicdn.com/ossutil/v2/2.1.2/ossutil-2.1.2-linux-amd64.zip
which unzip # 如果无unzip还需apt安装unzip
apt search unzip
apt install unzip
unzip ossutil-2.1.2-linux-amd64.zip
cd ossutil-2.1.2-linux-amd64
chmod 755 ossutil
sudo mv ossutil /usr/local/bin/ && sudo ln -s /usr/local/bin/ossutil /usr/bin/ossutil
which ossutil
sudo ln -s /usr/local/bin/ossutil /usr/bin/ossutil64 # 增加ossutil别名ossutil64 兼容老日志打包脚本
## 配置ossutil
ossutil config
ossutil ls
vi ~/.ossutilconfig
## 删除下载的ossutil安装包
rm -rf ossutil-2.1.2-linux-amd64
rm ossutil-2.1.2-linux-amd64.zip
## apt安装gpg 如果gpg没安装
which gpg
apt search gpg
apt install gpg
gpg --version
## 配置gpg
ossutil cp oss://s***m-copys2/gpg-cp-pri-key_2023.txt ./
ossutil cp oss://s***m-copys2/gpg-cp-pub-key_2023.txt ./
gpg --import gpg-cp-pri-key_2023.txt
gpg --import gpg-cp-pub-key_2023.txt
gpg --list-keys
gpg --edit-key j*h**g@s***m.com
gpg --list-keys

定时任务和脚本

# 查看定时任务
su -c "crontab -l" www-data
# 添加|编辑定时任务 方式1
su -c "crontab -e" www-data
# 添加|编辑定时任务 方式2
su -c "crontab task_prod.cron" www-data
# task_prod.cron 内容:
# clear-cache
*/30 * * * * php /var/www/hitps-core-api/console.php clear-cache --env=prod
* * * * * php /var/www/hitps-core-api/console.php clear-expired-top-up --env=prod
0 1 * * * php /var/www/hitps-core-api/console.php stats-pin-data --env=prod
0 3 1 * * php /var/www/hitps-core-api/console.php stats-merchant-transaction --env=prod
0 1 * * * php /var/www/hitps-core-api/console.php handle-expired-card --env=prod


# Transferto country & opeartor update 更新:
cd /var/www/s***m-cpanel/public/
php index.php --env prod --route seo/update-recharge-country
php index.php --env prod --route seo/update-recharge-operator

# 手动更新用户子账户余额报表 s***m-task
php sum_user_credits.php env=dev date=2020/03/29
php sum_user_credits.php env=test date=2020/03/29
php sum_user_credits.php env=prod date=2020/03/29

# 更新福禄产品列表
php public/index.php --env prod --route card/cacheFulu

常用命令集合

执行字符串命令

#1 使用 `eval` 命令,格式如下:eval "命令字符串"
str_cmd="echo hello"
eval $str_cmd
#2 使用 `bash -c` 命令,格式如下:bash -c "命令字符串"
str_cmd="echo hello"
bash -c "$str_cmd"

Cat命令

#1 搜索关键字 显示前后5行
cat log.txt | grep 'ERROR' -C 5
#2 搜索关键字 显示后5行
cat log.txt | grep 'ERROR' -A 5
#3 mac快速查找
mdfind -name my.cnf
#4 实时查看文件尾部内容
tail -f logfile.log

查看进程/内存/磁盘空间

#1 centos 查看文件可用空间:
df -h
#2 查看当前目录文件夹大小:
du -h --max-depth 1 # linux
du -h -d 1 # macOS ZSH
du -h -d 1 | sort -h -r # macOS ZSH 按大小倒序
#3 查看当前文件列表大小:
ls -lh
#4 查看cpu/内存使用率(执行完成后 按“M”安装内存倒序,按“P”按照CPU使用率倒序):
top
top -c
top -c -p $(pgrep -d',' -f 'hellochat_Prod')
top → 系统任务监控工具
## -c → 显示完整的命令行参数(不然只显示 php)
## -p → 指定进程 ID(可以是多个 PID,用逗号隔开)
## $( ... ) → 命令替换,把内部执行结果作为参数传进去
## pgrep -f 'php bin/hyperf.php start' → 查找包含该字符串的进程 ID
## -d',' → 把多个 PID 用 , 拼接起来(top 需要逗号分隔)
## 按"o" → 输入:COMMAND=Live 【过滤】
## 按"u" → 输入:www-data 【过滤】
## 按"M" → 内存倒序
## 按"P" → cpu倒序
## 按"h" → 显示帮助
## 按"1" → 监控每个cpu状态
## https://zhuanlan.zhihu.com/p/562569361
htop
htop --p $(pgrep -d',' -f 'hellochat')
#5 查看内存剩余:
free -m
#6 通过ps查看内存和cpu:
ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid'
ps aumx|grep hellochat
#7 查看进程总数和内存总数:
ps -eo comm,rss | grep php | awk 'BEGIN {count=0; sum=0} {count++; sum+=$2} END {printf "Count: %d\nMemory: %.2f MB\n", count, sum/1024}'
#8 查找命令的路径
which curl
command -v curl
type curl
#9 判断curl是否已安装
if command -v curl >/dev/null 2>&1; then
echo "curl is available"
fi

端口/进程查看和管理

#1 查看端口占用
sudo lsof -i :1086
lsof -i tcp:1086
#2 ps查看进程
# aux="显示系统中所有用户的所有进程" a="all users" u="user-oriented""用户可读格式" x="包含后台进程"
ps aux |grep -e 'USER' -e 'nginx' -e 'php'
# -axo="显示系统中所有用户的所有进程" a="all users" x="包含后台进程" o="output format""自定义输出字段"
# 常用字段:
# pid="进程ID" ppid="父进程ID" user="所属用户" comm="可执行的文件名(killall匹配此值)" command="启动命令及参数"
# exe="实际可执行文件路径" %cpu="cup占用率" %mem="内存占用率" tty="关联终端" stat="进程状态"
# etime="运行时间" start="启动时间" time="累计cpu时间" args="完整命令行|与command类似"
ps -axo user,pid,ppid,comm,command | grep -E 'USER|nginx|php'
# -ef="关注父子关系(PPID)和完整命令"
ps -ef|grep nginx
ps -ef|grep php-fpm
history | grep ssh
#3 ps查看进程(PID/Name)
sudo pkill -9 541
sudo pkill -9 php-fpm

zsh 查看历史命令

#1 查看所有历史命令
history 1 -1
#2 搜索相关历史命令
history 1 -1 | grep php
history 1 -1 | grep pecl
history 1 -1 | grep brew

代理设置(暂时的)

#1 开启代理
export http_proxy=127.0.0.1:1087
export https_proxy=127.0.0.1:1087
#2 关闭代理
unset http_proxy
unset https_proxy

git代理设置(长期的)

#1 查看全局配置
git config --global --list
#2 设置
git config --global http.proxy http://127.0.0.1:1087
git config --global https.proxy https://127.0.0.1:1087
#3 取消设置
git config --global --unset http.proxy
git config --global --unset https.proxy

GeoIP 备份和下载

cd /usr/share/ && ossutil64 cp -r GeoIP oss://s***m-copys2/GeoIP2

文件管理

缓存文件夹清理(s***m-store/tmp为例)

    #1 将tmp中超过15天的文件 移动到 s***m-store-copys/tmp文件夹中命令:
cd /xxx/xxx/s***m-store/tmp
sudo find ./ -name "*.png" -mtime +15 -exec mv {} ../../s***m-store-copys/tmp \;
sudo find ./ -name "*.jpg" -mtime +15 -exec mv {} ../../s***m-store-copys/tmp \;
sudo find ./ -name "*.jpeg" -mtime +15 -exec mv {} ../../s***m-store-copys/tmp \;
sudo find ./ -name "*.PNG" -mtime +15 -exec mv {} ../../s***m-store-copys/tmp \;
sudo find ./ -name "*blob" -mtime +15 -exec mv {} ../../s***m-store-copys/tmp \;
sudo find ./ -name "*.JPG" -mtime +15 -exec mv {} ../../s***m-store-copys/tmp \;

打包压缩

  • 命令文档:【Linux】tar压缩解压缩笔记 - 爱啦啦 - 博客园

  • 压缩单个文件:

    tar -zcvf log.tar.gz 20_02_17Log.log
  • 压缩批量文件:

    #1. 将3天以外的log 移动到history
    sudo find ./ -maxdepth 1 -name "*.log" -mtime +3 -exec mv {} history \;
    #2. 去到history
    cd history/
    #3. 压缩打包
    tar -zcvf 20200117_20200215log.tar.gz *.log
    #4. 删除history中的log
    rm -rf *.log
    #5. 查看剩余空间
    df -h

批量重命名:

image-20250926151821965

#1 rename 命令:
brew install rename #安装rename命令
rename -n 's/^(\d+)/sprintf("%03d",$1)/e' * #带-n是预览,不带-n是执行重命名操作

#2 命令行脚本:
cd /你的文件目录
for f in *; do
num=$(echo "$f" | sed -E 's/^([0-9]+).*/\1/')
newnum=$(printf "%03d" "$num")
newname=$(echo "$f" | sed -E "s/^[0-9]+/$newnum/")
mv "$f" "$newname"
done

#3 finder 批量重命名(不支持正则):
选中所有文件 》重新命名;

批量移动/删除文件:

#1 批量删除文件 删除60天之外的所有.log文件:
sudo find ./ -maxdepth 1 -name "*.log" -mtime +60 -exec rm -rf {} \;
#1 清空文件内容 swoole.log文件:
su -c "> swoole.log" www-data
#2 find 命令
#2.1 当前目录下 .log 结尾的文件: ./ -name "*.log"
#2.2 60天之外的: -mtime +60
#2.3 对查找结果 执行的操作: -exec rm -rf {} \
#3 移动15天之外的日志:
sudo find ./ -maxdepth 1 -name "*.xls" -mtime +7 -exec mv {} history \;
sudo find ./ -maxdepth 1 -name "*.log" -mtime +15 -exec mv {} ./histories \;

find 命令介绍:mac 显示隐藏文件+Find命令

移动、复制、删除

mv klz-store klz-store.bak
mv klz-store.20180727 klz-store
rm -rf node_modules
cp klz-api klz-api.20180730 -r
cp -r s***m-api copy-s***m-api/s***m-api-0701

空间查看

#1 centos 查看文件可用空间:
df -h
#2 查看当前目录文件夹大小:
du -h --max-depth 1
#3 查看当前文件列表大小:
ls -lh

权限更改

#1 修改文件夹权限
chmod ug+rwx file;
chmod 771 file;
#2 修改所有者
chown www-data: filedir -R;
3# 修改可执行
chown u+x file;

文件上传下载

#1 远程下载文件:
scp -P22 centos@52.74.198.196:/xxx/xxx/s***m-pay/logs/klz_call.log ~/Downloads/klz-call.log
scp -P22 centos@s***m-cpanel:/xxx/xxx/xxx/s***m-cpanel.access.log-20190318.gz ~/Downloads/cpanel.log-0318.gz
#2 远程下载文件夹
scp -r -P22 centos@52.74.198.196:/xxx/xxx/s***m-store/web/skin/js/data ~/Downloads/data
scp -P22 centos@s***m-cpanel:/xxx/xxx/s***m/xxx/32DFE214-0971-3497-6D1B-EB745D72E18A.xlsx ~/Downloads/cas.xlsx
#3 远程上传文件

php:

重启:

sudo service php-fpm restart
sudo systemctl restart php-fpm
# 正式服:
systemctl restart php-fpm
# 正式服:
history|grep php
systemctl restart php7.1-fpm

常用调试代码

//1 设置超时时间
set_time_limit(120);
//2 设置内存大小
ini_set('memory_limit', '512M');
//3 设置错误打印
ini_set('display_errors', 'On');
error_reporting(E_ALL);
//4 打印错误并结束
die("test");
print_r($result);
die;

systemctl:

命令详解:

##列出当前系统服务的状态
systemctl list-units
##列出服务的开机状态
systemctl list-unit-files
##查看指定服务的状态
systemctl status sshd
##关闭指定服务
systemctl stop sshd
##开启指定服务
systemctl start sshd
##从新启动服务
systemctl restart sshd
##设定指定服务开机开启
systemctl enable sshd
##设定指定服务开机关闭
systemctl disable sshd
##使指定服务从新加载配置
systemctl reload sshd

npm

npm常用命令

#1 查看安装列表 ls 、list
npm ls -g
npm list -g --depth 0
npm ls
#2 搜索:https://docs.npmjs.com/cli-commands/view.html
npm search gulp
npm view gulp
npm version
#3 安装
npm install gulp
npm install gulp -g
#4 更新
npm update gulp
#5 删除
npm uninstall gulp
npm uninstall gulp -g
#6 清除缓存
npm cache clean

npm package管理

#1 初始化 生成package.json
npm init
#2 安装并添加到 package
npm install gulp --save
#3 直接通过package.json安装
npm install

npm 代理设置(长期的)

#1 开启代理
npm config set proxy http://127.0.0.1:1087
npm config set proxy http://127.0.0.1:1087
#2 查看:
npm config list
#3 关闭代理
npm config delete proxy
npm config delete https_proxy

nginx

  • 校验配置:nginx -t

  • 启动: nginx

  • 重启:

    sudo nginx -s reload
    sudo service nginx restart
    sudo systemctl start nginx
    sudo systemctl restart nginx
    systemctl status nginx.service
    ps aumx|grep nginx
    sudo kill 30443
    sudo killall nginx

git:

git reset -hard 21e4615ac29c880171ccb7454b91b08c07e56e65

其他

systemctl restart metricbeatt
systemctl restart metricbeat
systemctl restart filebeat

SSH配置设置

常用ssh命令

# 1 corp项目更新
ssh s***m-corp -t "cd /var/www/s***m-corp && pwd && su -c 'git pull && composer dumpautoload && gulp' www-data"
# 2 GeoIP库下载到oss
ssh s***m-store -t 'cd /usr/share/GeoIP/ && ls -lh && cd .. && ossutil64 cp -r GeoIP/ oss://s***m-copys2/ecs-logs/GeoIP/'
# 3 hellochat-hyperf项目更新
ssh hellochat-v4 -t "cd /var/www/hellochat-hyperf/ && pwd && git pull && ./restart.sh" && sleep 3 && ssh hellochat-v4 -t "cd /var/www/hellochat-hyperf/ && pwd && php bin/hyperf.php start"
# 4 hellochat-hyperf项目日志打包
ssh hellochat-v4 -t "cd /var/www/hellochat-hyperf/runtime/ && tar -zcvf logs_2024091402.tar.gz ./logs/ && ossutil cp logs_2024091402.tar.gz oss://s***m-copys2/logs/hellochat/logs_2024091402.tar.gz"
# 5 hellochat-hyperf项目更新【Dev环境】
ssh s***m-dev -t "cd /var/www/hellochat-hyperf/dev/ && pwd && git pull && ./restart-dev.sh" && sleep 5 && ssh s***m-dev -t "cd /var/www/hellochat-hyperf/dev/ && pwd && php8.2 bin/hyperf.php start"

常用shell命令

kill pkill 和 killall 参考

kill、pkill、killall 都是用来**终止进程(process)**的命令,但它们在使用方式、匹配规则和应用场景上各不相同。

总体区别概览

命令匹配方式参数输入是否支持模糊匹配典型用途
killPID(进程ID)需要具体进程ID❌ 否精确终止指定进程
pkill进程名/命令行模式匹配提供部分名称或正则✅ 是模糊匹配批量杀进程(最灵活)
killall进程名(comm字段)完全匹配提供完整进程名❌ 否(完全匹配)一次结束指定名字的所有进程

kill 基础用法(最底层命令)

kill 是最原始的进程终止命令,用 进程 ID(PID) 操作。

✅ 基本语法

kill [信号] PID

✅ 常见信号

信号名称含义
-15SIGTERM正常终止(默认),允许进程清理资源
-9SIGKILL强制终止,不可被捕获或忽略
-HUPSIGHUP通常用于让守护进程重新加载配置
-STOPSIGSTOP暂停进程
-CONTSIGCONT继续执行被暂停的进程

✅ 示例

kill 1234               # 发送 SIGTERM(优雅终止)
kill -9 1234 # 强制杀死
kill -HUP 19332 # 让 php-fpm 重新加载配置

pkill 用法(按名称/模式匹配)

pkill = “pattern kill”,按进程名命令行匹配规则终止进程。

✅ 基本语法

pkill [选项] 模式

✅ 常用选项

参数含义
-f匹配完整命令行(默认只匹配进程名)
-9强制终止(SIGKILL)
-u user限定用户
-P ppid限定父进程ID
-x精确匹配(与 killall 类似)
✅ 示例
pkill php-fpm           # 杀掉所有名字中包含 php-fpm 的进程
pkill -f "php-fpm" # 匹配命令行中有 php-fpm 的进程(推荐)
pkill -9 -f "nginx" # 强制终止所有 nginx 相关进程
pkill -u www-data php # 杀掉 www-data 用户下的所有 php 进程

✅ 特点

  • 支持正则和模糊匹配;
  • 最常用于脚本和批量操作;
  • 在 macOS、Linux 上都支持。

killall 用法(按进程名完全匹配)

killall 是按进程名(comm 字段)完全匹配来终止进程的命令。

✅ 基本语法

killall [选项] 进程名

✅ 常用选项

参数含义
-9强制终止
-u user只杀特定用户的进程
-e精确匹配完整名称(部分系统默认)
-v输出被杀掉的进程信息
-q静默模式,不输出错误
✅ 示例
sudo killall php-fpm      # 杀掉名为 php-fpm 的所有进程
sudo killall -9 nginx # 强制杀死 nginx 所有进程
sudo killall -u _www php # 杀掉 _www 用户下所有 php 进程

⚠️ 注意

  • macOS 的 killall 来自 BSD,它只匹配 “comm 名称完全一致”;
  • Linux 的 killall 支持匹配命令名(不严格要求完全一致);
  • macOS 上 killall php-fpm 可能失败,但 pkill -f php-fpm 通常成功。

三者区别对比总结

特性killpkillkillall
匹配方式PID 精确模糊 / 正则完全匹配
支持通配符❌ 否✅ 是❌ 否(macOS)
匹配对象单个进程多个进程多个进程
是否支持 -f 命令行匹配❌ 否✅ 是❌ 否
跨平台一致性✅ 高✅ 高⚠️ macOS/Linux 不同
最常用途已知 PID模糊批量结束明确进程名结束
  • kill → “我知道 PID”

  • pkill → “我知道名字的大概”

  • killall → “我知道名字的准确拼写”