CentOS 7 常用配置命令

记录一些常用的 CentOS 7 配置命令,部分命令其他 Linux 分支系统也是通用的。

开放及查看端口

开放端口

firewall-cmd --zone=public --add-port=8080/tcp --permanent # 开放8080端口
firewall-cmd --zone=public --remove-port=8080/tcp --permanent # 关闭8080端口
firewall-cmd --reload # 配置立即生效

查看防火墙所有开放的端口

firewall-cmd --zone=public --list-ports

关闭防火墙

如果需要开放的端口太多,嫌麻烦,可以关闭防火墙,安全性自行评估

systemctl stop firewalld.service

查看防火墙状态

firewall-cmd --state

查看监听的端口

netstat -lnpt

img

PS:CentOS 7 默认没有 netstat 命令,需要安装 net-tools 工具,yum install -y net-tools

检查端口被哪个进程占用

netstat -lnpt |grep 80

img

查看进程的详细信息

ps 15965

img

中止进程

kill -9 15965

Swap 分区(虚拟内存)管理

Swap 是 Linux 中的虚拟内存,用于扩充物理内存不足而用来存储临时数据存在的。它类似于 Windows 中的虚拟内存。

创建 Swap 分区

查看当前的内存和 Swap 空间大小(默认单位为k, -m 单位为M):

free -m

img

此处可以看到总内存是 3.7G 左右,Swap 不存在

查看 Swap 信息,包括文件和分区的详细信息,可以使用 swapon -scat /proc/swaps 命令,如果都没有可以选择手动添加交换分区。注意,OpenVZ 架构的 VPS 是不支持手动添加交换分区的。

  1. 使用 dd 命令创建一个 swap 交换文件

    dd if=/dev/zero of=/home/swap bs=1024 count=1024000

    这样就建立一个

    /home/swap
    

    的分区文件,大小为 1G,可以自行倍增。

    建议 Swap 容量在真实内存容量的 1.5 倍左右,若服务器内存大于 4GB,可设 1-2GB 的固定值

  2. 制作为 swap 格式文件
    mkswap /home/swap

  3. 再用 swapon 命令把这个文件分区挂载 Swap 分区,完成后可以使用 free -m 命令看一下是否有交换分区
    swapon /home/swap

  4. 为防止重启后 Swap 分区变成 0,要修改 /etc/fstab 文件
    vi /etc/fstab
    在文件末尾(最后一行)加上
    /home/swap swap swap default 0 0

  5. 最后,赋予 swap 文件适当的权限
    chown root:root /home/swap
    chmod 600 /home/swap

修改 swappiness

如果内存够大,应当告诉 Linux 不必太多的使用 Swap 分区,可以通过修改 swappiness 的参数来设置。swappiness=0 的时候表示最大限度使用物理内存,然后才是 Swap 空间,swappiness=100 的时候表示积极的使用 Swap 分区,并且把内存上的数据及时的搬运到 Swap 空间里面。如你发现你对于 Swap 的使用极少,可以将值设为 0,这并不会禁止你对 Swap 的使用,而是使你的系统对于 Swap 的写入尽可能的少,同时尽可能多的使用你的实际内存。

  1. 在 CentOS 中,swappiness 的默认值是60。通过以下命令可以看到:

    cat /proc/sys/vm/swappiness

  2. 我们可以调整 swappiness 的值到一个合适的参数,从而达到最优化使用 Swap 的目的,这里我将其设为 10。
    sysctl vm.swappiness=10

  3. 但是这只是临时性的修改,在你重启系统后会恢复默认的 60,要永久设置,还需要在 vim 中修改 sysctl.conf
    vi /etc/sysctl.conf

  4. 在这个文档最后加入一行 vm.swappiness=10,保存即可。

删除 Swap 分区

  1. 先停止 Swap 分区
    swapoff /home/swap
  2. 删除 Swap 分区文件
    rm -rf /home/swap
  3. 删除自动挂载命令
    删除 sysctl.conf 文件中新增的那一行 vm.swappiness=10,最后保存即可。

修改 hostname(主机名)

