Linux基础:修订间差异

来自牛奶河Wiki
跳到导航 跳到搜索
无编辑摘要
 
(未显示同一用户的32个中间版本)
第30行: 第30行:
===== 外网不通的解决办法 =====
===== 外网不通的解决办法 =====
* 设置IP和子网掩码
* 设置IP和子网掩码
  ifconfig ''ens33'' 192.168.1.10 netmask 255.255.255.0
  ifconfig ens33 192.168.1.10 netmask 255.255.255.0


* 设置网关
* 设置网关
第36行: 第36行:


* 设置DNS
* 设置DNS
  ''# Ubuntu 参考上一词条''
  # 参考上一词条
 
<nowiki>#</nowiki> /etc/systemd/resolved.conf
DNS=8.8.8.8 114.114.114.114


==== LANG ====
==== LANG ====
第94行: 第91行:


==== 修改主机名称 ====
==== 修改主机名称 ====
hostname[ctl set-hostname AAA]
hostname[ctl set-hostname AAA]


==== CentOS 7 Close Firewall ====
==== 创建用户 ====
<nowiki>#</nowiki>防火墙操作:停止、开启、禁止、启用
# 创建目录 -m
useradd -m bi


systemctl CMD firewalld.service
====Firewall====
# 查看
firewall-cmd --list-all
# 防火墙操作:停止、开启、禁止、启用
systemctl CMD firewalld.service
CMD: start stop enable disable


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


<nowiki>#</nowiki> 确认firewalld是否停止
=====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


systemctl status firewalld
====关闭 SELinux====
SSH 证书访问需要关闭 SELinux
# /etc/selinux/config
SELINUX=disabled


<nowiki>#</nowiki> 关闭firewalld的开机自动启动
# getenforce/setenforce查看和设置SELinux的当前工作模式
# 临时关闭
setenforce 0


systemctl disable firewalld
==== ssh tunnel ====
# /etc/ssh/sshd_config
GatewayPorts yes
AllowTcpForwarding yes
# systemctl restart sshd


<nowiki>#</nowiki> 确认firewalld开机自动启动以关闭
===== 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
上面三个连接不稳定的时候,连接还在,但服务连不通。


systemctl is-enabled firewalld
若远程一直连着,基本上可以保证服务可用,但偶尔也会无响应。


==== 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}


<nowiki>##</nowiki> iptables
==== 登录后自动执行 ====
* /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 中的命令


<nowiki>#</nowiki> Close
==== journal ====
# /var/log/journal/
journalctl --vacuum-size=100M
# systemctl restart systemd-journald


service iptables stop
===操作===


<nowiki>#</nowiki> 查看规则
====注销客户端====
# 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 # 不好用,垃圾


==== Firewall RULE ====
====检查是否安装====
 
===== Centos 6 =====
iptables -L -n
 
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 22
 
===== Centos 7 =====
iptables-save    > /etc/sysconfig/iptables  # 保存规则
 
iptables-restore < /etc/sysconfig/iptables  # 重新加载规则
 
<nowiki>#</nowiki> 配置防火墙允许指定ip访问端口
 
PORT=80
 
iptables -I INPUT -p tcp --dport ${PORT} -j DROP
 
 
 
IP=10.10.137.16
 
iptables -I INPUT -s ${IP}   -p tcp --dport ${PORT} -j ACCEPT
 
firewall-cmd --zone=public --add-port=32000-32099/tcp --permanent
 
firewall-cmd --zone=public --add-port=8000-9200/tcp --permanent
 
firewall-cmd --zone=public --add-port=80/tcp --permanent
 
==== 关闭 SELinux ====
vi /etc/selinux/config
 
SELINUX=disabled
 
<nowiki>#</nowiki> getenforce/setenforce查看和设置SELinux的当前工作模式
 
<nowiki>#</nowiki> 临时关闭
 
setenforce 0
 
=== 操作 ===
 
==== 注销客户端 ====
<nowiki>#</nowiki> w 查看登客户端 TTY
 
pkill -kill -t pts/2
 
<nowiki>#</nowiki> kill 掉某个用户的所有进程
 
