[TOC]

locale 命令

描述:查看或者设置系统语言的环境变量

#参数
系统信息:
-a, --all-locales 写出可用区域的名称
-m, --charmaps 写出可用字符映射的名称

修改输出格式:
-c, --category-name 写出选中范畴的名称
-k, --keyword-name 写出选中关键字的名称

实际案例:

#示例1.系统语言环境变量设置查看
$locale
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"

#示例2.查看可用的字符集
$locale -a | egrep -n -i "en_US"
233:en_US
234:en_US.iso88591
235:en_US.iso885915
236:en_US.utf8
export LANG=en_US.utf8 #临时生效

#示例3.大写和小写的映射由当前语言环境的 LC_CTYPE 范畴定义
echo $LC_CTYPE
C.UTF-8


getconf 命令

描述:它是个ELF可执行文件,该命令将系统配置变量值写入标准输出用于获取系统信息,在进行LINUX编程中可以提供其帮忙;

基础语法:

#语法
Usage: getconf [-v specification] variable_name [pathname]
getconf -a [pathname]

#参数
-a 标志调用,并写入全部系统配置变量值到标准输出。

系统范围配置变量
描述:系统范围配置变量包含系统各部分中的最小值。

_CS_PATH 	PATH 环境变量值,用以查找命令。
---|---
ARG_MAX 用于一个 exec 子例程的参数的最大长度(以字节为单位),包含环境数据。
BC_BASE_MAX bc 命令使用的 obase 变量允许的最大值。
BC_DIM_MAX bc 命令所允许的一个数组中的最大元素数。
BC_SCALE_MAX bc 命令使用的 scale 变量允许的最大值。
BC_STRING_MAX bc 命令可接受的字符串常量的最大长度。
CHARCLASS_NAME_MAX 字符类名中的最大字节数。
CHAR_BIT 类型 character 的位数。
CHAR_MAX 类型 character 的最大值。
CHAR_MIN 类型 character 的最小值。
CHILD_MAX 每个真实用户标识同时打开进程的最大数量。
CLK_TCK 由 time 子例程返回的每秒钟时钟计数。
COLL_WEIGHTS_MAX 配给在一个语言环境定义文件的 LC_COLLATE 语言环境节中条目的最大权重。
CS_PATH PATH 环境变量值,用以查找命令。
EXPR_NEST_MAX 圆括号内可嵌套的最大表达式数,用于 expr 命令。
INT_MAX 类型的最大值,类型为 int。
INT_MIN 类型的最小值,类型为 int。
LINE_MAX 当实用程序被描述成为处理文本文件时,命令输入行(标准输入或者是其它文件)的最大长度(以字节为单位)。长度包含换行字符的空间。
LONG_BIT 类型中的位数,类型为 long int。
LONG_MAX 类型的最大值,类型为 long int。
LONG_MIN 类型的最小值,类型为 long int。
MB_LEN_MAX 在所有支持的语言环境中一个字符的最大字节数。
NGROUPS_MAX 每个进程中同时补充的最大组标识数。
NL_ARGMAX 在 printf 和 scanf 子例程调用中的数字最大值。
NL_LANGMAX 在一个 LANG 名中最大字节数。
NL_MSGMAX 最大消息数。
NL_NMAX 一个从 N 到 1 整序映射中最大字节数。
NL_SETMAX 最大设置数。
NL_TEXTMAX 一个消息字符串中最大字节数。
NZERO 缺省进程优先级。
OPEN_MAX 在进程中可同时打开的最大文件数。
PATH 用以查找命令的以冒号相隔的路径前缀的序列。
RE_DUP_MAX 当使用间隔符号参数时允许正则表达式重复出现次数的最大值,正如 ed 命令使用的 m 和 n 参数。
SCHAR_MAX 类型的最大值,类型为 signed char。
SCHAR_MIN 类型的最小值,类型为 signed char。
SHRT_MAX 类型的最大值,类型为 short。
SHRT_MIN 类型的最小值,类型为 short。
SSIZE_MAX 一个类型为 ssize_t 的对象的最大值。
STREAM_MAX 一个进程可同时打开的流数。
TMP_MAX 由 tmpnam 子例程生成的唯一路径名的最小数量。一个应用程序可靠调用 tmpnam 子例程的最多次数。
TZNAME_MAX 一个时区名支持的最大字节数(非 TZ 环境变量的长度)。
UCHAR_MAX 类型的最大值,类型为 unsigned char。
UINT_MAX 类型的最大值,类型为 unsigned int。
ULONG_MAX 类型的最大值,类型为 unsigned long int。
USHRT_MAX 类型的最大值,类型为 unsigned short int。
WORD_BIT 字或类型 int 中的位数。
KERNEL_BITMODE 内核的位方式,32 位或 64 位.
REAL_MEMORY 真实内存大小。
HARDWARE_BITMODE 计算机硬件的位方式,32 位或 64 位。
MP_CAPABLE 计算机微处理器容量。


