Tips for Unix/Linux

@1: 在单个命令中创建目录树:
不要逐层创建目录,尽量使用mkdir的-p选项:

~$ mkdir -p one/two/three    # 假设目录one不存在

创建复杂的目录树:

~$ mkdir -p ./{a/{c,d/e/{f/h,g/i}},b}    # 假设目录a不存在

 

@2: 使用选项 -C 来解压缩 .tar 文件到指定的目录(如tmp/a/b/c)

~$ tar xvf -C tmp/a/b/c filename.tar.gz

 

@3: Be careful of the wildcard.

一般最好将变量调用包括在双引号中,除非您有不这样做的足够理由。

lxw@ubuntu:~$ ls Music/
a  b
lxw@ubuntu:~$ var="Music/*"
lxw@ubuntu:~$ echo $var
Music/a Music/b
lxw@ubuntu:~$ echo "$var"
Music/*
lxw@ubuntu:~$ echo "${var}a"
Music/*a
lxw@ubuntu:~$ echo ${var}a
Music/a
lxw@ubuntu:~$ 

 

@4: xargs:
#1:

find可以到指定的目录的子目录中查找, grep -r也可以, 但如果指定了查找的文件的类型, 可能用find会更方便.

比如下面的例子, 要达到完全等效的效果, 用grep写可能会稍微麻烦些

~$ find ./ -name "*.sh"|xargs grep "string"

#2:

~$ ls|xargs file

 

@5: time: 执行命令所耗费的时间 

~$ time find ./ -name "*.sh"|xargs grep "string"
./dirInfo.sh:    #read -p: If there are some 'Escape Characters' in the prompt string, there will be something unexpected.

real    0m0.007s
user    0m0.004s
sys    0m0.000s

  

@6: grep不需要cat

提倡

~$ time grep "lxw" basicShellScripts.sh 
Author: lxw

real    0m0.003s
user    0m0.000s
sys    0m0.000s

不提倡:

~$ time cat basicShellScripts.sh|grep "lxw"
Author: lxw

real    0m0.004s
user    0m0.000s
sys    0m0.000s

 

@7: 查找文件命令locate,find也可以但比较慢

locate命令用来查找名字中包含指定字符串的文件和目录,locate是在系统的文件/目录名称数据库中查询,速度较快。

与updatedb命令搭配使用,可以使查询结果更加准确、及时。 

 

@8: 要查看某个运行着的命令(通过ps查到pid)具体是哪个目录下的哪个文件执行的,可以通过如下方式查看:

通过ps查到pid:

lxw ~$ ps aux|grep lxw
...
lxw       6043  0.2  1.6 135508 16840 ?        Sl   16:00   0:04 gnome-terminal
lxw       6050  0.0  0.0   2420   744 ?        S    16:00   0:00 gnome-pty-helper
lxw       6051  0.0  0.3   7092  3532 pts/1    Ss+  16:00   0:00 bash
lxw       6732  0.4  0.3   7036  3364 pts/12   Ss   16:33   0:00 bash
...

假设我们现在想看gnome-terminal这个进程是哪个文件执行的结果.我们可以通过下面得到命令来实现:

lxw ~$ cd /proc/6043/
lxw 6043$ ls -l 
total 0
dr-xr-xr-x   2 lxw  lxw  0 Feb  5 16:33 attr/
-rw-r--r--   1 lxw  lxw  0 Feb  5 16:33 autogroup
-r--------   1 lxw  lxw  0 Feb  5 16:33 auxv
-r--r--r--   1 lxw  lxw  0 Feb  5 16:33 cgroup
--w-------   1 lxw  lxw  0 Feb  5 16:33 clear_refs
-r--r--r--   1 lxw  lxw  0 Feb  5 16:00 cmdline
-rw-r--r--   1 lxw  lxw  0 Feb  5 16:33 comm
-rw-r--r--   1 lxw  lxw  0 Feb  5 16:33 coredump_filter
-r--r--r--   1 lxw  lxw  0 Feb  5 16:33 cpuset
lrwxrwxrwx   1 lxw  lxw  0 Feb  5 16:33 cwd -> /home/lxw/
-r--------   1 lxw  lxw  0 Feb  5 16:33 environ
lrwxrwxrwx   1 lxw  lxw  0 Feb  5 16:33 exe -> /usr/bin/gnome-terminal*
...

请注意exe是指向/usr/bin/gnome-terminal的符号链接. 因此, 我们知道6043进程是/usr/bin/gnome-terminal这个程序执行的产生的.

/proc/pid/cwd 链接到进程的当前工作目录

/proc/pid/exe 链接到进程的执行命令文件(绝对路径)

@9: 查看Linux系统和服务日志:syslog

http://blog.sina.com.cn/s/blog_4d45ec960100ugqg.html

 

参考文章:

UNIX 高手的 10 个习惯:http://www.admin10000.com/document/3696.html

 

posted @ 2014-03-08 21:04  XiaoweiLiu  阅读(320)  评论(0编辑  收藏  举报