pkill -u oracle
 
<nowiki>#</nowiki> killall 特征字进程
 
<nowiki>#</nowiki> 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


第194行: 第235行:
<nowiki>#</nowiki> 如果是以源码包自己编译安装的,只能看可执行文件是否存在了,上面方法看不到这种源码形式安装的包。如果是以root用户安装的,可执行程序通常都在/sbin:/usr/bin目录下。一般用户安装在/usr/local/下,有些在/opt下
<nowiki>#</nowiki> 如果是以源码包自己编译安装的,只能看可执行文件是否存在了,上面方法看不到这种源码形式安装的包。如果是以root用户安装的,可执行程序通常都在/sbin:/usr/bin目录下。一般用户安装在/usr/local/下,有些在/opt下


==== 查看linux系统是物理机还是虚拟机 ====
====查看linux系统是物理机还是虚拟机====
lspci
lspci


第207行: 第248行:
yum install dmidecode*
yum install dmidecode*


==== OS Version ====
====OS Version====
cat /etc/redhat-release
cat /etc/redhat-release


第220行: 第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.-
parted /dev/sdb(mkpart)
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
<nowiki>#</nowiki> 启动项vi /etc/fstab
 
/dev/sdb1   /u01  xfs   defaults   0 0
 
=== List All forward-ports ===
firewall-cmd --list-all
 
<nowiki>#</nowiki> systemctl restart firewalld        # 重启后,配置消失
 
<nowiki>#</nowiki> firewall-cmd --query-masquerade
 
<nowiki>#</nowiki> --add-masquerade  # 允许防火墙伪装IP
 
<nowiki>#</nowiki> firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=10.10.137.16:toport=8080
 
=== ssh tunnel ===
<nowiki>#</nowiki> /etc/ssh/sshd_config
 
GatewayPorts yes
 
AllowTcpForwarding yes
 
<nowiki>#</nowiki> systemctl restart sshd
 
-C 数据压缩
 
-f 后台操作,只有当提示用户名密码的时候才转向前台
 
-N 不执行远端命令,只是端口转发时这条命令很有用处
 
-g 允许远端主机连接本地转发端口
 
-L 本地端口映射到远端主机端口
 
-R 远端主机端口映射到本地端口
==== 在端口转发主机上执行 (-L) ====
<nowiki>#</nowiki> 105.207 : 207:80 --> 47:18000
 
ssh -C -f -N -g -L 80:10.10.105.47:18000 [email protected]
 
==== 在内网主机上执行 (-R) ====
<nowiki>#</nowiki> 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 ===
<nowiki>#</nowiki> visudo
 
<nowiki>#</nowiki> 在root ALL=(ALL)   ALL下增加一行:
 
<nowiki>##</nowiki> Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
bi      ALL=(ALL)       NOPASSWD: ALL
 
<nowiki>##</nowiki> 伪装成另一个用户运行
CMD=gpstate
sudo runuser -l gpadmin -c ${CMD}


====测试硬盘速度====
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 服务开启情况
第366行: 第342行:




==== # /dev/shm ====
====# /dev/shm====
这个目录是linux下一个利用内存虚拟出来的一个目录,这个目录中的文件都是保存在内存中
这个目录是linux下一个利用内存虚拟出来的一个目录,这个目录中的文件都是保存在内存中


第386行: 第362行:


mount -o remount tmpfs
mount -o remount tmpfs
<nowiki>#</nowiki> 查看端口占用
netstat -lnp
lsof -i :80
lsof -i :80-1000 #范围




第425行: 第390行:
tree . -L 2
tree . -L 2


==== # 加密 ====
====# 加密====
openssl des3 -salt -k PASSWD
openssl des3 -salt -k PASSWD


第436行: 第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 (然后按下M,注意大写)
====按 CPU 排序====
ps -aux | sort -k3nr | head -n5
top (然后按下P)


==== 按CPU排序 ====
====磁盘IO====
ps -aux | sort -k3nr | head -n5
<nowiki>#</nowiki> 如果 %util 接近 100%,I/O请求过多,磁盘I/O已经满负荷
iostat -X 6
iostat -m 6
iotop


