stty
修改终端命令行的相关设置
补充说明
stty命令 修改终端命令行的相关设置。
语法
stty(选项)(参数)
选项
-a:以容易阅读的方式打印当前的所有配置;
-g:以stty可读方式打印当前的所有配置。
参数
终端设置:指定终端命令行的设置选项。
实例
在命令行下,禁止输出大写的方法:
stty iuclc #开启
stty -iuclc #恢复
在命令行下禁止输出小写:
stty olcuc #开启
stty -olcuc #恢复
打印出终端的行数和列数:
stty size
改变Ctrl+D的方法:
stty eof "string"
系统默认是Ctrl+D来表示文件的结束,而通过这种方法,可以改变!
屏蔽显示:
stty -echo #禁止回显
stty echo #打开回显
测试方法:
stty -echo;read;stty echo;read
忽略回车符:
stty igncr #开启
stty -igncr #恢复
定时输入:
timeout_read()
{
timeout=$1
old_stty_settings=`stty -g` #save current settings
stty -icanon min 0 time 100 #set 10seconds,not 100seconds
eval read varname #=read $varname
stty "$old_stty_settings" #recover settings
}
更简单的方法就是利用read命令的-t选项:
read -t 10 varname
su
用于切换当前用户身份到其他用户身份
补充说明
su命令 用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码。
语法
su(选项)(参数)
选项
-c<指令>或--command=<指令>:执行完指定的指令后,即恢复原来的身份;
-f或——fast:适用于csh与tsch,使shell不用去读取启动文件;
-l或——login:改变身份时,也同时变更工作目录,以及HOME,SHELL,USER,logname。此外,也会变更PATH变量;
-m,-p或--preserve-environment:变更身份时,不要变更环境变量;
-s<shell>或--shell=<shell>:指定要执行的shell;
--help:显示帮助;
--version;显示版本信息。
参数
用户:指定要切换身份的目标用户。
实例
变更帐号为root并在执行ls指令后退出变回原使用者:
su -c ls root
变更帐号为root并传入-f选项给新执行的shell:
su root -f
变更帐号为test并改变工作目录至test的家目录:
su -test
sudo
以其他身份来执行命令
补充说明
sudo命令 用来以其他身份来执行命令,预设的身份为root。在/etc/sudoers中设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。
语法
sudo(选项)(参数)
选项
-b:在后台执行指令;
-E:继承当前环境变量
-h:显示帮助;
-H:将HOME环境变量设为新身份的HOME环境变量;
-k:结束密码的有效期限,也就是下次再执行sudo时便需要输入密码;。
-l:列出目前用户可执行与无法执行的指令;
-p:改变询问密码的提示符号;
-s<shell>:执行指定的shell;
-u<用户>:以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份;
-v:延长密码有效期限5分钟;
-V :显示版本信息。
参数
指令:需要运行的指令和对应的参数。
实例
$ sudo su -
# env | grep -E '(HOME|SHELL|USER|LOGNAME|^PATH|PWD|TEST_ETC|TEST_ZSH|TEST_PRO|TEST_BASH|TEST_HOME|SUDO)'
这个命令相当于使用root超级用户重新登录一次shell,只不过密码是使用的当前用户的密码。而且重要是,该命令会 重新加载/etc/profile文件以及/etc/bashrc文件等系统配置文件,并且还会重新加载root用户的$SHELL环境变量所对应的配置文件 ,比如:root超级用户的$SHELL是/bin/bash,则会加载/root/.bashrc等配置。如果是/bin/zsh,则会加载/root/.zshrc等配置,执行后是完全的root环境。
$ sudo -i
# env | grep -E '(HOME|SHELL|USER|LOGNAME|^PATH|PWD|TEST_ETC|TEST_ZSH|TEST_PRO|TEST_BASH|TEST_HOME|SUDO)'
这个命令基本与 sudo su - 相同,执行后也是root超级用户的环境,只不过是多了一些当前用户的信息。
$ sudo -s
# env|grep -E '(HOME|SHELL|USER|LOGNAME|^PATH|PWD|TEST_ETC|TEST_ZSH|TEST_PRO|TEST_BASH|TEST_HOME|SUDO)' --color
这个命令相当于 以当前用户的$SHELL开启了一个root超级用户的no-login的shell,不会加载/etc/profile等系统配置 。所以/etc/profile文件中定义的TEST_ETC环境变量就看不到了,但是会加载root用户对应的配置文件,比如root用户的$SHELL是/bin/zsh,那么会加载/root/.zshrc配置文件,执行完后,不会切换当前用户的目录。
配置sudo必须通过编辑/etc/sudoers文件,而且只有超级用户才可以修改它,还必须使用visudo编辑。之所以使用visudo有两个原因,一是它能够防止两个用户同时修改它;二是它也能进行有限的语法检查。所以,即使只有你一个超级用户,你也最好用visudo来检查一下语法。
visudo默认的是在vi里打开配置文件,用vi来修改文件。我们可以在编译时修改这个默认项。visudo不会擅自保存带有语法错误的配置文件,它会提示你出现的问题,并询问该如何处理,就像:
>>> sudoers file: syntax error, line 22 <<
此时我们有三种选择:键入“e”是重新编辑,键入“x”是不保存退出,键入“Q”是退出并保存。如果真选择Q,那么sudo将不会再运行,直到错误被纠正。
sum
计算文件的校验码和显示块数
补充说明
sum命令 用于计算并显示指定文件的校验和与文件所占用的磁盘块数。
语法
sum(选项)(参数)
选项
-r:使用BSD的校验和算法,块大小为1k;
-s:使用system V的校验和算法,块大小为512字节。
参数
文件列表:需要计算和与磁盘块数的文件列表。
实例
计算文件校验码:
[root@localhost ~]# sum insert.sql
00827 12
supervisord
配置后台服务/常驻进程的进程管家工具
安装
# 安装 supervisord
apt-get install supervisor
实例
生成配置文件 /etc/supervisord.conf
[program:app]
command=/usr/bin/gunicorn -w 1 wsgiapp:application
directory=/srv/www
user=www-data
supervisord: 启动 supervisor 服务
supervisorctl start app
supervisorctl stop app
supervisorctl reload # 修改/添加配置文件需要执行这个
下载地址
https://pypi.python.org/pypi/meld3
https://pypi.python.org/pypi/supervisor
suspend
挂起shell的执行。
概要
suspend [-f]
主要用途
-
挂起shell的执行,直到收到
SIGCONT信号。 -
除非使用
-f选项,否则无法对login shell使用。
选项
-f 对login shell执行挂起操作。
返回值
返回成功除非未开启作业控制或发生了错误。
例子
# 打开一个终端,首先获取PID。
echo $$
# 执行挂起命令
suspend
# 再打开一个终端,发送SIGCONT命令
kill -s SIGCONT PID
# 此时之前的终端结束挂起状态,可以正常交互。
注意
bash的作业控制命令包括bg fg kill wait disown suspend。- 该命令需要
set选项monitor处于开启状态时才能执行;查看作业控制状态:输入set -o查看monitor行;执行set -o monitor或set -m开启该选项。 - 该命令是bash内建命令,相关的帮助信息请查看
help命令。
swapoff
关闭指定的交换空间
补充说明
swapoff命令 用于关闭指定的交换空间(包括交换文件和交换分区)。swapoff实际上为swapon的符号连接,可用来关闭系统的交换区。
语法
swapoff(选项)(参数)
选项
-a:关闭配置文件“/etc/fstab”中所有的交换空间。
参数
交换空间:指定需要激活的交换空间,可以是交换文件和交换分区,如果是交换分区则指定交换分区对应的设备文件。
实例
关闭交换分区
swapoff /dev/sda2
swapon
激活Linux系统中交换空间
补充说明
swapon命令 用于激活Linux系统中交换空间,Linux系统的内存管理必须使用交换区来建立虚拟内存。
语法
swapon(选项)(参数)
选项
-a:将/etc/fstab文件中所有设置为swap的设备,启动为交换区;
-h:显示帮助;
-p<优先顺序>:指定交换区的优先顺序;
-s:显示交换区的使用状况;
-V:显示版本信息。
参数
交换空间:指定需要激活的交换空间,可以是交换文件和交换分区,如果是交换分区则指定交换分区对应的设备文件。
实例
mkswap -c /dev/hdb4 (-c是检查有无坏块)
swapon -v /dev/hdb4
swapon -s
Filename type Size Used Priority
/dev/hda5 partition 506008 96 -1
/dev/hdb4 partition 489972 0 -2
sync
用于强制被改变的内容立刻写入磁盘
补充说明
sync命令 用于强制被改变的内容立刻写入磁盘,更新超块信息。
在Linux/Unix系统中,在文件或数据处理过程中一般先放到内存缓冲区中,等到适当的时候再写入磁盘,以提高系统的运行效率。sync命令则可用来强制将内存缓冲区中的数据立即写入磁盘中。用户通常不需执行sync命令,系统会自动执行update或bdflush操作,将缓冲区的数据写 入磁盘。只有在update或bdflush无法执行或用户需要非正常关机时,才需手动执行sync命令。
语法
sync(选项)
选项
-d, --data 只同步文件数据,不同步不必要的元数据
-f, --file-system 同步包含这些文件的文件系统
--help:显示帮助;
--version:显示版本信息。
buffer与cache
- buffer:为了解决写磁盘的效率
- cache:为了解决读磁盘的效率
linux系统为了提高读写磁盘的效率,会先将数据放在一块buffer中。在写磁盘时并不是立即将数据写到磁盘中,而是先写入这块buffer中了。此时如果重启系统,就可能造成数据丢失。
sync命令用来flush文件系统buffer,这样数据才会真正的写到磁盘中,并且buffer才能够释放出来,flush就是用来清空buffer。sync命令会强制将数据写入磁盘中,并释放该数据对应的buffer,所以常常会在写磁盘后输入sync命令来将数据真正的写入磁盘。
如果不去手动的输入sync命令来真正的去写磁盘,linux系统也会周期性的去sync数据。
sysctl
时动态地修改内核的运行参数
补充说明
sysctl命令 被用于在内核运行时动态地修改内核的运行参数,可用的内核参数在目录/proc/sys中。它包含一些TCP/ip堆栈和虚拟内存系统的高级选项, 这可以让有经验的管理员提高引人注目的系统性能。用sysctl可以读取设置超过五百个系统变量。
语法
sysctl(选项)(参数)
选项
-n:打印值时不打印关键字;
-e:忽略未知关键字错误;
-N:仅打印名称;
-w:当改变sysctl设置时使用此项;
-p:从配置文件“/etc/sysctl.conf”加载内核参数设置;
-a:打印当前所有可用的内核参数变量和值;
-A:以表格方式打印当前所有可用的内核参数变量和值。
参数
变量=值:设置内核参数对应的变量值。
实例
查看所有可读变量:
sysctl -a
读一个指定的变量,例如kern.maxproc:
sysctl kern.maxproc kern.maxproc: 1044
要设置一个指定的变量,直接用variable=value这样的语法:
sysctl kern.maxfiles=5000
kern.maxfiles: 2088 -> 5000
您可以使用sysctl修改系统变量,也可以通过编辑sysctl.conf文件来修改系统变量。sysctl.conf看起来很像rc.conf。它用variable=value的形式来设定值。指定的值在系统进入多用户模式之后被设定。并不是所有的变量都可以在这个模式下设定。
sysctl变量的设置通常是字符串、数字或者布尔型。(布尔型用 1 来表示’yes’,用 0 来表示’no’)。
sysctl -w kernel.sysrq=0
sysctl -w kernel.core_uses_pid=1
sysctl -w net.ipv4.conf.default.accept_redirects=0
sysctl -w net.ipv4.conf.default.accept_source_route=0
sysctl -w net.ipv4.conf.default.rp_filter=1
sysctl -w net.ipv4.tcp_syncookies=1
sysctl -w net.ipv4.tcp_max_syn_backlog=2048
sysctl -w net.ipv4.tcp_fin_timeout=30
sysctl -w net.ipv4.tcp_synack_retries=2
sysctl -w net.ipv4.tcp_keepalive_time=3600
sysctl -w net.ipv4.tcp_window_scaling=1
sysctl -w net.ipv4.tcp_sack=1
配置sysctl
编辑此文件:/etc/sysctl.conf