Linux基础
以下命令及参数,均在 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]
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 中的命令
操作
注销客户端
# 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
# 查看端口占用
netstat -lnp
lsof -i :80
lsof -i :80-1000 #范围
# 检查端口 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
查看已删除未释放文件
一般是 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/.
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
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