继续在 Linux 世界里找东西

tux2上一篇.

对于新手老手, 都有一些文件是要找的. 自己的脑子永远不会比一块几百元的硬盘更方便存东西, 所以与其记住每个文件在哪, 不如记住如何找到这些文件. 当然, 养成一个一致的文件存放习惯也很有帮助.

找不常更改的系统文件, 例如某个命令的”真身”位置, 我一般用 locate 命令. Locate 命令是从有索引的数据库里搜索匹配的文件, 所以速度最快. 但有可能数据库更新的不够及时, 也就是说数据库里搜到的文件实际在磁盘上可能不存在了. 因此我不推荐使用 locate 来搜索经常更改的用户文档. 使用方法很简单, 例如我要找 lsb-release (LSB = Linux Standard Base):

~ locate lsb-release
/etc/lsb-release
/usr/share/bug/lsb-release
/usr/share/doc/lsb-release
/usr/share/doc/lsb-release/README.Debian
/usr/share/doc/lsb-release/changelog.Debian.gz
/usr/share/doc/lsb-release/copyright
/var/lib/dpkg/info/lsb-release.list
/var/lib/dpkg/info/lsb-release.md5sums
/var/lib/dpkg/info/lsb-release.postinst
/var/lib/dpkg/info/lsb-release.postrm
/var/lib/dpkg/info/lsb-release.prerm

输入 locate file, 那么 locate 会自动按照 *file* 的规则来查找, 也就是说任何包含 file 的文件以及文件夹都会被搜出来的.

一个更强力的命令是 find, 比起 locate, find 是实实在在的在文件系统里搜索, 因此结果更可靠. 但速度稍慢(没事, 有SSD呀). Find 的功能超级丰富, 足够写一本书的. 所以我只是简单说两句吧. 举例是最有效的记录方法, 不是么?

1, 寻找 abc/def 文件夹里名字类似 123*.jpg 的文件

find -regex ‘.*abc\/def\/123.*\.jpg’

2, 继续上例, 追加 png 文件类型

find -regextype posix-egrep -regex ‘.*abc\/def\/123.*\.(jpg|png)’

3, 继续, 找出上面照片里一天内新添加的照片

find -regextype posix-egrep -regex ‘.*abc\/def\/123.*\.(jpg|png)’ -ctime -24

4, 继续, 把符合条件的照片复制一份到 yesterday 文件夹

find -regextype posix-egrep -regex ‘.*abc\/def\/123.*\.(jpg|png)’ -ctime -24 -exec cp {} ~/yesterday \;

5, CLI(命令行) 也可以和 GUI(图形界面)结合起来, 例如如果我想打开上面命令搜索到的图片的话

find -regextype posix-egrep -regex ‘.*abc\/def\/123.*\.(jpg|png)’ -ctime -24 | while read line; do eog $line &; done;

其中 eog = Eye of Gnome, 是 Gnome 桌面的看图软件. 一下打开不同文件夹里所有符合条件的图片, 是不是比用鼠标一个一个点击要帅很多?

🙂

在 Linux 世界里找东西

tux2今天看到年轻的同事在那费力的找系统里某个文件, 我就指点了一下如何使用 find 命令找文件. 估计同事对我的敬仰又高了些吧, 开玩笑了, 我还羡慕他年轻呢… 说实话我的 Linux 水平也顶多算是唬人阶段, 抽空总结一下, 共勉.

首先是互联网里找某个域名的信息, 用 dig (就是挖), 很简单的.

$ dig raynix.info

; <<>> DiG 9.9.2-P1 <<>> raynix.info
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37258
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 6, ADDITIONAL: 13

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;raynix.info. IN A

;; ANSWER SECTION:
raynix.info. 29 IN A 199.27.134.166
raynix.info. 29 IN A 199.27.135.166

如果查看自己主机到目标主机的网络路径, 使用 traceroute 命令. 我很喜欢此命令, 就好像看着自己魔爪从一个大陆伸向另一个一样.

$ traceroute raynix.info