系统标准配置变量
描述:系统标准配置变量包含由一个特殊系统标准所要求的最小值。

  • POSIX、POSIX2_ 和 XOPEN 前缀显示变量包含分别由 POSIX 1003.1、POSIX 1003.2 和 X/Open 系统标准要求的系统特性最小值。
  • 系统标准是系统满足的用来支持特定系统标准的全系统最小值。实际配置值可能超出这些标准。

基础信息:

_POSIX_ARG_MAX 	用于 exec 子例程的参数的最大长度(以字节为长度),包含环境数据。
_POSIX_CHILD_MAX 每个真实用户标识同时打开进程的最大数量。
_POSIX_JOB_CONTROL 如果系统支持作业控制,则值为 1。
_POSIX_LINK_MAX 到单个文件的最大链接数。
_POSIX_MAX_CANON 在终端规范输入队列中的最大字节数。
_POSIX_MAX_INPUT 在终端输入队列中允许的最大字节数。
_POSIX_NAME_MAX 文件名中的最大字节数(不包含终止空字符)。
_POSIX_NGROUPS_MAX 每个进程中同时补充的最大组标识数。
_POSIX_OPEN_MAX 在进程中可同时打开的最大文件数。
_POSIX_PATH_MAX 路径名中的最大字节数。
_POSIX_PIPE_BUF 写入管道时保证成为原子的最大字节数。
_POSIX_SAVED_IDS 值为1。每个进程具有保存的 set-user-ID 和保存的 set-group-ID。
_POSIX_SSIZE_MAX 可存进一个类型为 ssize_t 对象的最大值。
_POSIX_STREAM_MAX 一个进程可同时打开的流数。
_POSIX_TZNAME_MAX 一个时区名支持的最大字节数(非 TZ 环境变量的长度)。
_POSIX_VERSION 操作系统遵守的 POSIX 1 标准(C 语言绑定)的版本。
_XOPEN_CRYPT 如果系统支持 X/Open 加密功能组则值为 1。
_XOPEN_ENH_I18N 如果系统支持 X/Open 增强国际化功能组则值为 1。
_XOPEN_SHM 如果系统支持 X/Open 共享内存功能组则值为 1。
_XOPEN_VERSION 操作系统所遵守的 X/Open 可移植性指南的版本。
_XOPEN_XCU_VERSION 操作系统所遵守的 X/Open 命令和实用程序规范的版本。
_XOPEN_XPG2 如果系统支持 1987 年 1 月卷 2 的 X/Open 可移植性指南,XVS 系统调用和库,则值为 1,否则为未定义。
_XOPEN_XPG3 如果系统支持 1992 年 2 月 的 X/Open 规范,系统接口和头第三版,则缺省值为 1,否则为未定义。
_XOPEN_XPG4 如果系统支持 1992 年 7 月 的 X/Open CAE 规范,系统接口和头第 4 版,则值为 1,否则为未定义。
POSIX2_BC_BASE_MAX 允许的最大值,用于 obase 变量并使用 bc 命令。
POSIX2_BC_DIM_MAX bc 命令允许数组中的最大元素数。
POSIX2_BC_SCALE_MAX 允许的最大值,用于 scale 变量,执行 bc 命令。
POSIX2_BC_STRING_MAX 可被 bc 命令接受的字符串常量的最大长度。
POSIX2_CHAR_TERM 系统支持至少一个终端类型则值为 1;否则值为 -1。
POSIX2_COLL_WEIGHTS_MAX 配给一个条目的最大权重数目,条目在一个语言环境定义文件中的 LC_COLLATE 语言环境变量中。
POSIX2_C_BIND 如果系统支持 POSIX 2 中的 C 语言绑定选项,则值为 1;否则,值为-1。
POSIX2_C_DEV 如果系统支持 POSIX 2 中的 C 语言开发实用程序则值为 1;否则,值为 -1。
POSIX2_C_VERSION 操作系统所遵守的 POSIX 2 标准(C 语言绑定)的版本。
POSIX2_EXPR_NEST_MAX 圆括号内可嵌套的最大表达式数,用于 expr 命令。
POSIX2_FORT_DEV 如果系统支持 POSIX 2 中的 FORTRAN 开发实用程序选项则值为 1;否则,值为 -1。
POSIX2_FORT_RUN 如果系统支持 POSIX 2 中的 FORTRAN 运行时实用程序选项则值为 1;否则,值为 -1。
POSIX2_LINE_MAX 当命令被描述成处理文本文件时,一个命令输入行(标准输入或其他文件)的最大字节长度。长度包含换行字符空间。
POSIX2_LOCALEDEF 如果系统支持由 localedef 命令创建语言环境,则值为 1;否则值未定义。
POSIX2_RE_DUP_MAX 当使用间隔计数参数时正则表达式所允许重复出现的最大值,例如带 m 和 n 参数使用 ed 命令。
POSIX2_SW_DEV 系统支持软件开发实用程序选项则值为 1;否则,值为 -1。
POSIX2_UPE 如果系统支持 POSIX 2 中用户可移植实用程序选项,则值为 1;否则,值为 -1。
POSIX2_VERSION 系统支持的 POSIX 2 标准的最新版本的批准日期。这个日期是一个六位数字,前四位数字表示年份后两位数字表示月份。POSIX 2 标准的不同版本由 IEEE 标准委员会定期批准,批准日期用于区分不同版本。


