Linux基础:修订间差异
无编辑摘要 |
无编辑摘要 |
||
(未显示同一用户的43个中间版本) | |||
第4行: | 第4行: | ||
==== DNS ==== | ==== DNS ==== | ||
<nowiki>#</nowiki> systemctl restart | * /etc/resolv.conf | ||
<nowiki>#</nowiki> systemctl restart NetworkManager,一般新版本不修改上面文件。 | |||
<nowiki>#</nowiki> BOOTPROTO='static'时,网卡中DNS配置有效。 | <nowiki>#</nowiki> BOOTPROTO='static'时,网卡中DNS配置有效。 | ||
nameserver 114.114.114.114 | |||
nameserver 202.106.0.20 | |||
nameserver 202.106.196.115 | |||
nameserver 10.10.119.251 | |||
nameserver 10.10.119.252 | |||
nameserver 10.55.2.158 | |||
domain my.com 指定本地的域名,在没有设置search的情况下,search默认为domain的值。 | |||
search google.com bing.com ... 可用来指定多个域名,中间用空格或tab键隔开。当访问的域名不能被DNS解析时,将该域名加上search指定的参数,重新请求DNS,直到被正确解析或试完search指定的列表为止。如:ping abc不通时,继续ping abc.google.com… | |||
domain my.com 指定本地的域名,在没有设置search的情况下,search默认为domain的值。 | |||
search google.com bing.com ... 可用来指定多个域名,中间用空格或tab键隔开。当访问的域名不能被DNS解析时,将该域名加上search指定的参数,重新请求DNS,直到被正确解析或试完search指定的列表为止。如:ping abc不通时,继续ping abc.google.com… | |||
===== Ubuntu 20.04 LTS ===== | ===== Ubuntu 20.04 LTS ===== | ||
此版本的 DNS 需要修改: | 此版本的 DNS 需要修改: | ||
/etc/systemd/resolved.conf | * /etc/systemd/resolved.conf | ||
DNS=8.8.8.8 114.114.114.114 | |||
DNS=8.8.8.8 114.114.114.114 | |||
<nowiki>#</nowiki> systemctl restart systemd-resolved,服务重启后覆盖 /etc/resolv.conf | |||
===== 外网不通的解决办法 ===== | ===== 外网不通的解决办法 ===== | ||
* 设置IP和子网掩码 | * 设置IP和子网掩码 | ||
ifconfig ens33 192.168.1.10 netmask 255.255.255.0 | |||
ifconfig | |||
* 设置网关 | * 设置网关 | ||
route add default gw 192.168.1.1 | |||
route add default gw 192.168.1.1 | |||
* 设置DNS | * 设置DNS | ||
# 参考上一词条 | |||
==== LANG ==== | ==== LANG ==== | ||
/etc/locale.conf | /etc/locale.conf | ||
LANG="en_US.UTF-8" | |||
LANG="en_US.UTF-8" | <nowiki>#</nowiki>LANG="zh_CN.UTF-8" | ||
<nowiki>#</nowiki>LANG="zh_CN.UTF-8" | |||
==== 设置系统时区为上海 ==== | ==== 设置系统时区为上海 ==== | ||
timedatectl set-timezone Asia/Shanghai | timedatectl set-timezone Asia/Shanghai | ||
<nowiki>#</nowiki> timedatectl status | |||
<nowiki>#</nowiki> timedatectl status | <nowiki>#</nowiki> timedatectl | ||
<nowiki>#</nowiki> timedatectl list-timezones | |||
<nowiki>#</nowiki> timedatectl | |||
<nowiki>#</nowiki> timedatectl list-timezones | |||
==== 将硬件时钟调整为与本地时钟一致, 0 为设置为 UTC 时间 ==== | ==== 将硬件时钟调整为与本地时钟一致, 0 为设置为 UTC 时间 ==== | ||
timedatectl set-local-rtc 1 | timedatectl set-local-rtc 1 | ||
<nowiki>#</nowiki> cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime | |||
[root@g1-ch-1 clickhouse-server]# ll /etc/localtime | |||
lrwxrwxrwx. 1 root root 25 Oct 21 19:12 /etc/localtime -> ../usr/share/zoneinfo/GMT | |||
[root@g1-ch-1 clickhouse-server]# ll /etc/localtime | [root@g1-ch-1 clickhouse-server]# timedatectl set-timezone Asia/Shanghai | ||
[root@g1-ch-1 clickhouse-server]# ll /etc/localtime ? ? ? ? ? ? ? ? ? ? | |||
lrwxrwxrwx. 1 root root 25 Oct 21 19:12 /etc/localtime -> ../usr/share/zoneinfo/GMT | lrwxrwxrwx 1 root root 35 Mar 2 10:29 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai | ||
<nowiki>#</nowiki> sync time | |||
[root@g1-ch-1 clickhouse-server]# timedatectl set-timezone Asia/Shanghai | IP=10.10.139.69 | ||
<nowiki>#</nowiki> ssh $IP 'yum -y install ntpdate' | |||
[root@g1-ch-1 clickhouse-server]# ll /etc/localtime | ssh $IP 'ntpdate cn.pool.ntp.org' | ||
lrwxrwxrwx 1 root root 35 Mar 2 10:29 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai | |||
<nowiki>#</nowiki> sync time | |||
IP=10.10.139.69 | |||
<nowiki>#</nowiki> ssh $IP 'yum -y install ntpdate' | |||
ssh $IP 'ntpdate cn.pool.ntp.org' | |||
==== 网卡 ==== | ==== 网卡 ==== | ||
第118行: | 第91行: | ||
==== 修改主机名称 ==== | ==== 修改主机名称 ==== | ||
hostname[ctl set-hostname AAA] | |||
=== | ==== 创建用户 ==== | ||
# 创建目录 -m | |||
useradd -m bi | |||
==== | ====Firewall==== | ||
# 查看 | |||
firewall-cmd --list-all | |||
# 防火墙操作:停止、开启、禁止、启用 | |||
systemctl CMD firewalld.service | |||
CMD: start stop enable disable | |||
==== | # 开放端口 | ||
# --permanent 永久,重启后有效 | |||
firewall-cmd --zone=public --add-port=80/tcp --permanent | |||
firewall-cmd --zone=public --add-port=8000-9200/tcp --permanent | |||
firewall-cmd --zone=public --add-port=32000-32099/udp --permanent | |||
==== | # 转发 | ||
firewall-cmd | |||
# 允许防火墙伪装IP | |||
--query-masquerade | |||
--add-masquerade | |||
# 80 -> 10.10.137.16:8080 | |||
firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=10.10.137.16:toport=8080 | |||
=== | =====Centos 6===== | ||
iptables -L -n | |||
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 22 | |||
=====Centos 7===== | |||
IP=10.10.137.16 | |||
iptables -I INPUT -s ${IP} ? -p tcp --dport ${PORT} -j ACCEPT | |||
iptables-save > /etc/sysconfig/iptables # 保存规则 | |||
iptables-restore < /etc/sysconfig/iptables # 重新加载规则 | |||
# 配置防火墙允许指定ip访问端口 | |||
PORT=80 | |||
# 增加规则 | |||
iptables -I INPUT -p tcp --dport ${PORT} -j DROP | |||
# 查看规则 | |||
iptables -L | |||
==== | ====关闭 SELinux==== | ||
SSH 证书访问需要关闭 SELinux | |||
# /etc/selinux/config | |||
SELINUX=disabled | |||
# getenforce/setenforce查看和设置SELinux的当前工作模式 | |||
# 临时关闭 | |||
setenforce 0 | |||
==== ssh tunnel ==== | |||
# /etc/ssh/sshd_config | |||
GatewayPorts yes | |||
AllowTcpForwarding yes | |||
# systemctl restart sshd | |||
===== Option ===== | |||
* -C 数据压缩 | |||
* -f 后台操作,只有当提示用户名密码的时候才转向前台 | |||
* -N 不执行远端命令,只是端口转发时这条命令很有用处 | |||
* -g 允许远端主机连接本地转发端口 | |||
* -L 本地端口映射到远端主机端口 | |||
* -R 远端主机端口映射到本地端口 | |||
===== 在端口转发主机上执行 (-L) ===== | |||
# 105.207 : 207:80 --> 47:18000 | |||
ssh -C -f -N -g -L 80:10.10.105.47:18000 [email protected] | |||
===== 在内网主机上执行 (-R) ===== | |||
# 137.16 : 187:32022 --> 202:3389 | |||
ssh -C -f -N -g -R 32022:10.10.137.202:3389 [email protected] >> ~/log/log_ssh_g-inf.log | |||
===== TCPKeepAlive ===== | |||
ssh -o StrictHostKeyChecking=no \ | |||
-o ExitOnForwardFailure=yes -o TCPKeepAlive=yes \ | |||
-Nf -R 32022:10.10.137.202:3389 [email protected] -p 22 &>/dev/null | |||
上面三个连接不稳定的时候,连接还在,但服务连不通。 | |||
若远程一直连着,基本上可以保证服务可用,但偶尔也会无响应。 | |||
==== sodu ==== | |||
# 将用户加入 sudo 组 | |||
sudo usermod -aG sudo bi | |||
-.OR.- | |||
# visudo | |||
# 在root ALL=(ALL) ALL下增加一行: | |||
root ALL=(ALL) ALL | |||
bi ALL=(ALL) NOPASSWD: ALL | |||
# 伪装成另一个用户运行 | |||
CMD=gpstate | |||
sudo runuser -l gpadmin -c ${CMD} | |||
==== 检查是否安装 ==== | ==== 登录后自动执行 ==== | ||
* /etc/motd | |||
加入待显示的内容,如:Welcome to Ubuntu 20.04 LTS | |||
* /etc/profile.d/ | |||
自动执行目录下的 sh 脚本,如:redislabs 会放入 env 脚本,不使用时需要手工移除,否则报:No such file or directory | |||
* profile | |||
自动执行 /etc/profile、~/.profile、~/.bash_profile 中的命令 | |||
==== journal ==== | |||
# /var/log/journal/ | |||
journalctl --vacuum-size=100M | |||
# systemctl restart systemd-journald | |||
===操作=== | |||
====注销客户端==== | |||
# w 查看登客户端 TTY | |||
pkill -kill -t pts/2 | |||
# kill 掉某个用户的所有进程 | |||
pkill -u oracle | |||
# killall 特征字进程 | |||
killall test1* # kill 掉所有 test1 开头的进程 | |||
killall -u oracle # kill 掉某个用户的所有进程 | |||
killall -o 5h # kill 掉超过 5 小时的所有进程 | |||
killall -I XXXX # 忽略 XXXX 大小写 | |||
* killall -s XXX # killall -l 查询支持的信号 | |||
## 使用 -i 或 --interactive 参数,来让 killkill 在停止每个进程之前提示 | |||
# ps -ef | grep cloudera | grep -v grep ## | cut -c 9-15 | xargs kill -9 # 不好用,垃圾 | |||
====检查是否安装==== | |||
<nowiki>#</nowiki> yum install epel-release | <nowiki>#</nowiki> yum install epel-release | ||
第159行: | 第235行: | ||
<nowiki>#</nowiki> 如果是以源码包自己编译安装的,只能看可执行文件是否存在了,上面方法看不到这种源码形式安装的包。如果是以root用户安装的,可执行程序通常都在/sbin:/usr/bin目录下。一般用户安装在/usr/local/下,有些在/opt下 | <nowiki>#</nowiki> 如果是以源码包自己编译安装的,只能看可执行文件是否存在了,上面方法看不到这种源码形式安装的包。如果是以root用户安装的,可执行程序通常都在/sbin:/usr/bin目录下。一般用户安装在/usr/local/下,有些在/opt下 | ||
==== 查看linux系统是物理机还是虚拟机 ==== | ====查看linux系统是物理机还是虚拟机==== | ||
lspci | lspci | ||
第172行: | 第248行: | ||
yum install dmidecode* | yum install dmidecode* | ||
==== OS Version ==== | ====OS Version==== | ||
cat /etc/redhat-release | cat /etc/redhat-release | ||
第185行: | 第261行: | ||
<nowiki>#</nowiki> upgrade 升级所有包,不改变软件设置和系统设置,系统版本升级,内核不改变 | <nowiki>#</nowiki> upgrade 升级所有包,不改变软件设置和系统设置,系统版本升级,内核不改变 | ||
==== info ==== | ====info==== | ||
cat /proc/cpuinfo | cat /proc/cpuinfo | ||
cat /proc/meminfodmidecode -s system-product-name | cat /proc/meminfodmidecode -s system-product-name | ||
==== 显示分区基本信息 ==== | ====显示分区基本信息==== | ||
fdisk -l | fdisk -l | ||
lsblk -f | lsblk -f | ||
==== 挂载 ==== | ====挂载==== | ||
fdisk /dev/sdb(p,n/p/...,w,q) | parted /dev/sdb(mkpart) | ||
-.OR.- | |||
fdisk /dev/sdb(p,n/p/...,w,q) | |||
mkfs.xfs /dev/sdb1 | mkfs.xfs /dev/sdb1 | ||
mkdir /u01 | |||
mkdir /u01 | mount /dev/sdb1 /u01 | ||
mount /dev/sdb1 /u01 | # 启动项 /etc/fstab | ||
/dev/sdb1 /u01 xfs defaults 0 0 | |||
/dev/sdb1 /u01 xfs defaults 0 0 | |||
====测试硬盘速度==== | |||
dd if=/dev/zero of=/tmp/test bs=1M count=10240 | |||
dd if=/dev/zero of=/tmp/test bs=4096 count=2621440 | |||
<nowiki>#</nowiki> 检查 centos 服务开启情况 | <nowiki>#</nowiki> 检查 centos 服务开启情况 | ||
第420行: | 第342行: | ||
==== # /dev/shm ==== | ====# /dev/shm==== | ||
这个目录是linux下一个利用内存虚拟出来的一个目录,这个目录中的文件都是保存在内存中 | 这个目录是linux下一个利用内存虚拟出来的一个目录,这个目录中的文件都是保存在内存中 | ||
第440行: | 第362行: | ||
mount -o remount tmpfs | mount -o remount tmpfs | ||
第479行: | 第390行: | ||
tree . -L 2 | tree . -L 2 | ||
==== # 加密 ==== | ====# 加密==== | ||
openssl des3 -salt -k PASSWD | openssl des3 -salt -k PASSWD | ||
第490行: | 第401行: | ||
<nowiki>#</nowiki> dd if=${FILEPATH}.des3 |openssl des3 -d -k Bidb1123 > ${FILEPATH} | <nowiki>#</nowiki> dd if=${FILEPATH}.des3 |openssl des3 -d -k Bidb1123 > ${FILEPATH} | ||
== | ===资源占用=== | ||
==== | ====按内存排序==== | ||
ps -aux | sort -k4nr | head -n5 | ps -aux | sort -k4nr | head -n5 | ||
top (然后按下M,注意大写) | |||
top | ====按 CPU 排序==== | ||
ps -aux | sort -k3nr | head -n5 | |||
top (然后按下P) | |||
==== | ====磁盘IO==== | ||
<nowiki>#</nowiki> 如果 %util 接近 100%,I/O请求过多,磁盘I/O已经满负荷 | |||
iostat -X 6 | |||
iostat -m 6 | |||
iotop | |||
====CPU==== | |||
sar -u 1 5 | |||
sar -P ALL -u 1 5 | |||
sar -P 0 -u 1 5 | |||
==== | ====Network==== | ||
vnstat -h | |||
vnstat -d | |||
# 可以监控的可用接口 | |||
vnstat --iflist | |||
# 选择要监控的接口 | |||
vnstat -u -i eth0 | |||
====查看目录占用空间==== | |||
du -h / --max-depth=1 | |||
# 隐藏目录 .[!.]* | |||
====查看端口占用==== | |||
netstat -lnp | |||
lsof -i :80 | |||
lsof -i :80-1000 | |||
====查看已删除未释放文件==== | |||
一般是 df -h 与 du -ms /* 差距很大时,可以检查已删除未释放文件。一般在删除文件时,如果有进程打开了这个文件,一直未关闭此文件句柄,那么就不会释放该文件。 | |||
lsof -n |grep deleted | |||
查出后,关闭进程即可释放文件。 | |||
====网络==== | |||
iptop -i ens3 -n -P | |||
sar -n DEV 6 | |||
==== | ===CMD=== | ||
==== | ====rz/sz 上传文件==== | ||
<nowiki>#</nowiki> 超大文件传输会有问题 | |||
<nowiki>#</nowiki> yum install lrzsz | |||
==== | ====strings==== | ||
查看 lib 文件包内容 | |||
strings /lib64/libstdc++.so.6 |grep CXXABI_ | |||
==== # | ====Swap==== | ||
<nowiki>#</nowiki> | swapoff -a | ||
swapon -a | |||
swapon -s | |||
<nowiki>#</nowiki> 增加 /etc/fstab | |||
/dev/mapper/cl-swap ? ? swap ? ? ? ? ? ? ? ? ?? swap ?? defaults ? ? ?? 0 0 | |||
<nowiki>#</nowiki> SWAP文件 | |||
dd if=/dev/zero of=/data/swap1 bs=1M count=1024 | |||
mkswap /data/swapfile | |||
chmod 600 /data/swapfile | |||
swapon /data/swapfile | |||
<nowiki>#</nowiki> swapoff /data/swapfile | |||
====CP==== | |||
-p 保留原文件时间 | |||
-a 保留属性 | |||
====SCP==== | |||
默认拷贝软连接 | |||
-p 保留原文件的修改时间,访问时间和访问权限 | |||
-r 递归复制整个目录 | |||
-v 详细方式显示输出 | |||
-q 不显示传输进度条 | |||
大写: | |||
-P port 指定目标端的 SSH 端口号 | |||
-C 允许压缩(将-C标志传递给ssh,打开压缩功能) | |||
scp -P 32024 -rp * [email protected]:/data/dump/. | |||
scp root@mc3:/home/bi/Downloads/W* . | |||
# Error: zsh: no matches found | |||
# 原因: zsh 试图将 * 通配符展开,但在本地却未找到对应文件,于是出现“no matches”的错误。 | |||
# 解决: | |||
# 1. 在 .zshrc 中增加 setopt nonomatch,让 zsh 匹配失败时不报错并使用原本内容。 | |||
# 2. 将 * 号部分用引号引起来,或者用 \ 阻止 zsh 转义 | |||
====rsync 同步==== | |||
服务端和客户端均需安装 | |||
rsync -e 'ssh -p 32024' -rvlt /var/www/html/work_bk [email protected]:/var/www/html/ | |||
-r 递归,复制目录 | |||
-v 显示复制的过程 | |||
-l 同步软连接需要指定 | |||
-t 基于文件的修改时间进行对比,只同步修改时间不同的文件 | |||
-a 保持所有文件属性,如果文件属性变了,认为是不同文件 | |||
-u 选项忽略重复的数据 | |||
--exclude 'name1' 排除目录或文件 | |||
--exclude-from='e.lis' 排除 e.lis 中指定的目录或文件 | |||
==== chattr ==== | |||
防止文件被修改(包括 root) | |||
chattr +i ~/.ssh/authorized_keys | |||
lsattr * # 查看 | |||
----i---------e----- authorized_keys | |||
只能追加数据,不能删除 | |||
chattr +a /var/log/messages | |||
==== tree ==== | |||
# apt install tree | |||
tree --dirsfirst -L 1 /var | |||
==== comm ==== | |||
comm [-123i] T S | |||
比较 T、S 两个文件,按排序结果顺序比较,出现不同即终止。结果显示成三列(1-只出现在 T,2-只出现在 S,3-均有) | |||
i 不区分大小写 | |||
-n 去掉 n 列 | |||
=== tmp === | |||
==== CentOS 查看系统信息 ==== | |||
<nowiki>#</nowiki> 进程 | |||
ps -ef # 查看所有进程 | |||
# | top # 实时显示进程状态(M=memory sort, P=CPU sort) | ||
<nowiki>#</nowiki> 用户: | |||
w # 查看活动用户 | |||
id <用户名> # 查看指定用户信息 | |||
last # 查看用户登录日志 | |||
/ | cut -d: -f1 /etc/passwd # 查看系统所有用户 | ||
cut -d: -f1 /etc/group # 查看系统所有组 | |||
crontab -l # 查看当前用户的计划任务 | |||
====# rsz为实际内存占用==== | |||
ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' | sort -nrk5 | |||
第617行: | 第608行: | ||
swapon -s | swapon -s | ||
==== # swappiness ==== | ====# swappiness==== | ||
<nowiki>#</nowiki> 默认 vm.swappiness 值是60。将值改小,可以降低系统对于swap的写入。而将值设为0,并不会禁止对swap的使用,而是使系统对于 swap 的写入尽可能的少(当剩余空闲内存低于vm.min_free_kbytes limit时,使用交换空间)。 | <nowiki>#</nowiki> 默认 vm.swappiness 值是60。将值改小,可以降低系统对于swap的写入。而将值设为0,并不会禁止对swap的使用,而是使系统对于 swap 的写入尽可能的少(当剩余空闲内存低于vm.min_free_kbytes limit时,使用交换空间)。 | ||
第690行: | 第681行: | ||
find / -name pgbench 2>/dev/null | find / -name pgbench 2>/dev/null | ||
2024年8月29日 (四) 09:44的最新版本
以下命令及参数,均在 Centos7 环境下测试通过。
配置
DNS
- /etc/resolv.conf
# systemctl restart NetworkManager,一般新版本不修改上面文件。
# BOOTPROTO='static'时,网卡中DNS配置有效。
nameserver 114.114.114.114 nameserver 202.106.0.20 nameserver 202.106.196.115 nameserver 10.10.119.251 nameserver 10.10.119.252 nameserver 10.55.2.158
domain my.com 指定本地的域名,在没有设置search的情况下,search默认为domain的值。 search google.com bing.com ... 可用来指定多个域名,中间用空格或tab键隔开。当访问的域名不能被DNS解析时,将该域名加上search指定的参数,重新请求DNS,直到被正确解析或试完search指定的列表为止。如:ping abc不通时,继续ping abc.google.com…
Ubuntu 20.04 LTS
此版本的 DNS 需要修改:
- /etc/systemd/resolved.conf
DNS=8.8.8.8 114.114.114.114
# systemctl restart systemd-resolved,服务重启后覆盖 /etc/resolv.conf
外网不通的解决办法
- 设置IP和子网掩码
ifconfig ens33 192.168.1.10 netmask 255.255.255.0
- 设置网关
route add default gw 192.168.1.1
- 设置DNS
# 参考上一词条
LANG
/etc/locale.conf
LANG="en_US.UTF-8" #LANG="zh_CN.UTF-8"
设置系统时区为上海
timedatectl set-timezone Asia/Shanghai # timedatectl status # timedatectl # timedatectl list-timezones
将硬件时钟调整为与本地时钟一致, 0 为设置为 UTC 时间
timedatectl set-local-rtc 1 # cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
[root@g1-ch-1 clickhouse-server]# ll /etc/localtime lrwxrwxrwx. 1 root root 25 Oct 21 19:12 /etc/localtime -> ../usr/share/zoneinfo/GMT [root@g1-ch-1 clickhouse-server]# timedatectl set-timezone Asia/Shanghai [root@g1-ch-1 clickhouse-server]# ll /etc/localtime ? ? ? ? ? ? ? ? ? ? lrwxrwxrwx 1 root root 35 Mar 2 10:29 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai # sync time IP=10.10.139.69 # ssh $IP 'yum -y install ntpdate' ssh $IP 'ntpdate cn.pool.ntp.org'
网卡
# 配置 /etc/sysconfig/network-scripts/
# 状态
# ip addr
# ifconfig
ethtool em0
# sar -n DEV 6
rxpck/s:每秒钟接收的数据包
txpck/s:每秒钟发送的数据包
rxbyt/s:每秒钟接收的字节数
txbyt/s:每秒钟发送的字节数
rxcmp/s:每秒钟接收的压缩数据包
txcmp/s:每秒钟发送的压缩数据包
rxmcst/s:每秒钟接收的多播数据包
修改主机名称
hostname[ctl set-hostname AAA]
创建用户
# 创建目录 -m useradd -m bi
Firewall
# 查看 firewall-cmd --list-all # 防火墙操作:停止、开启、禁止、启用 systemctl CMD firewalld.service CMD: start stop enable disable
# 开放端口 # --permanent 永久,重启后有效 firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --zone=public --add-port=8000-9200/tcp --permanent firewall-cmd --zone=public --add-port=32000-32099/udp --permanent
# 转发 firewall-cmd # 允许防火墙伪装IP --query-masquerade --add-masquerade # 80 -> 10.10.137.16:8080 firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=10.10.137.16:toport=8080
Centos 6
iptables -L -n iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 22
Centos 7
IP=10.10.137.16 iptables -I INPUT -s ${IP} ? -p tcp --dport ${PORT} -j ACCEPT iptables-save > /etc/sysconfig/iptables # 保存规则 iptables-restore < /etc/sysconfig/iptables # 重新加载规则 # 配置防火墙允许指定ip访问端口 PORT=80 # 增加规则 iptables -I INPUT -p tcp --dport ${PORT} -j DROP # 查看规则 iptables -L
关闭 SELinux
SSH 证书访问需要关闭 SELinux
# /etc/selinux/config SELINUX=disabled
# getenforce/setenforce查看和设置SELinux的当前工作模式 # 临时关闭 setenforce 0
ssh tunnel
# /etc/ssh/sshd_config GatewayPorts yes AllowTcpForwarding yes # systemctl restart sshd
Option
- -C 数据压缩
- -f 后台操作,只有当提示用户名密码的时候才转向前台
- -N 不执行远端命令,只是端口转发时这条命令很有用处
- -g 允许远端主机连接本地转发端口
- -L 本地端口映射到远端主机端口
- -R 远端主机端口映射到本地端口
在端口转发主机上执行 (-L)
# 105.207 : 207:80 --> 47:18000 ssh -C -f -N -g -L 80:10.10.105.47:18000 [email protected]
在内网主机上执行 (-R)
# 137.16 : 187:32022 --> 202:3389 ssh -C -f -N -g -R 32022:10.10.137.202:3389 [email protected] >> ~/log/log_ssh_g-inf.log
TCPKeepAlive
ssh -o StrictHostKeyChecking=no \ -o ExitOnForwardFailure=yes -o TCPKeepAlive=yes \
-Nf -R 32022:10.10.137.202:3389 [email protected] -p 22 &>/dev/null 上面三个连接不稳定的时候,连接还在,但服务连不通。
若远程一直连着,基本上可以保证服务可用,但偶尔也会无响应。
sodu
# 将用户加入 sudo 组 sudo usermod -aG sudo bi -.OR.- # visudo # 在root ALL=(ALL) ALL下增加一行: root ALL=(ALL) ALL bi ALL=(ALL) NOPASSWD: ALL # 伪装成另一个用户运行 CMD=gpstate sudo runuser -l gpadmin -c ${CMD}
登录后自动执行
- /etc/motd
加入待显示的内容,如:Welcome to Ubuntu 20.04 LTS
- /etc/profile.d/
自动执行目录下的 sh 脚本,如:redislabs 会放入 env 脚本,不使用时需要手工移除,否则报:No such file or directory
- profile
自动执行 /etc/profile、~/.profile、~/.bash_profile 中的命令
journal
# /var/log/journal/ journalctl --vacuum-size=100M # systemctl restart systemd-journald
操作
注销客户端
# w 查看登客户端 TTY pkill -kill -t pts/2 # kill 掉某个用户的所有进程 pkill -u oracle # killall 特征字进程 killall test1* # kill 掉所有 test1 开头的进程 killall -u oracle # kill 掉某个用户的所有进程 killall -o 5h # kill 掉超过 5 小时的所有进程 killall -I XXXX # 忽略 XXXX 大小写 * killall -s XXX # killall -l 查询支持的信号 ## 使用 -i 或 --interactive 参数,来让 killkill 在停止每个进程之前提示 # ps -ef | grep cloudera | grep -v grep ## | cut -c 9-15 | xargs kill -9 # 不好用,垃圾
检查是否安装
# yum install epel-release
rpm -qa
yum list installed
pip list
dpkg -l # deb
# 如果是以源码包自己编译安装的,只能看可执行文件是否存在了,上面方法看不到这种源码形式安装的包。如果是以root用户安装的,可执行程序通常都在/sbin:/usr/bin目录下。一般用户安装在/usr/local/下,有些在/opt下
查看linux系统是物理机还是虚拟机
lspci
lspci | grep -i fibre #光纤卡型号
lspci -vvv | grep Ethernet #万兆网卡显示为10-Gigabit
dmidecode
dmidecode -s system-product-name
yum install dmidecode*
OS Version
cat /etc/redhat-release
# yum install redhat-lsb
lsb_release -a
# update
# update 升级所有包,改变软件设置和系统设置,系统版本内核都升级
# upgrade 升级所有包,不改变软件设置和系统设置,系统版本升级,内核不改变
info
cat /proc/cpuinfo
cat /proc/meminfodmidecode -s system-product-name
显示分区基本信息
fdisk -l
lsblk -f
挂载
parted /dev/sdb(mkpart) -.OR.- fdisk /dev/sdb(p,n/p/...,w,q) mkfs.xfs /dev/sdb1 mkdir /u01 mount /dev/sdb1 /u01 # 启动项 /etc/fstab /dev/sdb1 /u01 xfs defaults 0 0
测试硬盘速度
dd if=/dev/zero of=/tmp/test bs=1M count=10240 dd if=/dev/zero of=/tmp/test bs=4096 count=2621440
# 检查 centos 服务开启情况
chkconfig --list
chkconfig --del xxx
chkconfig --level 35 xxx on/off
#centos图形化界面gnome-shell卡死的解决方法
service gdm stop
kill -9 xargs # gnome-shell的进程
# 查看启动项
systemctl list-unit-files
更改链接/usr/share/zoneinfo目录中的时区来更改时区 /etc/localtime。
rm -rf /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai
# link
如果用 Transmit(v5.82) + Sublime Text(v4121)修改,则硬连接会失效——因为是把源文件删除后重建的,所以会有两个版本的文件。
用 vi/WinSCP(v5.1.5)+UltraEdit-32(v13.20)无此问题。
# 时间同步
# yum install -y ntpdate
ntpdate -u asia.pool.ntp.org
# BIOS时间
hwclock -r
# 回写BIOS时间
hwclock -w
# /dev/shm
这个目录是linux下一个利用内存虚拟出来的一个目录,这个目录中的文件都是保存在内存中
# df -h
tmpfs 32G 84K 32G 1% /dev/shm
# free
total used free shared buff/cache available
Mem: 65808632 762204 64486736 58288 559692 64521436
Swap: 16777212 0 16777212
# vi /etc/fstab
tmpfs /dev/shm tmpfs defaults,size=32g 0 0
mount -o remount tmpfs
# 检查端口 nmap
# (.188:/data/ndb) ./lrun ip_bo "nmap %VAR% -p 10-61000"
# TCP
# HOST=10.10.137.33
nmap ${HOST} -p 10-33000
# UDP
nmap ${HOST} -sU -Pn -p 10-200
-sU:表示udp scan , udp端口扫描
-Pn:不对目标进行ping探测(不判断主机是否在线)(直接扫描端口)
对于udp端口扫描比较慢,扫描完6万多个端口需要20分钟左右
# 查看目录
tree . -L 2
# 加密
openssl des3 -salt -k PASSWD
openssl des3 -d -k PASSWD
# tar -zcvf - ${FILEPATH) | openssl des3 -salt -k ${PASSWD} | dd of=${FILEPATH).des3
# dd if=${FILEPATH}.des3 |openssl des3 -d -k ${PASSWD} | tar zxf -
# dd if=${FILEPATH}.des3 |openssl des3 -d -k Bidb1123 > ${FILEPATH}
资源占用
按内存排序
ps -aux | sort -k4nr | head -n5 top (然后按下M,注意大写)
按 CPU 排序
ps -aux | sort -k3nr | head -n5 top (然后按下P)
磁盘IO
# 如果 %util 接近 100%,I/O请求过多,磁盘I/O已经满负荷 iostat -X 6 iostat -m 6 iotop
CPU
sar -u 1 5 sar -P ALL -u 1 5 sar -P 0 -u 1 5
Network
vnstat -h vnstat -d # 可以监控的可用接口 vnstat --iflist # 选择要监控的接口 vnstat -u -i eth0
查看目录占用空间
du -h / --max-depth=1 # 隐藏目录 .[!.]*
查看端口占用
netstat -lnp lsof -i :80 lsof -i :80-1000
查看已删除未释放文件
一般是 df -h 与 du -ms /* 差距很大时,可以检查已删除未释放文件。一般在删除文件时,如果有进程打开了这个文件,一直未关闭此文件句柄,那么就不会释放该文件。
lsof -n |grep deleted
查出后,关闭进程即可释放文件。
网络
iptop -i ens3 -n -P sar -n DEV 6
CMD
rz/sz 上传文件
# 超大文件传输会有问题 # yum install lrzsz
strings
查看 lib 文件包内容 strings /lib64/libstdc++.so.6 |grep CXXABI_
Swap
swapoff -a swapon -a swapon -s # 增加 /etc/fstab /dev/mapper/cl-swap ? ? swap ? ? ? ? ? ? ? ? ?? swap ?? defaults ? ? ?? 0 0 # SWAP文件 dd if=/dev/zero of=/data/swap1 bs=1M count=1024 mkswap /data/swapfile chmod 600 /data/swapfile swapon /data/swapfile # swapoff /data/swapfile
CP
-p 保留原文件时间 -a 保留属性
SCP
默认拷贝软连接
-p 保留原文件的修改时间,访问时间和访问权限 -r 递归复制整个目录 -v 详细方式显示输出 -q 不显示传输进度条 大写: -P port 指定目标端的 SSH 端口号 -C 允许压缩(将-C标志传递给ssh,打开压缩功能) scp -P 32024 -rp * [email protected]:/data/dump/. scp root@mc3:/home/bi/Downloads/W* . # Error: zsh: no matches found # 原因: zsh 试图将 * 通配符展开,但在本地却未找到对应文件,于是出现“no matches”的错误。 # 解决: # 1. 在 .zshrc 中增加 setopt nonomatch,让 zsh 匹配失败时不报错并使用原本内容。 # 2. 将 * 号部分用引号引起来,或者用 \ 阻止 zsh 转义
rsync 同步
服务端和客户端均需安装
rsync -e 'ssh -p 32024' -rvlt /var/www/html/work_bk [email protected]:/var/www/html/ -r 递归,复制目录 -v 显示复制的过程 -l 同步软连接需要指定 -t 基于文件的修改时间进行对比,只同步修改时间不同的文件 -a 保持所有文件属性,如果文件属性变了,认为是不同文件 -u 选项忽略重复的数据 --exclude 'name1' 排除目录或文件 --exclude-from='e.lis' 排除 e.lis 中指定的目录或文件
chattr
防止文件被修改(包括 root)
chattr +i ~/.ssh/authorized_keys lsattr * # 查看 ----i---------e----- authorized_keys
只能追加数据,不能删除
chattr +a /var/log/messages
tree
# apt install tree tree --dirsfirst -L 1 /var
comm
comm [-123i] T S 比较 T、S 两个文件,按排序结果顺序比较,出现不同即终止。结果显示成三列(1-只出现在 T,2-只出现在 S,3-均有) i 不区分大小写 -n 去掉 n 列
tmp
CentOS 查看系统信息
# 进程
ps -ef # 查看所有进程
top # 实时显示进程状态(M=memory sort, P=CPU sort)
# 用户:
w # 查看活动用户
id <用户名> # 查看指定用户信息
last # 查看用户登录日志
cut -d: -f1 /etc/passwd # 查看系统所有用户
cut -d: -f1 /etc/group # 查看系统所有组
crontab -l # 查看当前用户的计划任务
# rsz为实际内存占用
ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' | sort -nrk5
# sync
如果必须停止系统,则运行sync 命令以确保文件系统的完整性。sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件
# drop_caches
# 系统默认值为0,修改为1、2、3会立刻释放内存,但无法改回0.
drop_caches的详细文档如下:
Writing to this will cause the kernel to drop clean caches, dentries and inodes from memory, causing that memory to become free.
# To free pagecache:
* echo 1 > /proc/sys/vm/drop_caches
# To free dentries and inodes:
* echo 2 > /proc/sys/vm/drop_caches
# To free pagecache, dentries and inodes:
* echo 3 > /proc/sys/vm/drop_caches
As this is a non-destructive operation, and dirty objects are notfreeable, the user should run "sync" first in order to make sure allcached objects are freed.
This tunable was added in 2.6.16.
#回收Swap Used
sync
cat /proc/sys/vm/drop_caches # 可以设为1释放内存
echo 1 > /proc/sys/vm/drop_caches
# 关闭所有交换分区
swapoff -a # 最好后台执行
# 启用
swapon -a
# 启动指定 swap 设备
swapon /dev/mapper/VolGroup00-LogVol01
# 查看当前启用的 swap 设备
swapon -s
# swappiness
# 默认 vm.swappiness 值是60。将值改小,可以降低系统对于swap的写入。而将值设为0,并不会禁止对swap的使用,而是使系统对于 swap 的写入尽可能的少(当剩余空闲内存低于vm.min_free_kbytes limit时,使用交换空间)。
cat /proc/sys/vm/swappiness -OR- sysctl -q vm.swappiness
sysctl vm.swappiness=0 # 临时起作用,重启后恢复
# /etc/sysctl.conf
vm.swappiness=10
#测试硬盘速度
dd if=/dev/zero of=/tmp/test bs=1M count=10240
dd if=/dev/zero of=/tmp/test bs=4096 count=2621440
#块设备信息
# yum install util-linux-ng
lsblk -t
#解决在Linux下面使用sqlplus,上下键,退格键都不能用
# alias sqlplus='rlwrap sqlplus'
rlwrap sqlplus / as sysdba
# mount
# /etc/fstab
# 显示已挂载目录
mount
#以下 mount 远程主机 出现过 df 不了的故障
#mount -t nfs -o vers=3,proto=tcp,nolock m01.bg.5i5j.club:/ /mnt/hdfs
# iconv 编码转换
# -c Silently discard characters that cannot be converted instead of terminating when encountering such characters.
iconv -f utf-8 -t gbk in.txt > out.txt
#硬连接,只适合于文件
# ln source target
#软连接,包括目录
ln -s source target
#硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,起到防止“误删”的功能——因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。
#硬链接说白了就是一个指针,指向文件索引节点,系统并不为它重新分配新的inode。可以用ln命令来建立硬链接。尽管硬链接节省空间,也是Linux系统整合文件系统的传统方式,但是存在一下不足之处:(1)不可以在不同文件系统的文件间建立链接(2)只有超级用户才可以为目录创建硬链接。
#软链接: 软链接克服了硬链接的不足,没有任何文件系统的限制,而且任何用户都可以创建指向目录/文件的符号链接。因而现在更为广泛使用,它具有更大的灵活性,甚至可以跨越不同机器、不同网络对文件进行链接。
# 过滤 find warm
find / -name pgbench 2>/dev/null
# 系统日志文件
/var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一
/var/log/secure 与安全相关的日志信息
/var/log/maillog 与邮件相关的日志信息
/var/log/cron 与定时任务相关的日志信息
/var/log/spooler 与UUCP和news设备相关的日志信息
/var/log/boot.log 守护进程启动和停止相关的日志消息
# 系统信息
uname -a # 查看内核/操作系统/CPU信息
cat /etc/issue
cat /etc/redhat-release # 查看操作系统版本
cat /proc/cpuinfo # 查看CPU信息
hostname # 查看计算机名
lspci -tv # 列出所有PCI设备
lsusb -tv # 列出所有USB设备
lsmod # 列出加载的内核模块
env # 查看环境变量
# 资源
free -m # 查看内存使用量和交换区使用量
df -h # 查看各分区使用情况
du -sh <目录名> # 查看指定目录的大小
grep MemTotal /proc/meminfo # 查看内存总量
grep MemFree /proc/meminfo # 查看空闲内存量
uptime # 查看系统运行时间、用户数、负载
cat /proc/loadavg # 查看系统负载
# 磁盘和分区
mount | column -t # 查看挂接的分区状态
fdisk -l # 查看所有分区
lsblk -f # 文件系统类型
swapon -s # 查看所有交换分区
hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备)
dmesg | grep IDE # 查看启动时IDE设备检测状况
# 网络
ifconfig # 查看所有网络接口的属性
iptables -L # 查看防火墙设置
route -n # 查看路由表
netstat -lntp # 查看所有监听端口
netstat -antp # 查看所有已经建立的连接
netstat -s # 查看网络统计信息
# 服务
chkconfig –list # 列出所有系统服务
chkconfig –list | grep on # 列出所有启动的系统服务
# 程序
rpm -qa # 查看所有安装的软件包
# 解压bz2包
tar -jxvf extundelete-0.2.4.tar.bz2
# 列目录内容
tar -tzvf *tar.gz