在 CentOS 7 中有三种定义的主机名:静态的(static)、瞬态的(transient)、和灵活的(pretty)。静态主机名也称为内核主机名,是系统在启动时从 /etc/hostname 内自动初始化的主机名,瞬态主机名是在系统运行时临时分配的主机名,灵活主机名则允许使用特殊字符的主机名。

  1. 问题一:输入的大写的主机名怎么都变成了小写?
   这是因为在修改静态/瞬态主机名时,任何特殊字符或空白字符会被移除,而提供的参数中的任何大写字母会自动转化为小写。一旦修改了静态主机名,/etc/hostname 将被自动更新。然而,/etc/hosts 不会更新以保存所做的修改,所以你需要手动更新 /etc/hosts。

   如果只想修改特定的主机名(静态,瞬态或灵活),可以使用 “--static”,“--transient” 或 “--pretty” 选项。
  1. 问题二,如何修改主机名是永久生效的?
   hostnamectl --static set-hostname hostname

注意,不必重启机器以激活永久主机名修改。上面的命令会立即修改内核主机名。注销并重新登入后在命令行提示来观察新的静态主机名。

  1. 问题三,如何查看到自己输入的大写主机名?
   hostnamectl status --pretty

给系统安装中文字体

yum -y install fontconfig       # 安装字体库配置工具
fc-list :lang=zh                # 查看是否有中文字体,没有任何内容代表没有
mkdir /usr/share/fonts/chinese  # 创建中文字体目录

在你的 Windows 的 C:\Windows\Fonts 目录下找到相应的字体文件 copy 到 chinese 目录下,这里添加雅黑和新宋体(msyh.ttc simsun.ttc)

`fc-list :lang=zh` # 再次查看是否有中文字体

设置服务器默认语言

使用 vim 修改 /etc/locale.conf 文件

LANG=en_US.UTF-8 # 默认英文
LANG=zh_CN.UTF-8 # 中文

设置服务器时区

设置系统时间为中国时区并启用 NTP 同步,需要联网

yum install ntp  # 安装 NTP 服务
systemctl enable ntpd  # 开机启动服务
systemctl start ntpd  # 启动服务
timedatectl set-timezone Asia/Shanghai  # 更改时区
timedatectl set-ntp yes  # 启用 NTP 同步
ntpq -p  # 同步时间

系统

# uname -a               # 查看内核/操作系统/CPU信息
# uname -r               # 查看内核
# head -n 1 /etc/issue   # 查看操作系统版本
# cat /proc/cpuinfo      # 查看CPU信息
# hostname               # 查看计算机名
# lspci -tv              # 列出所有PCI设备
# lsusb -tv              # 列出所有USB设备
# lsmod                  # 列出加载的内核模块
# env                    # 查看环境变量
# chmod 600 id_rsa       # 设置权限
# chattr +i .user.ini    # 加锁

资源

# free -m                       # 查看内存使用量和交换区使用量
# df -h                         # 查看各分区使用情况
# du -sh <path>                 # 查看指定目录的大小
# grep MemTotal /proc/meminfo   # 查看内存总量
# grep MemFree /proc/meminfo    # 查看空闲内存量
# uptime                        # 查看系统运行时间、用户数、负载
# cat /proc/loadavg             # 查看系统负载 (解释详见:http://blog.haohtml.com/index.php/archives/6860)

磁盘和分区

# mount | column -t      # 查看挂接的分区状态
# fdisk -l               # 查看所有分区
# mount device dir       # 挂载磁盘到目录
# swapon -s              # 查看所有交换分区
# hdparm -i /dev/hda     # 查看磁盘参数(仅适用于IDE设备)
# dmesg | grep IDE       # 查看启动时IDE设备检测状况

网络

# ifconfig               # 查看所有网络接口的属性
# iptables -L            # 查看防火墙设置
# ifstat                 # 查看网卡流量使用
# route -n               # 查看路由表
# netstat -lntp          # 查看所有监听端口
# netstat -antp          # 查看所有已经建立的连接
# netstat -s             # 查看网络统计信息
# mtr                    # 路由/丢包检测
# traceroute             # 路由跟踪
# tcping                 # tcp端口检测
# ping                   # icmp检测
# dig                    # 域名解析
# nslookup               # 域名解析
# route                  # 查看路由表
# nmcli                  # 网络管理
# nmcli c reload         # 重启网卡