系统路径配置变量:
该变量值包含在系统中的路径和路径结构信息;

_POSIX_CHOWN_RESTRICTED 	chown() 子例程以适当的特权限制在进程,并且将文件的组标识只更改为进程的有效组标识或辅助组标识之一。如果 PathName 参数引用目录,其返回值应用于除在目录中已存在的或可被创建的目录外的所有文件。
_POSIX_NO_TRUNC 路径名长于变量 NAME_MAX 指定的限定值就会产生错误。如果 PathName 参数引用目录,其返回值应用于目录中的文件名。
_POSIX_VDISABLE 终端特殊字符,定义在 termios.h 文件中,可使用这一字符值禁用。
LINK_MAX 链接一个文件的最大链接数。如果 PathName 参数引用目录,则返回值应用于该目录。
MAX_CANON 在终端规范输入行中的最大字节数。
MAX_INPUT 在终端输入队列有可用空间的最大字节数。
NAME_MAX 文件名中的最大字节数(不包含终止空字符)。如果 PathName 参数引用目录,返回值应用于目录内的文件名。
PATH_MAX 路径名中的最大字节数,包含终止空字符。如果 PathName 参数引用目录,返回值为当指定目录是工作目录时的相对路径名的最大长度。
PIPE_BUF 当写入管道时保证成为原子的最大字节数。如果这个 PathName 参数指向先进先出或是管道,其返回值应用于引用对象。如果 PathName 参数引用目录,返回值应用于任何已存在的或可在目录内创建的先进先出。
DISK_PARTITION 磁盘的物理分区大小。
注:
对于 DISK_PARTITION 路径配置变量,这个 PathName 参数必须指定为之查询信息的磁盘的完整路径。
DISK_SIZE 磁盘大小以兆字节为单位。
注:
对于 DISK_SIZE 路径配置变量,这个 PathName 参数必须指定为之查询信息的磁盘的完整路径。

基础实例:

#获取系统所有变量信息

#查看系统内存分页大小
getconf PAGE_SIZE