1 192.168.1.1 (192.168.1.1) 0.347 ms 0.333 ms 0.434 ms #家里路由器
2 10.48.0.1 (10.48.0.1) 11.040 ms 11.093 ms 11.144 ms   #ISP 广域网?
3 meb3-ge2-1-1.gw.optusnet.com.au (198.142.164.33) 13.603 ms 13.630 ms 13.679 ms # ISP 接口
4 xe-6-1-0.md12.optus.net.au (119.225.57.253) 153.394 ms 153.391 ms 153.443 ms # ISP 主干网?
5 * * * # 神秘的有关单位
6 tengige0-3-0-5.lon70.melbourne.telstra.net (165.228.132.193) 210.775 ms 222.452 ms 222.446 ms #更大的 ISP网络
7 bundle-ether2.win18.melbourne.telstra.net (203.50.6.78) 211.002 ms 210.997 ms 211.019 ms
8 bundle-ether2.win-core1.melbourne.telstra.net (203.50.6.113) 212.557 ms 212.570 ms 212.622 ms
9 bundle-ether12.ken-core4.sydney.telstra.net (203.50.11.12) 195.557 ms 195.580 ms 195.631 ms # 到达悉尼了?
10 tengigabitethernet7-1.ken45.sydney.telstra.net (203.50.20.64) 194.599 ms 199.748 ms 200.223 ms
11 pacnet2.lnk.telstra.net (139.130.94.34) 229.498 ms 229.548 ms 229.566 ms # 准备下海
12 te0-2-0-0.cr1.syd5.asianetcom.net (203.192.174.177) 230.787 ms 241.927 ms 241.109 ms #在亚洲某处冒个泡么?
13 gi3-1-0.gw1.syd2.asianetcom.net (203.192.174.186) 207.988 ms 207.977 ms 207.117 ms
14 CDF-0011.asianetcom.net (203.192.167.86) 239.381 ms 240.509 ms 240.476 ms
15 cf-199-27-135-166.cloudflare.com (199.27.135.166) 232.210 ms 232.638 ms 232.722 ms # 232毫秒到达美国西海岸, yay~

在局域网内查看在线的主机/设备我用 nmap 命令. 以前自家局域网也就是两台电脑, 现在不同了, 电脑, 手机和各种 pad 都联网了, 扫描一下没准儿还有蹭网的邻居呢 🙂

$ nmap 192.168.1.1/24

Nmap scan report for 192.168.1.5
Host is up (0.00060s latency).
Not shown: 994 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
53/tcp open domain
80/tcp open http
8000/tcp open http-alt

过两天再写本机找东西的方法  🙂

笔记: Linux CLI 点滴

尽管使用 Linux 很多年了, 我还是经常发现: 哇, 原来还有更方便的方法!

1, 调用前面一条后台执行命令的 PID:

$!

是的, 就是这么简单. 如果想终止前面一条后台运行的指令, 那么

kill $!

就可以了. 我以前还有模有样的用 ps aux | grep 呢…

2, 重复上一条命令:

!!

就是说, 如果敲了一条很长的指令, 结果是忘记了 sudo, 原来我会按 ↑ 呼出上一条命令, 然后按 Home 将光标放到行首, 再嵌入 sudo; 现在只需要 sudo !! 即可了.

3, 显示进度:

一些命令例如 wget 会很好的显示下载进度, 但不是每个命令都如此友好. 例如 mysql, 当你导入一个巨大的 sql 文件时, 除了等待还有什么办法呢? 这时就用上 pv 了. pv = Pipe Viewer.

pv -p backup.sql | mysql database_name -uusername -ppassword -hhost

如果是压缩的 sql 备份, 也轻松串到一起:

pv -p backup.sql.gz | gzip -c -d | mysql database_name -uusername -ppassword -hhost

如有更好方法, 欢迎拍在下面 🙂

你去年夏天都做了什么?

标题是吓人的,哈哈。

转发一下下面这个时髦的让我懒得理解的命令,看看你使用最频繁的10个命令是什么?

history | awk ‘{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] ” ” CMD[a]/count*100 “% ” a;}’ | grep -v “./” | column -c3 -s ” ” -t | sort -nr | nl | head -n10

我的统计结果:

1    102  20.4%  ls
2    91   18.2%  ssh
3    62   12.4%  ping
4    62   12.4%  cd
5    28   5.6%   iwlist
6    21   4.2%   sudo
7    18   3.6%   exit
8    11   2.2%   python
9    9    1.8%   cat
10    7    1.4%   gedit

你的TOP10是什么样子的?