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