Linux 服务器维护相关常用命令集合 65+
Centos 9 中安装 php 7.4
dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm dnf module list php dnf install php74-php php74-php-fpm php74-php-mysqlnd php74-php-mcrypt php74-php-gd php74-php-bcmath php74-php-json php74-php-mbstring php74-php-xml php74-php-zip systemctl enable php74-php-fpm # /etc/opt/remi/php74/php.ini # /etc/opt/remi/php74/php-fpm.conf # 检查依赖是否完整: php74 /usr/local/bin/composer check-platform-reqs
在目录中查找文本
grep -rni "text string" /path/to/directory # -r 在子目录中执行递归搜索 # -n 显示包含该模式的行号 # -i 忽略文本字符串的大小写
统计某个文件夹中指定类型的文件的总体大小
find . -name "*.png" | xargs du -ck # KB find . -name "*.png" | xargs du -cm # MB
让假 ASCII 字符的文件名现出原形
export LC_ALL=C ls -al # 例: # a:а c:с d:ԁ e:е # h:һ i:і j:ј k:κ l:ӏ # n:ո o:оοօ p:р q:զ # u:ս v:ѵ x:х y:у # 格式:真:伪
检查线上 Vue 前端项目的发布日期
javascript:alert(document.lastModified);
根据 inode 删除特殊名称的文件
ls -i # 列出 inode,比如要删除 inode number: 8888 find . -inum 8888 -exec rm -i {} \;
禁止 root 用户通过 SSH 登陆
#/etc/ssh/sshd_config PermitRootLogin no
临时停用 ONLY_FULL_GROUP_BY
SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY,','')); SELECT count(value) as c, userid FROM ` ......
CentOS 使用 Remi 源安装 PHP8 时将配置放入 /etc/ 而不是 /opt/
关键点:不要直接 yum install php81-php-* 这样会安装到 /opt 目录,而应该启用 php81 后,依旧使用 yum install php-* 来安装(别加 php8 前缀)。
# CentOS 7 yum install epel-release yum-utils yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm #或 yum install https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/remi-release-7.rpm yum-config-manager --enable remi-php81 yum install php php-common php-devel php-cli php-fpm php-gd php-zip php-mbstring php-xml php-pear php-bcmath php-json php-opcache php-curl php-redis php-pdo php-mysqlnd php74-php-sodium php74-php-zip # CentOS 8 sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-* dnf install dnf-utils dnf install http://rpms.remirepo.net/enterprise/remi-release-8.rpm #或 dnf install https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/remi-release-8.rpm dnf module reset php && dnf module enable php:remi-8.1 dnf install php php-{common,devel,cli,fpm,gd,zip,devel,mbstring,xml,pear,bcmath,json,opcache,curl,redis,mysqlnd}
# CentOS 7 更多: # yum-config-manager 包来自 yum-utils yum search php8 yum-config-manager --enable | grep -i remi # CentOS 8 更多: dnf module list php # 可安装的 php 版本列表, dnf module reset php && dnf module enable php:remi-8.1 # 将 8.1 作为默认版本,需要输入“y”
防止 SSH 客户端超时
# vim /etc/ssh/sshd_config ClientAliveInterval 50 ClientAliveCountMax 10
Error: Failed to download metadata for repo ‘appstream’: Cannot prepare internal mirrorlist: No URLs
# 官方在2021年12月31日停止了 CentOS8 的源服务 sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
使用 yum update 升级 php7 到 php8
yum install -y epel-release yum install -y yum-utils yum install -y https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/remi-release-7.rpm # CentOS 7.* yum-config-manager --enable remi-php80 yum update
Nginx 文档目录和 MySQL 数据库文件的 SELinux 权限配置
# Nginx mkdir /data/web chown nginx:nginx -R /data/web chmod go-rwx -R /data/web semanage fcontext -a -t httpd_sys_content_t '/data/web(/.*)? restorecon -RvvF /data/web chcon -t httpd_sys_rw_content_t /data/web/upall.cn/uploads -R # MySQL mkdir /data/db chown mysql:mysql /data/db mv /var/lib/mysq/* /data/db/ sed -i 's/^datadir=/var/lib/mysql$/datadir=/data/db' /etc/my.cnf semanage fcontext -a -t mysqld_db_t '/data/db(/.*)?' restorecon -RvvF /data/db systemctl start mysqld
CentOS 设置固定 IPv4
配置文件名类似: /etc/sysconfig/network-scripts/ifcfg-em1 /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet BOOTPROTO=static DEFROUTE=yes DEVICE=eth0 ONBOOT=yes IPADDR=122.114.180.234 NETMASK=255.255.255.0 GATEWAY=122.114.180.1 DNS1=8.8.8.8 DNS2=114.114.114.114
创建 iso 文件
genisoimage -full-iso9660-filenames -joliet -allow-lowercase -o file.iso ./folder/ #或:mkisofs -full-iso9660-filenames -joliet -allow-lowercase -o file.iso ./folder/ # -full-iso9660-filenames 长文件名支持,默认8+3 # -joliet 中文文件名支持 # -allow-lowercase 小写支持,默认全是大写
ssh-agent
# bash eval "$(ssh-agent -s)"ssh-add # fish eval (ssh-agent -c)(ssh-add)
获取剩余硬盘空间
echo "剩余容量: `df -h |awk -F '[ ]+' 'NR==7{print $4}'`" # NR==7 从 df 的第7行中取,$4 是第4列
整站下载
# 方法1 wget -m -e robots=off -U "Mozilla/5.0 (compatible;Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html)" "http://www.google.com/" # 无视 robots 以 Baiduspider 的身份爬 Google.com # 方法2 wget -r -p -np -k http://www.google.com/ # -r, –recursive(递归) specify recursive download.(指定递归下载) # -k, –convert-links(转换链接) make links in downloaded HTML point to local files.(将下载的HTML页面中的链接转换为相对链接即本地链接) # -p, –page-requisites(页面必需元素) get all images, etc. needed to display HTML page.(下载所有的图片等页面显示所需的内容) # -np, –no-parent(不追溯至父级) don’t ascend to the parent directory.
给私钥设置密码
ssh-keygen -p -f ~/.ssh/id_rsa # 不输入新密码直接回车可清除密码
从私钥中导出公钥
openssl rsa -in mykey.pem -pubout > mykey.pub ssh-keygen -y -f mykey.pem > mykey.pub # 提取用于OpenSSH的公钥 ssh-keygen -y -f id_rsa > id_rsa.pub # -y This option will read a private OpenSSH format file and print an OpenSSH public key to stdout.
安装公钥到远程主机
ssh-copy-id -i ~/.ssh/id_rsa.pub -p 22 user@upall.cn # 将 id_rsa.pub 的内容添加到远程主机的 ~/.ssh/authorized_keys 中 # 如需删除公钥请手动编辑远程主机的 authorized_keys 文件
统计代码行数
find ~/projects/ -type f -name "*[.js|.css|.vue|.less|.styl|.php]" | xargs cat | wc -l
查看服务启动耗时
systemd-analyze blame
10.493s network.service 3.565s mariadb.service 1.161s postfix.service 463ms firewalld.service 461ms tuned.service 319ms systemd-logind.service 295ms rhel-dmesg.service 295ms rc-local.service 294ms systemd-user-sessions.service 292ms rsyslog.service
查看开机启动项
systemctl list-unit-files --type=service | grep enabled
firewalld.service enabled mariadb.service enabled nginx.service enabled ntpd.service enabled php-fpm.service enabled sshd.service enabled tomcat.service enabled vsftpd.service enabled
将服务“放入回收站”
systemctl mask bluetooth.service
stop 和 disable 的服务会被重新启用,不想要这个服务而又不放心删除时可以如上操作。
查看 header 头信息
curl -I https://upall.cn/
HTTP/1.1 200 OK Server: nginx Date: Sat, 09 Sep 2017 08:54:57 GMT Content-Type: text/html Connection: keep-alive Vary: Accept-Encoding X-Powered-By: ASP.NET
分别单独压缩当前目录中的子目录,并以子目录的名字命名其压缩文件
for f in ./*;do if [ -d $f ]; then tar -zcvf $f.tgz $f; fi; done
更改MAC地址
#临时: ~$ sudo ip link set dev eth0 address 00:00:00:00:00:01 #永久: #file: /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 MACADDR=00:00:00:00:00:0
查看系统是32位还是64位的方法
getconf LONG_BIT # output:32 getconf LONG_BIT # output:64
显示剩余内存(MB)
free -m | grep cache | awk '/[0-9]/{ print $4" MB" }'
统计 php-fpm 进程总数
ps -e | grep php-fpm | wc -l # top工具按内容占用量排序按M键,按CPU排序按P键(M和P都是大写)
在bash历史记录里禁止记录最后一次会话
kill -9 $$
整站下载器
wget -r --no-parent --reject "index.html*" http://hostname/ -P /home/user/dirs
清屏
printf "\033c"
修改时区为东8区、上海
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
修改主机名称
#需要改下边这两个文件: vim /etc/hosts vim /etc/sysconfig/network
查看服务器每IP的连接数,用于检测DDOS
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n 2 199.87.229.20 3 120.43.25.94 3 218.30.103.142 3 61.135.169.47 4 110.81.18.140 8 59.58.136.94 20 192.151.148.226 47 219.157.16.254
T人,把其他人从服务器中踢出去
w #查看谁在线 15:44:27 up 22 days, 7:16, 1 user, load average: 0.02, 0.09, 0.10 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 192.161.177.103 15:40 0.00s 0.03s 0.00s w pkill -KILL -t pts/0 #踢了这个终端(现在是T自己,^_^)
修改文件的时间戳
touch -c -t 0801010800 filename.c #将文件的时间戳设定为2008-01-01 8:00,格式为(YYMMDDhhmm)。
批量将 .conf 文件重命名为 .conf.bak
cd /etc/httpd/webSite/ for i in $(ls *.conf);do mv $i ${i/.conf/.conf.bak};done # 因使用了ls命令,注意当前目录问题
一键安装Apache+PHP+MySQL
yum -y install httpd php mysql mysql-server php-mysql httpd-manual \ mod_ssl mod_perl mod_auth_mysql php-mcrypt php-gd php-xml php-mbstring \ php-ldap php-pear php-xmlrpc mysql-connector-odbc mysql-devel libdbi-dbd-mysql
一键安装 Nginx + PHP-FPM + PHP + MySQL
yum -y install nginx mysql-server php-fpm php-cli php-pdo php-mysql php-mbstring php-gd php-curl php-json # Centos8 下需要将 php-mysql 换成 php-mysqlnd
安装 Mariadb
yum install mariadb mariadb-server systemctl start mariadb // 启动mariadb systemctl enable mariadb // 开机自启动 mysql_secure_installation // 初始化:设置root密码,删除test库,禁止root远程登录 等等 mysql -uroot -p123456 // 测试
/etc/yum.repos.d/nginx.repo [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/6/$basearch/ gpgcheck=0 enabled=1
添加用户并设置密码
useradd -s /bin/nologin -m -d /var/www/website/new_user_name -g newUserGroupName newUserName echo `pwdBuilder newUserName`| passwd newUserName --stdin # 添加一个网站的用户,禁止登录,家目录为网站根目录,根据pwdBuilder计算密码
查看当前目录下的一级目录个数
ls -l |grep "^d"|wc -l
vi 删除空行
:g/^s*$/d # Dreamweaver可以将“\r\n\s*\r\n”以正则方式替换为“\r\n”
按文件名称查找文件
find ./ -type f | grep -sni "dragf.php" --color=always
按修改时间范围查找文件
find . -type f -newermt '2017-10-01 00:00:00' ! -newermt '2017-10-08 23:59:59'
找出/home/user下所有空子目录
find /home/user -maxdepth 1 -type d -empty
查找目录中的文件中所含有指定字符串的文件
find ./ -name '*.conf' | xargs grep -in "baidu.com.demo.upall.cn" --color=always # 注:“baidu.com.demo.upall.cn” 是要查找的字符串 # 这个命令用于在大批的配置文件中快速定位到某域名的配置文件名称,因为: # 因特殊原因导致该用户的配置文件名不符合规则或一个配置文件中有多个不相似的域名 # i:不区分大小写 # n:显示所在行号
将文件中的关键字替换为其它字符
find . -type f | xargs sed -i 's/oldString/newString/g'
查看单个文件(或文件夹)大小
du -sh /var/log/
查看文件夹中各文件夹、文件的大小(区分哪个文件夹最大)
du -h --max-depth=1 /var/log/
删除源码中的^M
:%s/^M$//g #注意:^M的输入方式,Ctrl+V+M
批量去除include及其下文件的写权限
find /var/www -type d -name "include" -print0 | xargs -0 chmod ugo-w -R # 去除执行权限可以看这篇文章:/?p=697
查找当前文件夹中包含字符串“fsockopen”的所有文件
其实查找“udp://$”的话会精准一些,当然也要看实际情况,^_^。
find ./ -type f | xargs grep -sni "fsockopen" --color=always # 或者(下边这行帮助理解“-sni”参数) find ./ -type f | xargs grep --silent --line-number --ignore-case "fsockopen" --color=always # 如果找出的文件全部可以删除的话,可以用下边这条命令来删除: find ./ -type f | xargs grep -lsi "fsockopen" | xargs rm # 查找WebShell时可以用下边这行: find ./ -iname "*.php" | xargs grep -H -n "eval(base64_decode" # 分享几个ddos脚本的“特征码”: #eval($_POST[ #eval($_GET[ #$_POST['port'] #$_GET['port']; #set_time_limit(0); #set_time_limit(999999); #65535 #while(1) #fsockopen("tcp:// #fsockopen("udp:// #packets/s ##日志: #Timeoit.php?port=53&time=20&host=183.001.002.129 #Timeois.php?port=53&time=10&host=122.001.0.222
批量压缩图片大小
yum install ImageMagick # 将宽度大于 800 的图片处理成宽为 800 的图片 find ./ -type f -regextype 'posix-egrep' -iregex '.*\.(jpg|png|gif)' | while read line do echo $line convert -resize '800>' $line $line done # 多行转成一行: # bash: find ./ -type f -regextype 'posix-egrep' -iregex '.*\.(jpg|png|gif)' | while read line; do echo $line; convert -resize '800>' $line $line; done # fish: find ./ -type f -regextype 'posix-egrep' -iregex '.*\.(jpg|png|gif)' | while read line; echo $line; convert -resize '800>' $line $line; end
windows 版,依赖 ImageMagick:
@echo off setlocal EnableDelayedExpansion set MAGICK=magick.exe set MAX_WIDTH=800 for /f "delims=" %%i in ('dir /s /b %1') do ( :: 略过检测直接处理,自动跳过不需要处理的图片 :: echo %%i && %MAGICK% convert "%%i" -resize "%MAX_WIDTH%>" "%%i" :: 检测图片并显示处理结果 for /f "tokens=1-2" %%a in ('%MAGICK% identify -format "%%[fx:w] %%[fx:h]" "%%i"') do ( if %%a LEQ %MAX_WIDTH% ( echo skiped: %%i, %%a*%%b ^< %MAX_WIDTH% ) ELSE ( %MAGICK% convert "%%i" -resize %MAX_WIDTH% -quality 85 "%%i" for /f "tokens=1-2" %%j in ('%MAGICK% identify -format "%%[fx:w] %%[fx:h]" "%%i"') do ( echo converted: %%i, %%a*%%b-^>%%j*%%k ) ) ) )
查看域名的MX记录是否生效
[upall@linux ~]$ host -t mx upall.cn upall.cn mail is handled by 10 mx.upall.cn. # 如果 command not found 就 yum install bind-utils
列出所有网站文件夹中 zip 的文件,并显示其大小
经常会在服务器上下载一些源码包或者打包一些备份文件之后忘记删除,这个命令可以找出它们。
find /www/ -type f -name "*.zip" -print0 | xargs -0 du -h
删除用户及其文件(删除用户登入目录以及目录中所有文件)
userdel -r upall
查看指定端口运行的程序
# 查看3428端口运行的程序: lsof -i :3428 # 关闭进程可以(9是终止信号等级): killall -9 firefox
修改 /etc/aliases 后更新 /etc/aliases.db 数据库
newaliases
禁用停用锁定用户、恢复启用用户
passwd -l upall #禁用用户upall passwd -u upall #启用用户upall
清除UTF-8中的BOM头
grep -r $'\xEF\xBB\xBF' * |grep .php #或者直接配置vim:set nobomb
CentOS yum安装Apache + PHP + MySQL + Tomcat
#yum -y install httpd php mysql mysql-server php-mysql httpd-manual \ mod_ssl mod_perl mod_auth_mysql php-mcrypt php-gd php-xml php-mbstring \ php-ldap php-pear php-xmlrpc mysql-connector-odbc mysql-devel libdbi-dbd-mysql
替换MySQL字段中的字符串
UPDATE `tableName` SET `fieldName` = replace (`fieldName`,'fromString','toString') WHERE `fieldName` LIKE '%fromString%'; -- tableName 表的名字 -- fieldName 字段名 -- fromString 需要替换的字符串 -- toString 替换成的字符串
将文件复制到符合规则的目录中(一个文件到多个目录)
# 复制文件到路径中包含“base/images”的目录中: find . -type d -print | grep "/base/images" | awk '{print $1}' | xargs -I % cp ./logo.gif % # 复制文件到所有目录中: find . -type d -exec cp ./logo.gif {} \; # 复制文件到路径中包含“images”的目录中(name参数值不能有“/”,若有则需要“grep来配合”): find . -type d -name "images" -exec cp ./logo.gif {} \;
Windwos命令提示符批量重命名
:: 改后缀 ren *.html *.php :: .目录中文件加前缀 for /f %i in ('dir /b *.psd') do ren %i 首页_%i :: .及子目录中文件加后缀 for /f %i in ('dir /a:-d /s /b') do ren %i %i.bak
CentOS 7.3 安装五笔输入法
sudo yum install ibus-table-wibi # 自带 ibus-pinyin,命令自动转换为 ibus-table-wibi-jidian(极点五笔) # 安装后需要注销,添加:设置-区域和语言
<完>