进程

# ps -ef                 # 查看所有进程
# top                    # 实时显示进程状态
# htop                   # 实时显示进程状态(高级)

用户

# w                         # 查看活动用户
# id <name>                 # 查看指定用户信息
# last                      # 查看用户登录日志
# cut -d: -f1 /etc/passwd   # 查看系统所有用户
# cut -d: -f1 /etc/group    # 查看系统所有组
# crontab -l                # 查看当前用户的计划任务

服务

# chkconfig --list              # 列出所有系统服务
# chkconfig --list | grep on    # 列出所有启动的系统服务

程序

# rpm -qa                       # 查看所有安装的软件包

请求

# curl -x 127.0.0.1:80 http://www.haxx.com/                                  # 指定IP请求http
# curl --resolve 'www.abc.com:443:180.101.49.11' https://www.abc.com/ -vvv   # 指定IP请求https
# curl http://www.haxx.com/[1-100].jpg                                       # 批量下载资源
# wget https://curl.haxx.se/download/curl-7.51.0.tar.gz                      # 下载某个文件

文件

# cat                                              # 获取文本内容
# cat filename | awk '{print $1}'                  # 获取第一列
# sed -i 's/a/b/g' filename                        # 全局替换
# find . -name "upgrade.sh" -print                 # 在当前目录查找文件名
# scp a.gz root@39.106.210.153:/home               # 复制文件到远程机器
# scp root@[ip]:/root/1.log ./1.log                # 从远程机器下载到本地
# seq 5 | tr "\n" "|"                              # 输出序号“1|2|3|4|5|”
# cat access.log| tr "." "-"                       # 输出文本时把A换成B
# grep -v "abc" filename                           # 输出没有abc的行
# cut -d ' ' -f 9 access.log                       # Nginx日志中只列出状态码,类似awk
# wc -l access.log                                 # 查看文件共有多少行
# tree                                             # 列出该目录下所有子文件
# ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3  # 设置软链A到B

压缩解压命令

# zip newzip.zip *                                 # 打包当前目录的所有文件为newzip.zip
# unzip filename.zip                               # 解压filename.zip到当前目录
# tar -czvf new.tar.gz *                           # 打包当前目录的所有文件为new.tar.gz
# tar -zxvf new.tar.gz                             # 解压new.tar.gz到当前目录
# bzip2 -z fileName                                # bz2压缩
# bunzip2 fileName                                 # bz2解压

工具

# screen -S lnmp                                   # 创建名为lnmp的session
# screen -r lnmp                                   # 恢复进入名为lnmp的session
# screen -ls                                       # 查看session列表
# nohup python run.py &                            # 运行程序到守护进程
# ssh root@ip "uptime"                             # 远程执行命令

文件位置

/etc/hosts                                  # 域名指向
/etc/resolve.conf                           # DNS的地址
/etc/hostname                               # 主机名称
/etc/sysconfig/network-scripts/ifcfg-eth0   # IP配置文件
/etc/profile                                # 环境变量,重载生效`source ~/.bash_profile`

软件安装(CentOS)

yum install -y bind-utils                   # 安装dig命令
yum install -y net-tools                    # 安装ifconfig命令

查看磁盘占用情况

# 查看服务器磁盘空间整体情况
df -h
 
# 查看当前目录,哪个文件占用最大
du -h --max-depth=1
 
# 查看当前目录下各文件及目录占用大小
du -sh *

按文件类型日期查找文件并删除

# 不加 -maxdepth 则会遍历当前目录下所有子目录中所有文件
# 找出当前目录下不包含子目录1天之前的 log 文件并删除
find ./ -maxdepth 1 -name "*.log*" -mtime +0 -exec rm -rf {} \;
 
