用来摘抄和自己写一点理解,关于Linux_101_Hacks觉得有用的技巧,
加入个人理解
随着读书进度更新
1.CDPATH变量
你经常使用CD命令进入某一个特定目录下的子目录,你可以将CDPATH设置为该目录,当使用cd进入其下的子目录时,则不需要键入该目录名,
比如,我当前在~目录下面,我的/etc/目录下面有个abc目录,我的/opt目录下面有个cba目录,这两个目录在~下面都不存在
那么在~直接输入cd abc或者cd cba都会报错,因为当前目录不存在这两个子目录
当设定好了CDPATH变量以后,cd会自动搜寻这些目录里面的子目录
如果希望设置永久有效,可以将 export CDPATH=/etc 写入 ~/.bash_profile 。 与环境变量PATH相似的是,你也可以在CDPATH加入多个目录项,每个目录项以冒号分隔,示例如下:例如:
export CDPATH=.:~:/etc:/opt |
2. .bash_profile也是支持函数的
function mkdircd () { |
mkdir -p "$@" && eval cd "\"\$$#\""; |
} |
这个函数用到了两个知识,(参见我的moto linux shell 手册Motorola MontaVista Linux Shell 编程指南项目(我在ubuntu-Blog的旧项目,移植过来))
-p, --parents,创建父目录
$# ----传递给程序的总的参数数目
$? ----上一个代码或者shell程序在shell中退出的情况,如果正常退出则返回0,反之为非0值。
$* ----传递给程序的所有参数组成的字符串。
$n ----表示第几个参数,$1 表示第一个参数,$2 表示第二个参数 ...
$0 ----当前程序的名称
$@----以"参数1" "参数2" ... 形式保存所有参数
$$ ----本程序的(进程ID号)PID
$! ----上一个命令的PID
这里面cd "\"\$$#\""中的 第一个$被第二个\所转义,所以他不代表变量,第二个$#,表示传递给程序的全参数 ,第一个和第三个\转义",保证参数被原样传递
这个函数被定义后
mkdircd /tmp/subdir1/subdir2/subdir3
运行完毕就自动切换到/tmp/subdir1/subdir2/subdir3目录了
3.用“cd -”可以在最近访问的两个目录之间切换
4.data命令的进阶
mm——代表月份
dd——代表日期
hh——代表24小时制的小时
mi——代表分钟
yyyy——代表年
ss——代表秒
使用
date +%m可以返回当前月份
同样,
date +%d
返回当前日期m
date +%d
返回去掉开头0的日期
date +%D
返回用mm/dd/yy表示的日期
date +%F
返回用YYYY-mm-dd表示的日期
date +%Y
返回用四位数年份YYYY
date +%y
返回用二位数年份yy
date +%j
返回本年度第几天
date +%a/A/b/B
返回简写/完整的星期or简写/完整的月份
date +%H/I
返回24/12小时制小时
使用自定义格式设置时间
date +%Y%m%d -s "20090131"
date +%T -s "22:19:53"
date +%T%p -s "10:19:53PM"
标准设置法
date -s "01/31/2009 22:19:53"
date -s "2010-08-03 14:15:00"
date -s "31 JAN 2009 22:19:53"
date set="31 JAN 2009 22:19:53"
用单词实现date的输出
date --date='2 year ago'
显示两年前的现在
date --date='2 year ’
显示2年后的现在
date --date="yesterday"
date --date='now'
date --date='tomorrow'
date --date="next day"
$ date --date="this Wednesday"
把year换成month和hour等都可以通过,支持混搭
date --date="10 months 2 day ago"
date --date="-1 days ago"
如果在后面跟+%参数,则可以显示那个时间点对应变量时间
5.把ssh隐藏到后台
书中提到的~<Control-Z>把ssh退到后台我没有试验成功,用MINGW32测试了一下那个~,失败,用Putty测试,~,失败,同Lxterminal测试,还是失败,是不是伪技巧?不得而知,不知道原书作者用的什么shell(后来用GnomeTerminal测试成功了)
但是切换后台教程到前台确实非常有用,可是jobs只对当前pts有用,fg %n倒是非常实用,切换jobs列表内编号为你的任务到前台
6.grep
更详细的解释请看此文,用SED剪出Discuz的数据库用户名和密码的探讨
这里记录一个无不熟悉的i和v选项
-i ,不区分大小写
-v,(invert)反选结果,就是取反(选择不符合PATTERN的条目)
-r,递归子目录
-l/L,递归的时候只显示符合/不符合条件文件名作为结果(否则会按照 文件名:内容 形式返回)
7.find的约束条件
约束条件可以指定文件名,文件类型文件修改时间和大小等