#linux是32位还是64位最简单的方法
getconf LONG_BIT

#获取系统类型所占
$getconf CHAR_BIT
8

#参数关键配置文件
/usr/bin/getconf #包含一个 getconf 命令。
/usr/include/limits.h #定义系统配置变量。
/usr/include/unistd.h #定义系统配置变量。


chsh 命令

描述:切换当前shell终端为zsh/或者其他shell

基础示例:

#查看shell列表
$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
/bin/zsh

#切换shell为zsh,重启后,查看当前shell
$ chsh -s /bin/zsh
Changing shell for root.
Shell changed.

WeiyiGeek# echo $SHELL
/bin/zsh


getenforce 命令

SELinux是Linux系统上一个常见的安全软件,如果熟悉它的规则,可以用它来为Linux系统新增一道保障;
SELinux一共有3种状态,分别是Enforcing,Permissive和Disabled状态。

  • 第一种是默认状态,表示强制启用,
  • 第二种是宽容的意思,即大部分规则都放行。
  • 第三种是禁用,即不设置任何规则

操作实例:

#方式1.---------------通过图像进行管理----------------------
#我们需要安装SELinux的图形管理工具,命令是:
yum install policycoreutils-gui -y
#安装完成后,执行一个命令启动gui管理工具,命令是:
system-config-selinux


#方式2.临时生效
$getenforce #查看一下SELinux的状态,默认情况下一般都是Enforcing状态,也就是强制启用的意思
Enforcing

usage: setenforce [ Enforcing | Permissive | 1 | 0 ]
#只能通过setenforce命令来设置前面两种状态,而如果想修改为disable状态,需要修改配置文件,同时重启系统
$setenforce 2

#方式3.通过修改设置文件,让某个配置永久生效,配置文件的位置是:
vim /etc/selinux/config
SELINUX = disable
#或者
sed -i "s#SELINUX=enforcing#SELINUX = disable#g" /etc/selinux/config

ulimit 命令

描述:Ulimit 用于限制当前shell内进程的资源使用,并发线程限制;
ulimit到底有怎样的运用
假设:有这样一种情况,当一台 Linux 主机上同时登陆了 10 个人,在系统资源无限制的情况下,这 10 个用户同时打开了 500 个文档,而假设每个文档的大小有 10M,这时系统的内存资源就会受到巨大的挑战。

用途:用于限制 shell 启动进程所占用的资源,支持以下各种类型的限制:所创建的内核文件的大小、进程数据块的大小、Shell 进程创建文件的大小、内存锁住的大小、常驻内存集的大小、打开文件描述符的数量、分配堆栈的最大大小、CPU 时间、单个用户的最大线程数、Shell 进程所能使用的最大虚拟内存。同时它支持硬资源和软资源的限制。

  • 作为临时限制:ulimit 可以作用于通过使用其命令登录的 shell 会话,在会话终止时便结束限制,并不影响于其他 shell 会话。
  • 长期的固定限制:ulimit 命令语句又可以被添加到由登录 shell 读取的文件中,作用于特定的shell 用户。
#语法:
ulimit(选项)

-a:显示目前资源限制的设定;
-c <core文件上限>:设定core文件的最大值,单位为区块;
-d <数据节区大小>:程序数据节区的最大值,单位为KB;
-f <文件大小>:shell所能建立的最大文件,单位为区块;
-H:设定资源的硬性限制,也就是管理员所设下的限制;
-m <内存大小>:指定可使用内存的上限,单位为KB;
-n <文件数目>:指定同一时间最多可开启的文件数;
-p <缓冲区大小>:指定管道缓冲区的大小,单位512字节;
-s <堆叠大小>:指定堆叠的上限,单位为KB;
-S:设定资源的弹性限制;
-t <CPU时间>:指定CPU使用时间的上限,单位为秒;
-u <程序数目>:用户最多可开启的程序数目;
-v <虚拟内存大小>:指定可使用的虚拟内存上限,单位为KB。
#全局配置文件 :/etc/security/limits
<domain><type><item><value>

实际案例:

#示例1.查看系统资源进程使用限制
ulimit -a #查看默认值
# core file size (blocks, -c) 0
# data seg size (kbytes, -d) unlimited
# scheduling priority (-e) 0
# file size (blocks, -f) unlimited
# pending signals (-i) 7962
# max locked memory (kbytes, -l) 64
# max memory size (kbytes, -m) unlimited
# open files (-n) 1024 #此种参数
# pipe size (512 kbytes, -p) 8
# POSIX message queues (kbytes, -q) 819200
# real-time priority (-r) 0
# stack size (kbytes, -s) 8192
# cpu time (seconds, -t) unlimited
# max user processes (-u) 7962
# virtual memory (kbytes, -v) unlimited
# file locks (-x) unlimited


#示例2.限制系统参数设置
ulimit -s 100 #限制堆栈大小
ulimit -m 5000 -v 5000 #限制shell内存使用
ulimit -n 900000 #限制文件90万

性能优化

  1. linux 修改open files 数
    概要:linux系统默认open files数目为1024, 有时应用程序会报Too many open files的错误,是因为open files 数目不够,修改ulimit和file-max,特别是提供大量静态文件访问的web服务器缓存服务器(如squid), 更要注意这个问题。
    设置ulimit和file-max两者之间的关系差别:
  • file-max:/proc/sys/fs/file-max,是设置系统所有进程一共可以打开的文件数量,同时一些程序可以通过setrlimit调用,设置每个进程的限制,如果得到大量使用完文件句柄的错误信息,是应该增加这个值也就是说这项参数是系统级别的。
  • ulimit:即设置当前shell以及由它启动的进程的资源限制。
    显然,对服务器来说file-max, ulimit都需要设置,否则就可能出现文件描述符用尽的问题;

修改方法:

#1.修改file-max文件或者内核 
#下面面2种重启机器后会恢复为默认值
echo 6553560 > /proc/sys/fs/file-max
sysctl -w "fs.file-max=6553560"

# vim /etc/sysctl.conf, 加入以下内容,重启生效
fs.file-max = 6553560


#2. 修改ulimit的open file,系统默认的ulimit对文件打开数量的限制是1024
ulimit -HSn 102400 #这只是在当前终端有效退出之后,open files又变为默认值。当然也可以写到/etc/profile中,因为每次登录终端时,都会自动执行/etc/profile
# vim /etc/security/limits.conf #加入以下配置,重启即可生效
* soft nofile 65535
* hard nofile 65535

补充:

  • 附录1.为了让一个程序的open files数目扩大,可以在启动脚本前面加上ulimit -HSn 102400命令。但当程序是一个daemon时,可能这种方法无效因为没有终端。
  • 附录2.如果某项服务已经启动,再动态调整ulimit是无效的,特别是涉及到线上业务就更麻烦了,这时可以考虑通过修改/proc/程序pid/limits来实现动态修改!

WeiyiGeek.ssh服务limit设置


udevadm 命令

描述:它控制 systemd-udevd 的运行时行为,请求内核事件、管理事件队列并且提供简单的调试机制,udevadm 需要命令和命令特定的操作。

语法基础:

udevadm info [OPTIONS] [DEVPATH|FILE] #查询sysfs或udev数据库
-q --query=TYPE Query device information:
name Name of device node
symlink Pointing to node
path sysfs device path
property The device properties
all All values

基础示例:

#示例:查询sysfs或udev数据库中的硬件信息
$udevadm info -q all -n /dev/sda2
P: /devices/pci0000:00/0000:00:15.0/0000:03:00.0/host2/target2:0:0/2:0:0:0/block/sda/sda2
N: sda2
S: disk/by-id/lvm-pv-uuid-WYci3Y-yQO9-eU0R-Dzmu-ccUH-Lhns-rLhVnJ
S: disk/by-path/pci-0000:03:00.0-scsi-0:0:0:0-part2
E: DEVLINKS=/dev/disk/by-id/lvm-pv-uuid-WYci3Y-yQO9-eU0R-Dzmu-ccUH-Lhns-rLhVnJ /dev/disk/by-path/pci-0000:03:00.0-scsi-0:0:0:0-part2