Varobj

2019-07-06

Linux常用操作



目前开发 & 服务器选用 CentOS7.4, 所以大多都基于 CentOS7 的笔记, 断断续续更新..

查看 CentOS 版本信息

$ cat /etc/redhat-release

CentOS Linux release 7.4.1708 (Core)

永久保存 PATH Environment

# add to ~/.profile or ~/.bashrc
export PATH="$PATH:/path/to/dir"

# then
source ~/.bashrc

查看系统信息

# 查看cpu信息
$ cat /proc/cpuinfo
# 查看内存大小
$ free -h
# 查看磁盘分区使用情况
$ df -h
# 查看指定目录使用大小
$ du -sh /path/to/dir
# 查看系统运行时间,用户,负载
$ uptime

查看系统运行情况

$ cat /proc/stat
# cpu 的情况
cpu  8109 43 9128 3464507 346 0 206 0 0 0
cpu0 2250 4 2988 864134 96 0 70 0 0 0
cpu1 2328 15 2875 865419 92 0 38 0 0 0
cpu2 1821 4 1148 867713 106 0 69 0 0 0
cpu3 1710 18 2116 867239 50 0 28 0 0 0
intr .. # intr 系统中断信息
ctxt 3916366 # 上下文切换信息
btime 1558787935 # 系统启动时的时间戳
processes 4907
procs_running 1
procs_blocked 0
softirq 2320853 1 1126785 1752 132469 24642 0 1574 453100 0 580530

用户相关信息

# 查看系统所有的用户
$ cut -d: -f1 /etc/password
# 查看系统所有的用户组
$ cut -d: -f1 /etc/group
# 查看活动用户
$ w
# 查看指定用户信息
$ id {userName}
# 查询所有系统服务
$ chkconfig --list
# 查看所有安装的软件包
$ rpm -qa

如何修改 hostname

$ hostnamectl set-hostname newName
$ hostname
$ /etc/init.d/network restart

系统 Systemd 服务

# centos7 systemctl 管理的服务目录在
# 系统服务
$ ll /usr/lib/systemd/system/
# 用户服务
$ ll /usr/lib/systemd/user/

# 查看当前所有的 units (服务)状态
$ systemctl list-unit-files

# 开启自启动服务
$ systemctl enable nginx

# 开启之后 以下目录会创建一个软连接
$ ll /etc/systemd/system/multi-user.target.wants/

Centos7 防火墙

# 关闭防火墙
$ systemctl stop firewalld

# 禁用防火墙
$ systemctl disable firewalld

# 查看默认的 zone
$ firewall-cmd --get-default-zone

# 查看容许的服务
$ firewall-cmd --list-services

# 查看容许的端口
$ firewall-cmd --list-ports

# 永久开 http 服务(即打开 8080 端口)
$ firewall-cmd --zone=public --permanent --add-port=8080/tcp
# 然后需要重启防火墙
$ systemctl restart firewalld

时间与网络同步

$ yum install ntp ntpdate
$ systemctl enable ntpd
$ systemctl start ntpd

OpenSSL 生成 RSA 秘钥对

$ openssl genrsa -out keypair.pem 2048
$ openssl rsa -in keypair.pem -pubout -out publickey.crt

Centos7.4 安全日志

$ cat /var/log/secure
# 查看 密码变更
$ grep 'password changed' /var/log/secure
# 查看 密码登录失败
$ grep 'Failed password' /var/log/secure

OpenSSL 随机密码

$ openssl rand -base64 8

系统缺少 zlib

deploy.php 需要 zlib 扩展

# debian
apt install zlib1g zlib1g-dev

# centos
yum install zlib-devel

/dev/sda 是什么?

/dev/ 在 Unix 中是所有 device 设备文件目录 sd 表示 SCSI device 的缩写。 SCSI = 小型计算机系统接口,包含硬盘、光驱等等接口 sd 后面的字母 a 或者 b、c 等表示设备等次序,sda 就表示第一块设备 a 后面可以跟上数字,表示当前设备的第几个分区,/dev/sda1 表示第一块设备的第一个分区

nginx 负载均衡的后端如何获取真实的用户 IP

  1. 非负载均衡的时候,Nginx 的配置(include fastcgi_params)把 fastcgi_params 文件中指定的变量传递给 PHP 全局变量 $GLOBALS['_SERVER'] 或者 $_SERVER 中,其中有个 $remote_addr (nginx) to REMOTE_ADDR (PHP) 表示客户端地址, 所以,非负载均衡的时候时,PHP 通过 $_SERVER['REMOTE_ADDR'] 获取用户 IP,注意 REMOTE_ADDR 不是必定存在的。

  2. Nginx 负载均衡的时候。负载均衡的 Nginx 配置一般是这样的

    
    upstream backend {
    ...
    server api.com weight=1;
    ...
    }

server { ... location / { proxy_pass http://api.com; proxy_set_header X-Real-IP $remote_addr; } }

其中最后一行 `$remote_addr` 为 Nginx 变量,通过 `proxy_set_header` 添加 http 头的方式传递到 php 的 `$_SERVER` 中,获取时,中划线转成下划线,需要额外加上 HTTP_

$real_ip = $_SERVER['HTTP_X_REAL_IP'] ?? '';



`X-Real-IP` 可以任意自定义。