一、常见系统参数配置
(一)用户系统资源限制
文件路径:/etc/security/limits.conf
常见配置:
对appuser做资源限制appuser soft nofile 655360对所有用户做资源限制* soft nofile 655360对用户组做限制@student hard nofile 65535类型:soft 超过阈值告警hard 真正的上限
命令:ulimit
ulimit -a 显示当前所有的资源限制
ulimit -H 设置硬件资源限制 必须卸载n参数前面
ulimit -S 设置软件资源限制
ulimit -n 设置进程最大打开文件描述符数
ulimit -f 设置可以建立的最大文件容量
注意:
- 可以限制通过PAM登录的用户资源使用,但是不对系统服务生效
- 动态的参数同样会写进/pro/sys 目录下
- 很多软件都有推荐的ulimit配置
(二)内核参数配置
文件
内核静态参数配置 /etc/sysctl.conf
例如:
在配置文件中追加:net.ipv4.ip_forward=1
sysctl -p /etc/sysctl.conf 使参数生效
命令
内核运行参数配置 sysctl
内核参数位置:/proc/sys 参数名称是以文件所在的路径,并将 '/' 以 '.' 来取代
例如:/proc/sys/net/ipv4/ip_forward的参数名称为net.ipv4.ip_forward
sysctl -w net.ipv4.ip_forward=1
等价于
echo 1 > /proc/sys/net/ipv4/ip_forward
注意:部分内核参数是不允许修改的,在没清楚参数作用前,变更要谨慎!!!
二、变量与环境变量
(一)变量
可以理解为临时的局部变量,有效范围小
设置变量
FIRST='Hello World!'注意:1) 变量等号左右不能有空格2) 变量由字符和数字组成,但不能用数字开头3) 变量的内容可以用""和''组成,可以拼接和共用"" 内可以包含转义符'' 会原样输出,纯文本\ 在双引号内是转义字符`` 反单引号返回内容命令执行结果$() 同上,返回内容命令执行结果4) $变量名 取值5) 未定义的变量为空
案例:
# echo "$FIRST" # 可以取值
Hello World!# echo '$FIRST' # 原样输出
$FIRST# FIRST="Hello World!" # ! 是特殊字符需要转义
bash: !": event not found
取消变量
unset FIRST
特殊变量
常用特殊变量$ 当前shell的PID? 上一条命令的返回值,0是执行成功,其他值都是不成功echo $$
echo $?
变量的剪切
用例:
time_env=`date "+%Y/%m/%d %H:%m:%S"`echo $time_env
2023/12/26 17:12:16
从前往后剪切# :从第一个字符开始,尝试匹配正则表达式,去掉 <第一个完全满足的最小子串> 例:去掉符合 '*/' 正则表达式的第一个子串,最小匹配echo ${time_env#*/}12/26 17:12:16## : 从第一个字符开始,尝试匹配正则表达式,去掉 <第一个完全满足的最大子串> 贪婪例:去掉符合 '*/' 正则表达式的第一个子串,贪婪匹配echo ${time_env##*/}26 17:12:16
从后往前剪切% :从右往左,尝试匹配正则表达式,去掉 <第一个完全满足的最小子串>echo ${time_env%:*}2023/12/26 17:12%% :从右往左,尝试匹配正则表达式,去掉 <第一个完全满足的最大子串> 贪婪echo ${time_env%%:*}2023/12/26 17
变量的替换
path 的变量内容内的 sbin 取代成大写 SBIN匹配的第一个替换echo ${PATH/sbin/SBIN}匹配的全部替换echo ${PATH//sbin/SBIN}
变量的缺省赋值
这个有用,但是我平时也不用
username=${username-root} 主要是 '-'解释:username 未设置时赋值rootusername=${username:-root} 主要是 ':-'解释:username 未设置或为空时赋值为rootusername=${username+root} 主要是 '+'解释:username 已设置或为空时替换成rootusername=${username:+root} 主要是 ':+'解释:username 已设定为非空字符串时替换为rootvar=${str=expr} 主要是 '=' 解释:str 未设置时,给str 和 var 都赋值exprstr 为空时, 给var 赋值exprvar=${str:=expr}解释:str 未设置或为空,给str 和 var 都赋值exprstr 已设置,给 var 赋值expr
(二)环境变量
分临时环境变量和永久环境变量,也存在所有用户共用和单用户可用的情况
注意:
使用export 声明后,变量就变成环境变量
PATH 追加内容必须要用 ':' 隔开,否则PATH变量异常会导致很多命令不可用,变更PATH要谨慎!不过不会影响內建命令的使用
PATH=$PATH:$new_env案例:将PATH变量置为空(测试,慎用)
# export PATH=''
# ls
bash: ls: No such file or directory此时内置命令可用,即不需要通过PATH找命令路径的命令
# export
临时环境变量退出,再登录就能恢复,注意不要在生产环境测试!!!
设置环境变量
临时环境变量export FIRST='Hello World!'永久环境变量 (把上面临时的写入到配置文件,自动加载)1) 编辑全局环境变量并生效vi /etc/profilesource /etc/profile2)编辑用户下环境变量vi ~/.bashrcsource ~/.bashrc或vi ~/.profilesource ~/.profile
环境变量加载顺序
login shell 登录进来 bash 依次加载顺序是:1) /etc/profile2) /etc/profile.d/*.sh3) /etc/locale.conf4) ~/.bash_profile5) ~/.bashrc6) /etc/bashrc7) 进入bashnologin shell 登录进来 bash 依次加载顺序是:1) ~/.bashrc2) /etc/bashrc
当 ~/.bashrc 被删除后, 由于 PS1 变量没有被赋值,bash 就会如下显示:
-bash-4.2$
可以从/etc/skel/.bashrc 拷贝再自定义恢复
(三)变量与环境变量区别
区别在于环境变量可以被子程序引用,而变量不行,变量可以粗略的理解为局部变量,环境变量可以粗略的理解为全局变量
(四)其他
系统运行时变量
调整进程的oom_score,减小被OOM的概率 [-17, 15],-17表示禁止OOM kill
cat /proc/$$/oom_adj # 查看当前shell的oom参数
/proc/ 里面有很多有意思的东西,暂时没有研究,后续看过了再补充进来。