Linux 101 Hacks笔记(二)

Linux 101 Hacks(一).
==============================================================
第八章是全书写的最精彩的一章了 , 请同学们瞪大你们的眼睛!
===================================================

23) 使用 HISTTIMEFORMAT 在历史中显示 TIMESTAMP
通常情况下,当你在命令行中键入 history 时,终端中将显示你刚输入的命令及其编号 . 如果出于审查命令的目的,和命令一起显示时间戳将会很有帮助,如下所示 .
$ export HISTTIMEFORMAT=”%F %T “
$ history | more
1 2008-08-05 19:02:39 service network restart
2 2008-08-05 19:02:39 exit
3 2008-08-05 19:02:39 id
4 2008-08-05 19:02:39 cat /etc/redhat-release

PS:常见的参数示例
d,m,y,Y:04,09,10,2010
D:09/04/2010
F:2010-09-04
T:22:24:21
n:换行
j:本年度的第几天
H,M,S=T
Y-m-d =D
上述参数同样适用于HISTTIMEFORMAT

你也可以设置 alias 语句来查看最近的历史命令
$alias h1='history 10'

24) 用 Ctrl + R 搜索历史命令
当你执行了一串相当长的命令之后,你只要用关键字搜索一下历史命令然后重新执行这条命令而不需要将整条命令再输一遍 . 方法是:按下 Ctrl + R 然后输入关键字 . 然后你就可以对出现的这条命令随意修改了

25) 四种不同的方法快速执行之前的命令
1.用向上键( up arrow )查看上条命令,按回车执行 .
2.在命令行中输入!!并按回车 .
3.在命令行中输入!-1 并按回车 .
4.按 Ctrl+P 显示上条命令,按回车执行 .

PS:!n和!-n是不一样的 , 请自行测试

26) 执行历史命令中的特定命令
!n重新执行编号为n的命令

27) 执行以特定字开头的历史命令
!date:所有含有date的并且是最近执行的 , 然后执行

28) 用 HISTSIZE 控制历史命令的总数
HISTFILESIZE就是~/.bash_history里面的总行数 , 默认是2000
HISTSIZE就是history命令显示的行数( 通过history | wc- l查看 )

29) 使用 HISTFILE 改变历史文件名
默认情况下,命令历史被储存在.bash_history 文件中,把下面的一行添加到.bash_profile 文件中,重新登录 shell,则.commandline_warrior 文件将取代.bash_history 文件用来储存历史命令.你可以使用这个命令来追踪不同终端中执行的命令,届时只需要将不同终端中所执行的命令保存在不同的历史文件中即可.
# vi ~/.bash_profile
HISTFILE=/root/.commandline_warrior

30) 使用 HISTCONTROL 来消除命令历史中的连续重复条目
$export HISTCONTROL= ignoredups

31) 使用 HISTCONTROL 在整个历史中去除重复命令
$export HISTCONTROL=erasedups

32) 使用 HISTCONTROL 强制 history 忽略某条特定命令
在执行一条命令时,你可以将 HISTCONTROL 设置为 ignorespace 并在该命令前加上一个空格来指示 history 忽略这条命令 .
$export HISTCONTROL=ignorespace

33) 使用 c 选项清除所有的历史命令
$history -c

34) 替换命令历史中的内容
在本例中,vi 之后的"!!:$" 可以将前一个命令的参数做为当前命令的参数 .
$ ls anaconda-ks.cfg
anaconda-ks.cfg
$ vi !!:$
或者
vi !-1:2
vi anaconda-ks.cfg

在下面的例子中,紧跟在 vi 后的参数“!^”把上一个命令的第一个参数传递给当前命令 .
$ cp anaconda-ks.cfg anaconda-ks.cfg.bak
anaconda-ks.cfg
$ vi !^
$vi anaconda-ks.cfg

PS: vi !^ 跟
vi !!:1
vi !-1:^
vi !-1:1
等价!

35) 替换特定命令的特定参数
下例中,!cp:2 在命令历史中查找以 cp 开头的命令,并将其第二个参数做为当前命令(ls -l)的参数 .
$cp ~/longname.txt /really/a/very/long/path/long-filename.txt
$ls -l !cp:2
$ls -l /really/a/very/long/path/long-filename.txt

36) 用 HISTSIZE 禁用 history
如果你想禁用 history,又不让 bash shell 记录你的命令,像下面那样把 HISTSIZE 设为 0 即可 .
$export HISTSIZE=0

37) 用 HISTIGNORE 让 history 在存储时忽略某些指令
有时你不想在记录里看到诸如“pwd”,“ls”之类的基本指令,可以用 HISTIGNORE 忽略这些指令 .
注意:在 HISTIGNORE 中添加“ls”,只忽略“ls”不忽略“ls –l” . 一定要准确的写出要忽略的的指令 .
$export HISTIGNORE="ls:ll:pwd:ls -ltr"

