#5 head/tail
----------------------------
大部分时间,登录服务器的唯一目的就是诊断一些问题,而通常方式就是查看日志。不同程序的日志,比如Apache,MySQL,邮件日志等。您如何查看日志呢?难道不是tail?类似的,我们有时用head检查文件的开头几行。
举例:
* 不断检查Apache的错误日志文件:
$ tail -f /var/log/httpd/error_log
* 查看MySQL日志的前15行:
$ head -15 /var/log/mysqld.log
--------------------------
#4 vi/nano/emacs
--------------------------
vi或者vim举例(用vi打开文件,同时不要进入插入模式):
跳至行尾:$
跳至行首:0 (零)
删除至行尾:D
重复上次操作: . (点)
撤销上次操作: u
添加'maal'至每一行的行尾:1是第一行,$是最后一行:1,$ s/$/maal/
在第5行到第10行的行首添加'bingo':5,10 s/^/bingo/
从光标所在行开始,替换所有的foo为bar:%s/foo/bar/g
删除当前行并进入插入模式:C
移除文件中由Windows带来的^M:se ff=unix
开启/关闭行号显示:set nu / set nonu
如果您需要在文件中显示真实(实际存在的)行号:%!cat -n
查找当前光标所在的单词:* (星号)
-----------------------------
#3. screen
-----------------------------
是在unix世界中没有得到充分利用的命令之一。列举个情况,您刚刚对远程服务器发出命令,但发现需要数个小时才能完成。或您需要登录10个服务器并检查一些东西…在它们之间拷贝文件…接着…您的网络连接被重置,您的SSH会话被终止。这就需要screen了,保证用一次就会上瘾。Screen是一个终端复用器,它使您可以通过一个物理终端管理多个进程(比如SSH会话)。每一个进程都有单独的虚拟窗口,同时您可以在每一个进程的虚拟窗口自由跳转。
再多说一些。假设您有很多服务器,现在通过SSH登录到其中一台服务器。您可以通过输入'screen'(所有的主流Linux发行版都已经安装了screen)启动screen。您可以看到一个状态条。通过点击Ctrl+ac创建新的screen窗口。点击Ctrl+an(下一个)和Ctrl+ap(前一个)进行跳转。基本上,它提供了非常实用的功能,比如远程终端会话管理(分离或共享终端会话),无限窗口(不同于Linux虚拟控制台的硬编码),在窗口之间复制/粘贴,提示活动和非活动窗口,拆分终端(横向和纵向)到多区域,共享终端等。
您可以将您的配置保存到.screenrc。
这里就是我的.screenrc,我重新定义了状态栏外观和感觉,同时分配了快捷键F5(前一个窗口)和F6(下一个窗口):
$ cat ~/.screenrc
# no annoying audible bell, please
vbell on
# detach on hangup
autodetach on
# don't display the copyright page
startup_message off
# emulate .logout message
pow_detach_msg "Screen session of \$LOGNAME \$:cr:\$:nl:ended."
# advertise hardstatus support to $TERMCAP
termcapinfo xterm* ti@:te@
# make the shell in every window a login shell
shell -$SHELL
defscrollback 10000
# Extend the vt100 desciption by some sequences.
termcap vt* AF=\E[3%dm:AB=\E[4%dm
caption always
caption string '%{= wk}[ %{k}%H %{k}][%= %{= wk}%?%-Lw%?%{r}(%{r}%n*%f%t%?(%u)%?%{r})%{k}%?%+Lw%?%?%= %{k}][%{b} %d/%m %{k}%c %{k}]'
# keybindings
bind -k F5 prev
bind -k F6 next
-----------------------------------
#2. netstat/nmap
----------------------------------
有很多实用的命令可以用来诊断网络。当然啦,ping/traceroute可能是最常用的,但是nmap和netstat比基本的ping更有用。netstat代表网络状态。nmap可以说是安全/端口扫描器,或是说是一个网络勘查命令。
netstat命令举例:
* 显示互联网(端口80)连接的总数:
$ netstat -an |grep :80 |wc -l
* 显示您电脑所侦听的所有端口:
$ netstat -ant | grep LISTEN
* 使用nmap扫描局域网内的电脑,并获知其开放端口:
$ nmap ip
-----------------------------
#1. find and grep
---------------------------
find命令举例:
* 查找/var下最大的前10个文件:
$ find /var -type f -ls | sort -k 7 -r -n | head -10
* 查找/var/log/下大于5GB的文件:
$ find /var/log/ -type f -size +5120M -exec ls -lh {} \;
* 找出今天的所有文件并将它们拷贝到另一个目录:
$ find /home/me/files -ctime 0 -print -exec cp {} /mnt/backup/{} \;
* 找出所有一周前的临时文件并删除:
$ find /temp/ -mtime +7-type f | xargs /bin/rm -f
* 查找所有的mp3文件,并修改所有的大写字母为小写字母:
$ find /home/me/music/ -type f -name *.mp3 -exec rename 'y/[A-Z]/[a-z]/' '{}' \;
grep命令举例:
* 打印Apache的documentroot文件夹名称:
$ grep -i documentroot /etc/httpd/conf/httpd.conf
* 浏览文件内容而不显示解释行和空行:
$ grep -Ev “^$|^#” /etc/my.cnf
* 显示分配给该接口的IP地址:
$ ifconfig eth0 | grep 'inet addr:' | cut -d':' -f2 | awk '{ print $1}'
* 特定日期发送邮件的数量:
$ cat /var/log/maillog | grep "status=sent" | grep "May 25" | wc -l
* 在进程列表中找出正在运行的进程/守护进程:
ps -ef | grep mysql
* 您还可以通过它关注cpu/内存的使用率。就像下面的命令输出,您可以看到Plesk的统计进程占用了超过18%的cpu:
root@myserver ~]# ps aux | grep statistics
root 8183 18.4 0.0 58384 2848 ? D 04:05 3:00 /usr/local/psa/admin/sbin/statistics
- 1
- 2
- 3
- 4
前往页