Linux 服务器维护相关常用命令集合 65+

发布者:站点默认
2012/07/9 浏览数(10,970) 分类:CentOS/RockyLinux, Linux, 数据安全 评论(1)

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(极点五笔)
# 安装后需要注销,添加:设置-区域和语言

<完>

点击返回顶部
  1. 留言
  2. 联系方式