# 找出当前目录下不包含子目录3天之内的 .log 文件并删除
find ./ -maxdepth 1 -name "*.log*" -mtime -3 -exec rm -rf {} \;

其他参数

img

-mindepth n: 限定搜索指定目录的最小深度
-maxdepth n: 限定搜索指定目录的最大深度
 
atime 最后一次访问时间, 如 less, more 等, 但 chmod, chown, ls, stat 等不会修改些时间, 使用 ls -utl 可以按此时间顺序查看
ctime 最后一次状态修改时间, 如 chmod, chown 等状态时间改变但修改时间不会改变, 使用 stat file 可以查看
mtime 最后一次内容修改时间, 如 vi 保存后等, 修改时间发生改变的话, atime 和 ctime 也相应跟着发生改变
 
-ctime -n 查找距现在 n*24H 内修改过的文件
-ctime n 查找距现在 n*24H 前, (n+1)*24H 内修改过的文件
-ctime +n 查找距现在 (n+1)*24H 前修改过的文件
 
[a|c|m]min [最后访问|最后状态修改|最后内容修改]分钟数(n*min)
[a|c|m]time [最后访问|最后状态修改|最后内容修改]天数(n*24H)

查看文件目录数量

# 查看当前目录下的文件数量(不包含子目录中的文件)
ls -l | grep "^-" | wc -l
 
# 查看当前目录下的文件数量(包含子目录中的文件)注意:R,代表子目录
ls -lR | grep "^-" | wc -l
 
# 查看当前目录下的目录个数(不包含子目录中的目录)
ls -l | grep "^d" | wc -l
 
# 查看当前目录下的目录数量(包含子目录中的目录)注意:R,代表子目录
ls -lR | grep "^d" | wc -l
 
# 统计所有以"test"开头的目录下的全部文件数量
ls -lR test*/|grep "^-"| wc -l
 
# 统计当前目录下42天前所有文件总共大小(单位字节)
find ./ -name "*.*" -mtime +42 -exec ls -l {} \;|awk 'BEGIN {SUM=0}{SUM+=$5} END{print SUM}'

找出已经删除但空间未释放的大文件并清空

  1. 找出已经删除但磁盘空间未释放的文件
    如果文件已经删除,但实际的磁盘空间未释放,这个时候文件句柄 fd 相关信息还在内存中,可以通过 lsof 命令找出,比如打开文件的pid和读写文件的系统fd。
# yum -y install lsof
# lsof |grep -i delete
java      20302  5351          hbase    3w      REG              253,1 25778031203      43040 /var/log/hbase/gc.log-201812251535 (deleted)
java      20302  5354          hbase    3w      REG              253,1 25778031203      43040 /var/log/hbase/gc.log-201812251535 (deleted)
java      20302  5988          hbase    3w      REG              253,1 25778031203      43040 /var/log/hbase/gc.log-201812251535 (deleted)
java      20302 12680          hbase    3w      REG              253,1 25778031203      43040 /var/log/hbase/gc.log-201812251535 (deleted)
java      20302 15047          hbase    3w      REG              253,1 25778031203      43040 /var/log/hbase/gc.log-201812251535 (deleted)
java      20302 16379          hbase    3w      REG              253,1 25778031203      43040 /var/log/hbase/gc.log-201812251535 (deleted)
java      20302 16380          hbase    3w      REG              253,1 25778031203      43040 /var/log/hbase/gc.log-201812251535 (deleted)
 
  1. 清空已经删除但未释放的大文件
    如果要让大文件彻底删除,通常需要重启打开文件的进程,但是有时在线服务不方便重启,影响服务的可用性。
    这个时候可以通过 /proc/${pid}/fd 信息找到打开这个文件的系统 fd,然后通过 fd 来清空文件
# ll /proc/20302/fd/ |grep 201812251535
l-wx------ 1 hbase hadoop 64 Oct 18 21:02 3 -> /var/log/hbase/gc.log-201812251535 (deleted)
# 清空文件
# echo > /proc/20302/fd/3
posted @ 2021-06-16 19:29  行者·无疆  阅读(284)  评论(0编辑  收藏  举报