top (然后按下P)
====CPU====
sar -u 1 5
sar -P ALL -u 1 5
sar -P 0 -u 1 5


==== 磁盘IO ====
====Network====
<nowiki>#</nowiki> 如果 %util 接近 100%,I/O请求过多,磁盘I/O已经满负荷
vnstat -h
vnstat -d
# 可以监控的可用接口
vnstat --iflist
# 选择要监控的接口
vnstat -u -i eth0


iostat -X 6
====查看目录占用空间====
du -h / --max-depth=1
# 隐藏目录 .[!.]*


iostat -m 6
====查看端口占用====
netstat -lnp
lsof -i :80
lsof -i :80-1000
====查看已删除未释放文件====
一般是 df -h 与 du -ms /* 差距很大时,可以检查已删除未释放文件。一般在删除文件时,如果有进程打开了这个文件,一直未关闭此文件句柄,那么就不会释放该文件。
lsof -n |grep deleted
查出后,关闭进程即可释放文件。


iotop
====网络====
iptop -i ens3 -n -P
sar -n DEV 6


==== 查看目录占用空间 ====
===CMD===
du -h / --max-depth=1


==== 查看已删除未释放文件 ====
====rz/sz 上传文件====
lsof -n /opt/ |grep deleted
<nowiki>#</nowiki> 超大文件传输会有问题
<nowiki>#</nowiki> yum install lrzsz


==== 网络 ====
====strings====
iptop -i ens3 -n -P
查看 lib 文件包内容
strings /lib64/libstdc++.so.6 |grep CXXABI_


==== rz/sz 上传文件 ====
====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


<nowiki>#</nowiki> yum install lrzsz
====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 转义


<nowiki>#</nowiki> strings
====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


查看 lib 文件包内容
==== tree ====
# apt install tree
tree --dirsfirst -L 1 /var
==== comm ====
comm [-123i] T S
比较 T、S 两个文件,按排序结果顺序比较,出现不同即终止。结果显示成三列(1-只出现在 T,2-只出现在 S,3-均有)
i 不区分大小写
-n 去掉 n 列


strings /lib64/libstdc++.so.6 |grep CXXABI_
=== tmp ===
==== CentOS 查看系统信息 ====
<nowiki>#</nowiki> 进程


==== Swap ====
ps -ef # 查看所有进程


# 回收Swap Used
top # 实时显示进程状态(M=memory sort, P=CPU sort)


swapoff -a
<nowiki>#</nowiki> 用户:


swapon -a
w # 查看活动用户


swapon -s
id <用户名> # 查看指定用户信息


<nowiki>#</nowiki> 增加 /etc/fstab
last # 查看用户登录日志


/dev/mapper/cl-swap     swap                    swap    defaults        0 0
cut -d: -f1 /etc/passwd # 查看系统所有用户


<nowiki>#</nowiki> SWAP文件
cut -d: -f1 /etc/group # 查看系统所有组


dd if=/dev/zero of=/data/swap1 bs=1M count=1024
crontab -l # 查看当前用户的计划任务


mkswap /data/swapfile
====# rsz为实际内存占用====
 
ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' | sort -nrk5
chmod 600 /data/swapfile
 
swapon /data/swapfile
 
<nowiki>#</nowiki> swapoff /data/swapfile




第563行: 第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时,使用交换空间)。


第636行: 第681行:


find / -name pgbench 2>/dev/null
find / -name pgbench 2>/dev/null
==== # SCP ====
<nowiki>#</nowiki> 默认拷贝软连接
-p 保留原文件时间
-a 保留属性
scp -P 32024 -rp * [email protected]:/data/dump/.
==== # rsync 同步 ====
<nowiki>#</nowiki> rsync -e 'ssh -p 32024' -rvlt /var/www/html/work_bk [email protected]:/var/www/html/
-r  递归,复制目录
-v  显示复制的过程
-l  同步软连接需要指定
-t  基于文件的修改时间进行对比,只同步修改时间不同的文件
-a  保持所有文件属性,如果文件属性变了,认为是不同文件
-u  选项忽略重复的数据
<nowiki>####</nowiki> 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





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