Linux基础

来自牛奶河Wiki
阿奔讨论 | 贡献2024年1月2日 (二) 14:33的版本 →‎Firewall RULE
跳到导航 跳到搜索

以下命令及参数,均在 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
# Ubuntu 参考上一词条

# /etc/systemd/resolved.conf

DNS=8.8.8.8 114.114.114.114

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]

CentOS 7 Close Firewall

防火墙操作:停止、开启、禁止、启用

systemctl CMD firewalld.service

CMD: start stop enable disable


确认firewalld是否停止

systemctl status firewalld

关闭firewalld的开机自动启动

systemctl disable firewalld

确认firewalld开机自动启动以关闭

systemctl is-enabled firewalld


## iptables

# Close

service iptables stop

# 查看规则

iptables -L

Firewall

# 查看
firewall-cmd --list-all
# 重启
systemctl restart firewalld        # 重启后,未使用 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

关闭 SELinux

SSH 证书访问需要关闭 SELinux

# /etc/selinux/config
SELINUX=disabled
# getenforce/setenforce查看和设置SELinux的当前工作模式
# 临时关闭
setenforce 0

操作

注销客户端

# w 查看登客户端 TTY

pkill -kill -t pts/2

# kill 掉某个用户的所有进程

pkill -u oracle

# killall 特征字进程

# 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

挂载

fdisk /dev/sdb(p,n/p/...,w,q)

parted /dev/sdb(mkpart)

mkfs.xfs /dev/sdb1

mkdir /u01

mount /dev/sdb1 /u01

# 启动项vi /etc/fstab

/dev/sdb1   /u01  xfs   defaults   0 0

List All forward-ports

firewall-cmd --list-all

# systemctl restart firewalld        # 重启后,配置消失

# firewall-cmd --query-masquerade

# --add-masquerade  # 允许防火墙伪装IP

# firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=10.10.137.16:toport=8080

ssh tunnel

# /etc/ssh/sshd_config

GatewayPorts yes

AllowTcpForwarding yes

# systemctl restart sshd

-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

# visudo

# 在root ALL=(ALL)   ALL下增加一行:

## Allow root to run any commands anywhere

root    ALL=(ALL)       ALL
bi      ALL=(ALL)       NOPASSWD: ALL

## 伪装成另一个用户运行

CMD=gpstate
sudo runuser -l gpadmin -c ${CMD}


# 检查 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 -P ALL -u 1 5
 sar -P all -u 1 5
 sar -P 0 -u 1 5

查看目录占用空间

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 选项忽略重复的数据


#### 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