Linux运维小技巧
1、修改命令提示符
命令提示符:prompt
[root@localhost ~]#
#管理员
$ 普通用户
显示提示符格式
[root@lb-test3 ~]# echo $PS1
[\u@\h \W]$
修改提示符格式
PS1="\[\e[1;5;41;33m\][\u@\h \W]\\$\[\e[0m\]"
PS1="\[\e[1;32m\][\[\e[0m\]\t \[\e[1;33m\]\u\[\e[36m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$"
\e 控制符\033 \u 当前用户
\h 主机名简称 \H 主机名
\w 当前工作目录 \W 当前工作目录基名
\t 24小时时间格式 \T 12小时时间格式
\! 命令历史数 \# 开机后命令历史数
保存设置
可在 /etc/profile.d 目录下创建以 .sh 为结尾的文件
[14:49:28 root@lb-test3 ~]#vim /etc/profile.d/env.sh
PS1="\[\e[1;34m\][\[\e[0m\]\t \[\e[1;34m\]\u\[\e[34m\]@\h\[\e[1;34m\] \W\[\e[1;34m\]]\[\e[0m\]\\$"
2、修改登录前和登陆后的消息设置
登录前的提示消息在 /etc/issue 文件里设置
[14:13:06 op@lb-test3 ~]$cat /etc/issue
\S
Kernel \r on an \m
登录后的提示消息在 /etc/motd 文件里设置
[14:41:04 op@lb-test3 ~]$ll /etc/motd
-rw-r--r--. 1 root root 0 Jun 7 2013 /etc/motd
3、帮助的使用
whatis命令:显示手册页说明 #刚装好的系统,没有whatis库,需要执行命令生成。
centos6:执行makewhatis
centos7:执行mandb
[14:27:03 op@lb-test3 ~]$type whatis
whatis is /usr/bin/whatis
[14:35:15 op@lb-test3 ~]$whatis rm
rm (1) - remove files or directories
[14:35:30 op@lb-test3 ~]$whatis lshw
lshw (1) - list hardware
内部命令:COMMAND --help 或 man bash
外部命令:1、COMMEAND --help 或 COMMAND -h
2、使用手册(manual)存放在/usr/share/man 关注命令的1、5、8章节
1章节:用户命令
5章节:配置文件格式
8章节:管理类命令
man COMMAND
3、信息页
info COMMAND
4、程序自身的帮助文档
REANME
INSTALL
ChangeLog
/usr/share/doc/ 目录:多数安装了的软件包的子目录,包括了这些软件的相关原理说明
5、程序的官方文档
官方网站:Documentation
http://httpd.apache.org
http://www.nginx.org
https://mariadb.com/kb/en
https://dev.mysql.com/doc/
http://tomcat.apache.org
http://www.python.org
6、发行版的官方文档
http://kbase.redhat.com
http://www.redhat.com/docs
http://access.redhat.com
https://help.ubuntu.com/lts/serverguide/index.html
7、Google等搜索引擎
http://tldp.org Linux文档项目
http://www.slideshare.net 技术类幻灯片
http://www.google.com 搜索技巧
Openstack filetype:pdf
rhca site:redhat.com/docs
https://www.bing.com
https://www.ibm.com/developerworks/cn/linux/
查看man手册页
man [章节] keyword
列出所有帮助
man -a keyword
搜索man手册
man -k keyword 列出所有匹配的页面
使用 whatis 数据库
相当于whatis
man -f keyword
打印man帮助文件的路径
man –w [章节] keyword
帮助手册中的段落说明:
NAME 名称及简要说明
SYNOPSIS 用法格式说明
• [] 可选内容
• <> 必选内容
• a|b 二选一
• { } 分组
• ... 同一内容可出现多次
DESCRIPTION 详细说明
OPTIONS 选项说明
EXAMPLES 示例
FILES 相关文件
AUTHOR 作者
COPYRIGHT 版本信息
REPORTING BUGS bug信息
SEE ALSO 其它帮助参考
4、命令历史,bash的基础特性之一
history命令可以用来查看命令历史用来确认在什么时间使用了什么命令也可以用它来重复执行命令。
当我们登录shell时,会读取命令历史文件中记录下的命令,在家目录的.bash_history文件中,很多黑客在入侵你的服务器后,会清除此文件的内容让你不知道他到底做了什么操作。
登录shell后,新执行的命令是记录在缓存中的,命令会在用户退出时追加到命令历史文件中。
我们可以通过配置用户家目录下的.bashrc或者/etc/profile文件以及/etc/profile.d/NAME.sh,来设置history命令的变量及显示特性。推荐写到/etc/profile.d/NAME.sh里面,对于.bashrc和/etc/profile文件,我们会在以后的系统启动过程中学习。
定制命令历史相关环境变量:
HISTSIZE:shell进程可保留命令历史记录的条数
HISTFILE:持久保存命令历史的文件,默认为~/.bash_history
HISTFILESIZE:命令历史文件记录历史的条数
HISTTIMEFORMAT=“%F %T “ 显示时间
HISTIGNORE=“str1:str2*:… “ 忽略str1命令,str2开头的历史
控制命令历史的记录方式:
环境变量:HISTCONTROL
ignoredups 默认,忽略重复的命令,连续且相同为“重复”
ignorespace 忽略所有以空白开头的命令
ignoreboth 相当于ignoredups, ignorespace的组合
erasedups 删除重复命令
export 变量名="值“
存放在 /etc/profile 或 ~/.bash_profile
重复前一个命令,有4种方法
重复前一个命令使用上方向键,并回车执行
按 !! 并回车执行
输入 !-1 并回车执行
按 Ctrl+p 并回车执行
!:0 执行前一条命令(去除参数)
Ctrl + n 显示当前历史中的下一条命令,但不执行
Ctrl + j 执行当前命令
!n 执行history命令输出对应序号n的命令
!-n 执行history历史中倒数第n个命令
!string 重复前一个以“string”开头的命令
!?string 重复前一个包含string的命令
!string:p 仅打印命令历史,而不执行
!$:p 打印输出 !$ (上一条命令的最后一个参数)的内容
!*:p 打印输出 !*(上一条命令的所有参数)的内容
^string 删除上一条命令中的第一个string
^string1^string2 将上一条命令中的第一个string1替换为string2
!:gs/string1/string2 将上一条命令中所有的string1都替换为 string2
ctrl-r来在命令历史中搜索命令
(reverse-i-search)`’:
Ctrl+g:从历史搜索模式退出
要重新调用前一个命令中最后一个参数
!$ 表示
Esc, .(点击Esc键后松开,然后点击 . 键)
Alt+ .(按住Alt键的同时点击 . 键)
调用历史参数
command !^ 利用上一个命令的第一个参数做cmd的参数
command !$ 利用上一个命令的最后一个参数做cmd的参数
command !* 利用上一个命令的全部参数做cmd的参数
command !:n 利用上一个命令的第n个参数做cmd的参数
command !n:^ 调用第n条命令的第一个参数
command !n:$ 调用第n条命令的最后一个参数
command !n:m 调用第n条命令的第m个参数
command !n:* 调用第n条命令的所有参数
command !string:^ 从命令历史中搜索以 string 开头的命令,并获取它的第一 个参数
command !string:$ 从命令历史中搜索以 string 开头的命令,并获取它的最后一个参数
command !string:n 从命令历史中搜索以 string 开头的命令,并获取它的第n 个参数
command !string:* 从命令历史中搜索以 string 开头的命令,并获取它的所有参数
5、命令别名
显示当前shell进程所有可用的命令别名
~]# alias
定义别名NAME,其相当于执行命令VALUE
~]# alias NAME='VALUE'
在命令行中定义的别名,仅对当前shell进程有效
如果想永久有效,要定义在配置文件中
仅对当前用户:~/.bashrc
对所有用户有效:/etc/bashrc
编辑配置给出的新配置不会立即生效
bash进程重新读取配置文件
source /path/to/config_file
. /path/to/config_file
撤消别名:unalias
unalias [-a] name [name ...]
-a 取消所有别名
如果别名同原命令同名,如果要执行原命令,可使用
\ALIASNAME
“ALIASNAME”
‘ALIASNAME’
command ALIASNAME
/path/commmand
6、screen命令使用,需要先安装工具
1、在一个终端虚拟多个屏幕窗口,预防误操作关闭窗口
创建新screen窗口:
screen
输入screen,打开一个窗口,并执行ping命令,并直接关闭窗口。
再次打开一个终端,显示所有已经打开的screen会话
screen -ls
[15:32:47 op@lb-test3 ~]$screen -ls
There is a screen on:
22452.pts-0.lb-test3 (Detached)
1 Socket in /var/run/screen/S-op.
恢复某screen会话
screen -r [SESSION]
[15:32:59 op@lb-test3 ~]$screen -r
64 bytes from 104.193.88.123 (104.193.88.123): icmp_seq=188 ttl=47 time=155 ms
64 bytes from 104.193.88.123 (104.193.88.123): icmp_seq=189 ttl=47 time=155 ms
2、实现互相协助,连接到同一台电脑的同一用户
A用户跟创建新screen会话
screen –S [SESSION]
B用户加入screen会话
screen –x [SESSION]
剥离当前screen会话
Ctrl+a,d
退出并关闭screen会话
exit
7、bash的快捷键
Ctrl + l 清屏,相当于clear命令
Ctrl + o 执行当前命令,并重新显示本命令
Ctrl + s 阻止屏幕输出,锁定
Ctrl + q 允许屏幕输出
Ctrl + c 终止命令
Ctrl + z 挂起命令
Ctrl + a 光标移到命令行首,相当于Home
Ctrl + e 光标移到命令行尾,相当于End
Ctrl + f 光标向右移动一个字符
Ctrl + b 光标向左移动一个字符
Alt + f 光标向右移动一个单词尾
Alt + b 光标向左移动一个单词首
Ctrl + xx 光标在命令行首和光标之间移动
Ctrl + u 从光标处删除至命令行首
Ctrl + k 从光标处删除至命令行尾
Alt + r 删除当前整行
Ctrl + w 从光标处向左删除至单词首
Alt + d 从光标处向右删除至单词尾
Ctrl + d 删除光标处的一个字符
Ctrl + h 删除光标前的一个字符
Ctrl + y 将删除的字符粘贴至光标后
Alt + c 从光标处开始向右更改为首字母大写的单词
Alt + u 从光标处开始,将右边一个单词更改为大写
Alt + l 从光标处开始,将右边一个单词更改为小写
Ctrl + t 交换光标处和之前的字符位置
Alt + t 交换光标处和之前的单词位置
Alt + N 提示输入指定字符后,重复显示该字符N次 注意:Alt组合快捷键经常和其它软件冲突
8、不重启系统识别新添加的硬盘
lsblk命令能显示出当前系统块设备列表
[15:01:53 op@lb-test3 ~]$lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
└─sda1 8:1 0 50G 0 part /
在我们给服务器增加了新硬盘之后,不重新启动系统,无法识别新添加的硬盘。使用以下步骤可以识别新添加的硬盘。
在/sys下可以找到如下文件:
[15:13:59 root@lb-test3 ~]#ll /sys/class/scsi_host/host0/scan
--w-------. 1 root root 4096 Mar 16 15:13 /sys/class/scsi_host/host0/scan
此文件即使是root也无权限查看,但是我们可以直接操作:(如果host0不行,请查看目录下是否有其他目录)
[15:14:32 root@lb-test3 ~]#echo '- - -' > /sys/class/scsi_host/host0/scan
然后再次使用lsblk命令查看就能看到新添加的硬盘或块设备了。
9、释放磁盘空间,删除文件的正确姿势
当生产中遇到磁盘使用快要满的时候,我们经常的操作是查找出比较大的文件,去分析是否有用,没用的就删除,通常是日志文件。
但是,有时候你会发现,删除了日志文件后,磁盘空间并没有释放,这是为什么呢?
原因是删除的文件正在被其他进程占用。停止进程后,会发现从盘空间就会释放。
但是,停止进程也不是最好的处理方法,最好的操作方法如下:
> FILE 直接覆盖清空文件,然后删除文件即可 rm -f FILE
10、定制vim的工作特性
配置文件:永久有效
全局:/etc/vimrc
个人:~/.vimrc
扩展命令模式:当前vim进程有效
(1) 行号
显示:set number,简写 set nu
取消显示:set nonumber, 简写 set nonu
(2) 忽略字符的大小写
启用:set ignorecase,简写 set ic
不忽略:set noic
(3) 自动缩进
启用:set autoindent,简写 set ai
禁用:set noai
(4) 复制保留格式
启用:set paste
禁用:set nopaste
(5) 显示Tab和换行符 ^I 和$显示
启用:set list
禁用:set nolist
(6) 高亮搜索
启用:set hlsearch
禁用:set nohlsearch
(7) 语法高亮
启用:syntax on
禁用:syntax off
(8) 文件格式
启用windows格式:set fileformat=dos
启用unix格式:set fileformat=unix
简写 set ff=dos|unix
(9) 设置文本宽度
set textwidth=65 (vim only)
set wrapmargin=15
(10) 设置光标所在行的标识线
启用:set cursorline,简写 set cul
禁用:set nocursorline