Linux
[TOC]
Linux
By:weimenghua
Date:2022.05.14
Description:Linux 操作系统
环境变量
基本提示符,对于 root 用户是#,对于普通用户是$
- 使用 echo 命令查看单个环境变量。例如:echo $PATH
- 使用 env 查看所有环境变量。例如:env
- 使用 set 查看所有本地定义的环境变量。 常用的环境变量:
- PATH 决定了 shell 将到哪些目录中寻找命令或程序
- HOME 当前用户主目录
- USER 当前用户
- HISTSIZE 历史记录数
- LOGNAME 当前用户的登录名
- HOSTNAME 指主机的名称
- SHELL 当前用户 Shell 类型
- LANGUGE 语言相关的环境变量,多语言可以修改此环境变量
- MAIL 当前用户的邮件存放目录
Linux 下获取当前的目录
Linux 下获取当前的目录:$(cd dirname $0
;pwd)
dirname $0,取得当前执行的脚本文件的父目录
cd dirname $0
,进入这个目录(切换当前工作目录)
pwd,显示当前工作目录(cd 执行后的)
在使用的过程中需注意此事项:命令中“`”不是英文的单引号,而是英文输入法下的“~”同一个按键下面的那个符号。
Linux 设置开机自启
/etc/rc.local 映射文件是/etc/rc.d/rc.local。(前提:chmod +x /etc/rc.d/rc.local)
在/etc/rc.local 或者/etc/rc.d/rc.local 添加执行脚本语句, 举例:sh /tmp/demo.sh。
Linux 查看防火墙状态
- getenforce
- /usr/sbin/sestatus -v SELinux 有三种工作模式,分别是:
- enforcing:强制模式。违反 SELinux 规则的行为将被阻止并记录到日志中
- permissive:宽容模式。违反 SELinux 规则的行为只会记录到日志中,一般为调试用
- disabled:关闭 SELinux SELinux 工作模式可以在 /etc/selinux/config 中设定, 如果想从 disabled 切换到 enforcing 或者 permissive 的话,需要重启系统,反过来也一样, enforcing 和 permissive 模式可以通过 setenforce 1|0 命令快速切换
Linux 修改主机名
- vim /etc/hostname(ubuntu) 或者 /etc/sysconfig/network(RHEL、CentOS 和 Fedora), 添加:HOSTNAME=主机名, hostname 新主机名, 然后用 ssh 重新登录,就会显示新的主机名。
- hostnamectl set-hostname 新主机名, 重启:reboot。
Linux 字体颜色
- 浅蓝色:表示链接文件
- 灰色:表示其他文件
- 绿色:表示可执行文件
- 红色:表示压缩文件
- 蓝色:表示目录
- 红色闪烁:表示链接的文件有问题了
- 黄色:表示设备文件,包括 block,char,fifo
清除缓存 buff 或者 cache
通过 free -m 查看到 buff/cache 的值比较大,通过下面的命令,清除缓存。
echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches
常见服务对应的端口
查看远端的服务是否开通:tcp 8000 端口,比如查看 baidu.com 是否开通:telnet baidu.com 8000。
- 21 FTP
- 22 SSH
- 25 SMTP
- 3306 MYSQL
- 873 rsync
- 161 snmp
- 111 rpc
- 3389 RPC
- 80 HTTP
- 443 HTTPS
- 110 POP3
- 53 DNS
- 514 syslog
Linux 开放端口
$ iptables -I INPUT -p tcp --dport 80 -j DROP
$ iptables -I INPUT -p tcp -s 1.2.3.4 --dport 80 -j ACCEPT
这里仅允许 1.2.3.4 访问本地主机的 80 端口。
对于类似 docker run -d -p 80:80 shaowenchen/demo-whoami 运行的服务,上面的方法无效,需要在 DOCKER-USER 链中添加规则。
Docker 会将 iptables 规则添加到 DOCKER 链中,如果需要在 Docker 之前添加规则需要添加到 DOCKER-USER 链中
$ iptables -I DOCKER-USER -i ens192 ! -s 1.2.3.4 -p tcp --dport 80 -j DROP
ens192 是本地的网卡,这里仅允许 1.2.3.4 访问本地主机的 80 端口。
$ yum install -y iptables-services
$ systemctl restart iptables.service
如果需要在主机重启之后 iptables 设置,依然有效,需要安装 iptables-services 并保存
$ yum install -y iptables-services
$ service iptables save
设置 SSH 会话时长
vim /etc/ssh/sshd_config
设置 ClientAliveInterval 参数为一个较小的值,例如 300(表示 300 秒)。
设置 ClientAliveCountMax 参数为一个较大的值,例如 0(表示没有限制)。 保存并关闭配置文件。
重新加载 SSH 服务器配置,以使更改生效,可以使用 service ssh reload 或 systemctl reload sshd 命令。ClientAliveInterval:指定服务器向客户端发送保持活动消息的时间间隔。如果在指定的时间内没有活动,服务器将向客户端发送一个保持活动的消息。
ClientAliveCountMax:指定服务器在关闭连接之前允许客户端没有响应的次数。设置为 0 表示没有限制。
其它
history 命令记录序号、日期时间、用户、登录IP及对应执行的命令
vim /etc/profile
export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S who am i | awk '{print $1,$5}'
"
source /etc/profile
rsync+inotify-tools 实时同步数据
安装 raync
yum install rsync -y
同步整个目录A到目录B
rsync -avz 本地目录A 本地目录B
只同步目录A下的数据到目录B
rsync -avz 本地目录A/ 本地目录B
安装 gcc 依赖
yum install gcc* -y
下载 inotify-tools
wget https://sourceforge.net/projects/inotify-tools/files/inotify-tools/3.13/inotify-tools-3.13.tar.gz
解压 inotify-tools
tar -zxvf inotify-tools-3.13.tar.gz
--prefix 指定安装目录
cd inotify-tools
./configure --prefix=/usr/local/inotify && make && make install
设置软连接
ln -s /usr/local/inotify/bin/inotifywait /usr/sbin/
ln -s /usr/local/inotify/bin/inotifywatch /usr/sbin/
编写同步脚本
cat >> rsync.sh << EOF
#!/bin/bash
while true
do
inotifywait -rq -e modify,create,delete /root/tmp
rsync -avz --delete /root/tmp/ /root/tmp2
done
EOF
执行脚本
chmod u+x rsync.sh
sh rsync.sh
测试
在 tmp 新增文件/文件夹,进入 tmp2 目录查看是否增加文件,如增加则验证成功
Trickle 带宽控制供给
yum install trickle
trickle -V
trickle -d <download-rate> -u <upload-rate> <command> // 1000 KB/s
trickle -d 1000 wget http://10.0.1.25/iso/centos/CentOS-7.7-x86_64-Minimal-1908.iso
trickled 配置:cat /etc/trickled.conf
speedtest 测速工具
安装
sudo yum install speedtest-cli
测速
speedtest-cli
有教程用这个命令,经测试无效
speedtest
WonderShaper 网卡限速工具
安装 注:未安装成功
sudo yum install -y wondersharper epel-release
查看 eth0 当前的状态
wondershaper -s -a eth0
sshx
安装 sshx: curl -sSf https://sshx.io/get | sh,执行 sshx 生成分享链接,点击链接可看见终端并一起协作。
查看 Linux 开放公网的端口
- netstat -tuln
- ss -tuln
- sudo lsof -i -P -n | grep LISTEN
- sudo nmap -sT -O localhost
Linux 性能基准测试工具及测试方法
参考资料
git clone https://github.com/clay-wangzhi/bench.git
bash bench.sh
- CPU Super_Pi 是一种用于计算圆周率π的程序,通常用于测试计算机性能和稳定性。它的主要用途是测量系统的单线程性能,因为它是一个单线程应用程序。
yum -y install bc
time echo "scale=5000; 4*a(1)" | bc -l -q &>1
结果分析,看 real 即可,时间越短,性能越好
sysbench 素数计算
yum -y install sysbench
测试方法: 启动4个线程计算10000事件所花的时间
sysbench cpu --threads=4 --events=10000 --time=0 run
结果分析,看 total time 即可,时间越短,性能越好
- 内存 内存带宽(stream) Stream测试是内存测试中业界公认的内存带宽性能测试基准工具
编译安装 STREAM
yum -y install gcc gcc-gfortran
git clone https://github.com/jeffhammond/STREAM.git
cd STREAM/
make
指定线程数
export OMP_NUM_THREADS=1
./stream_c.exe
结果分析,看 Copy、Scale、Add、Triad,数值越大,性能越好
- 磁盘 IO 磁盘读、写iops,iops:磁盘的每秒读写次数,这个是随机读写考察的重点
# 安装
yum -y install fio
# 测试随机读 IOPS
fio --ioengine=libaio --bs=4k --direct=1 --thread --time_based --rw=randread --filename=/home/randread.txt --runtime=60 --numjobs=1 --iodepth=1 --group_reporting --name=randread-dep1 --size=1g
# 测试随机写 IOPS
fio --ioengine=libaio --bs=4k --direct=1 --thread --time_based --rw=randwrite --filename=/home/randwrite.txt --runtime=60 --numjobs=1 --iodepth=1 --group_reporting --name=randread-dep1 --size=1g
# 结果分析,看 IOPS 即可,值越大,性能越好
ssh 远程服务器报错
报错:kex_exchange_identification: read: Connection reset by peer Connection reset by 114.67.240.27 port 22
解决:
方式一:ssh-keygen -R 114.67.240.27
方式二:
vim /etc/hosts.allow
sshd:ALL
systemctl restart sshd
umask
umask 用于设置默认的文件权限掩码。文件权限掩码决定了在创建新文件或目录时,所设置的默认权限模式。umask 命令的作用是从当前文件权限掩码中减去给定的权限位,以设置新文件或目录的默认权限。它可以用来限制新文件的默认权限,以确保安全性和隐私。
查看当前的文件权限掩码值:umask
将文件权限掩码设置为 027。新创建的文件将具有权限模式 640,新创建的目录将具有权限模式 750:umask 027
永久更改文件权限掩码值: 在用户的配置文件(如 ~/.bashrc、~/.bash_profile)中添加以下行:umask 027
文件权限掩码的值是一个八进制数,用于指定要从默认权限模式中屏蔽的权限位。常见的权限位包括:
- 0:没有权限被屏蔽。
- 2:屏蔽写权限。
- 7:屏蔽所有者权限、组权限和其他用户权限。
示例
文件umask 0022 是将文件权限掩码设置为 0022 的命令。
文件权限掩码是一个八进制数,用于指定默认文件和目录权限中要屏蔽的权限位。在 0022 的情况下,权限掩码指定要屏蔽的权限位为 w(写入权限)。
具体影响如下:
- 对于新创建的文件,默认权限模式为 666,然后从中减去权限掩码 0022,结果为 644。因此,新创建的文件将具有所有者可读写,其他用户只能读取的权限。
- 对于新创建的目录,默认权限模式为 777,然后从中减去权限掩码 0022,结果为 755。因此,新创建的目录将具有所有者可读写执行,其他用户只能读取和执行的权限。
Linxu 发行版
Linux 黑话解释:什么是 Linux 发行版?为什么它被称为“发行版”?
Linux 发行版是一个由 Linux 内核、GNU 工具、附加软件和软件包管理器组成的操作系统,它也可能包括显示服务器和桌面环境,以用作常规的桌面操作系统。
这个术语之所以是 “Linux 发行版”,是因为像 Debian、Ubuntu 这样的机构“发行”了 Linux 内核以及所有必要的软件及实用程序(如网络管理器、软件包管理器、桌面环境等),使其可以作为一个操作系统使用。
swp
交换文件(.swp)的存在是为了在编辑器会话意外中断的情况下保护数据。再次打开相同的文件进行编辑时,编辑器会检测到交换文件的存在,并询问是否恢复之前的编辑会话。