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
PS:CentOS 7 默认没有 netstat 命令,需要安装 net-tools 工具,yum install -y net-tools
检查端口被哪个进程占用
netstat -lnpt |grep 80
查看进程的详细信息
ps 15965
中止进程
kill -9 15965
Swap 分区(虚拟内存)管理
Swap 是 Linux 中的虚拟内存,用于扩充物理内存不足而用来存储临时数据存在的。它类似于 Windows 中的虚拟内存。
创建 Swap 分区
查看当前的内存和 Swap 空间大小(默认单位为k, -m 单位为M):
free -m
此处可以看到总内存是 3.7G 左右,Swap 不存在
查看 Swap 信息,包括文件和分区的详细信息,可以使用 swapon -s
或 cat /proc/swaps
命令,如果都没有可以选择手动添加交换分区。注意,OpenVZ 架构的 VPS 是不支持手动添加交换分区的。
-
使用 dd 命令创建一个 swap 交换文件
dd if=/dev/zero of=/home/swap bs=1024 count=1024000
这样就建立一个
/home/swap
的分区文件,大小为 1G,可以自行倍增。
建议 Swap 容量在真实内存容量的 1.5 倍左右,若服务器内存大于 4GB,可设 1-2GB 的固定值
-
制作为 swap 格式文件
mkswap /home/swap
-
再用 swapon 命令把这个文件分区挂载 Swap 分区,完成后可以使用
free -m
命令看一下是否有交换分区
swapon /home/swap
-
为防止重启后 Swap 分区变成 0,要修改
/etc/fstab
文件
vi /etc/fstab
在文件末尾(最后一行)加上
/home/swap swap swap default 0 0
-
最后,赋予 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 的写入尽可能的少,同时尽可能多的使用你的实际内存。
-
在 CentOS 中,swappiness 的默认值是60。通过以下命令可以看到:
cat /proc/sys/vm/swappiness
-
我们可以调整 swappiness 的值到一个合适的参数,从而达到最优化使用 Swap 的目的,这里我将其设为 10。
sysctl vm.swappiness=10
-
但是这只是临时性的修改,在你重启系统后会恢复默认的 60,要永久设置,还需要在 vim 中修改
sysctl.conf
:
vi /etc/sysctl.conf
-
在这个文档最后加入一行
vm.swappiness=10
,保存即可。
删除 Swap 分区
- 先停止 Swap 分区
swapoff /home/swap
- 删除 Swap 分区文件
rm -rf /home/swap
- 删除自动挂载命令
删除sysctl.conf
文件中新增的那一行vm.swappiness=10
,最后保存即可。
修改 hostname(主机名)
在 CentOS 7 中有三种定义的主机名:静态的(static)、瞬态的(transient)、和灵活的(pretty)。静态主机名也称为内核主机名,是系统在启动时从 /etc/hostname
内自动初始化的主机名,瞬态主机名是在系统运行时临时分配的主机名,灵活主机名则允许使用特殊字符的主机名。
- 问题一:输入的大写的主机名怎么都变成了小写?
这是因为在修改静态/瞬态主机名时,任何特殊字符或空白字符会被移除,而提供的参数中的任何大写字母会自动转化为小写。一旦修改了静态主机名,/etc/hostname 将被自动更新。然而,/etc/hosts 不会更新以保存所做的修改,所以你需要手动更新 /etc/hosts。
如果只想修改特定的主机名(静态,瞬态或灵活),可以使用 “--static”,“--transient” 或 “--pretty” 选项。
- 问题二,如何修改主机名是永久生效的?
hostnamectl --static set-hostname hostname
注意,不必重启机器以激活永久主机名修改。上面的命令会立即修改内核主机名。注销并重新登入后在命令行提示来观察新的静态主机名。
- 问题三,如何查看到自己输入的大写主机名?
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 {} \;
其他参数
-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}'
找出已经删除但空间未释放的大文件并清空
- 找出已经删除但磁盘空间未释放的文件
如果文件已经删除,但实际的磁盘空间未释放,这个时候文件句柄 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)
- 清空已经删除但未释放的大文件
如果要让大文件彻底删除,通常需要重启打开文件的进程,但是有时在线服务不方便重启,影响服务的可用性。
这个时候可以通过/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