38) 如何在 bash shell 中产生随机数
使用 bash 内置的$RANDOM 可以产生 0-32767 之间随机数
$ echo $RANDOM
22543

39) free 命令
包括 RAM 和交换空间,我的系统一共有多少内存?
$ free -mto
           total       used       free     shared    buffers     cached
Mem:           947        903         44          0         10        231
Swap:         2773        130       2643
Total:        3721       1033       2687
选项m 以MB为单位来显示变量
选项t 显示物理和交换空间变量总和,即“Total”行
选项o 不显示上面例子中的 buffers/cache

40) top 命令
如何确定内存密集型进程(memory intensive processes)?
当 top 命令显示输出的时候,按 F,可以显示以下信息和所有可供排序的字段,按 n(按内存使用对进程排序)然后按 Enter,这样就会在顶部按内存使用排序显示进程 .

如何获取一个运行进程的绝对路径和参数?
当 top 命令正在运行的时候,按 c,就可以在命令栏显示正在运行的进程的绝对路径,也就是显示/usr/local/apache2/bin/httpd 而不是 httpd

怎样在 top 命令里查看各个 CPU?
当 top 命令运行时,按 1(数字 1),可以显示这个机器上的各个 CPU 的性能数据

41) ps 命令
你可以使用 ps axuf 或 ps –ejH 以树的形式显示这些进程,树状结构有助于直接观察进程及其父进程 .

查看指定用户的进程
$ps U jaseywang

查看当前用户的进程
$ps U $USER

42) lsof 命令
lsof 会列出系统中所有打开的文件 . 打开的文件包括网络连接,设备和目录 . lsof 命令的输出有以下几列:
COMMAND 进程名称.
PID 进程ID
USER 用户名
FD 文件描述符
TYPE 文件的节点类型
DEVICE 设备号
SIZE 文件大小
NODE 节点号
NAME 文件名的绝对路径

查看指定用户打开的文件
$lsof  -u jaseywang

列出打开指定文件的用户.如果你想查看使用某指定文件的所有用户,按照如下的方法使用 lsof . 在这个例子中,显示的是现在正在使用 vi 的所有用户 .
$lsof /usr/bin/vi

43) nice 命令
内核根据进程的 nice 值决定进程需要多少处理器时间 . nice 值的取值范围是是:-20 到 20 . 一个具有-20 的 nice 值的进程有很高的优先级 . 一个 nice 值为 20 的进程的优先级则很低 .

如何给一个 shell 脚本分配一个低的优先级(更高的 nice 值)?
$nice -10 ./nice-test.sh &

如何给一个 shell 脚本分配一个高的优先级(更低的 nice 值)?
# nice –10 ./nice-test.sh &

注意:只有 root 用户可以设置一个负的 nice 值 . 用 root 用户登录再次尝试 . 注意在上面的
nice 命令里的 10 前面有一个双破折号 .

44) renice 命令
为增加 nice 值(因此降低优先级),按如下方法执行 renice 命令 .
$ renice 16 -p 13245

怎样增加运行进程的优先级(减少 nice 值)?
为提升其优先级,赋予其一个较低的 nice 值 . 然而,只有 root 可以提升运行进程的优先级,否则你会得到错误信息 .
# renice 5 -p 13254

45) 让cd对参数的大小写不敏感
$bind "set completion-ignore-case on"

46) rar 命令用法示例
压缩单个文件
$rar a syslog.rar /var/log/syslog

压缩多个文件
$rar a var-log-cups.rar /var/log/cups/*

压缩多个文件 , 可以包含目录
$rar a -r var-log-cups.rar /var/log/cups/*

解压缩
$unrar e var-log-cups.rar

不解压而列出一个压缩文件的内容
$unrar l var-log-cups.rar

47) 用 Comm 命令比较两个文件
$comm file1 file2
第一列显示的file1独有的行
第二列显示的file2独有的行
第三列显示的是两个文件共有的行

48) tee命令示例
tee 命令用来存储和查看(同时进行)别的命令的输出.即在屏幕上有显示又重定向至file文件
$ls | tee file

给 crontab 的输出形成一个备份,并且将 crontab 的输出作为 sed 命令的输入 . 替换之后,它就会成为一个新的 cron 作业 .
$crontab -l | tee crontab.backup | sed 's/old/new/' | crontab –

追加
$ls | tee -a file

按照下面的方法你还可以将输出写入到多个文件中
$ls | tee file1 file2 file3

  • http://blog.ibfsu.com Carlos Gong

    沙发~

    传说考试前拜你很灵哇~ 所以前来膜拜,保佑我今天白天双学位考试顺利吧 :-)

    • jaseywang

      刚刚放学回来,姐姐考的怎么样了:P

  • http://www.uggonlineshops.com uggboots

    不错!不过你这个黑底白字我的眼睛刺痛了!

  • Pingback: 历史命令归纳 « Jasey Wang()