Linux进阶资源
Command line one-liners
the-art-of-command-line
Linux工具快速教程
快乐的 Linux 命令行
Linux Tutorial
UNIX Tutorial for Beginners
像黑客一样使用 Linux 命令行
高效使用 Linux 命令行
统计使用命令的频率
$ history | awk '{print $2}' | sort | uniq -c | sort -rn | head -10
RTFM 阅读那该死的手册
Read The Fucking Manual的缩写,翻成中文是“阅读那该*死的手册”。
man命令,显示使用手册
在手册中移动
我们来学习如何在手册页面中移动:
键盘上的方向键:向上键和向下键可以使我们实现上一行和下一行的跳转。
键盘上的PgUp和PgDn(或者空格键)键:实现上一页和下一页的跳转。
键盘上的Home和End键:实现开始和结尾的跳转。
键盘上的/键(斜杠):实现搜索,和之前在less命令中功能类似。
键盘上的Q键:退出手册页。
apropos命令:查找命令
在使用man命令时,我们需要先知道我们要显示使用手册的那个命令的名字。那如果不知道那个命令叫什么怎么办呢?
这时候我们就需要请apropos命令上场了,apropos是英语“关于”的意思。
apropos命令的用法很简单,只要后接一个关键字,apropos命令就会为你在所有手册页中查找相关的命令。
因此apropos命令与man命令有点对立的关系,man命令用于显示命令的使用手册,而apropos命令用于根据手册中的关键字来找到命令。
想要知道如何用终端的命令来控制音量
apropos sound
-h或–help参数
-h参数中的h是help的首字母,help是英语“帮助”的意思。所以-h或–help参数的作用是显示帮助文档。
比如我们要查看apt-get命令的帮助文档,可以这样:
apt-get -h
whatis命令
what是英语“什么”的意思,is是英语“是”的第三人称单数形式。所以连起来what is就是“是什么”的意思。
whatis命令可以说是man命令的精简版,它只会列出man命令显示的手册的开头部分,就是概述命令的作用。
例如用whatis命令来查看ls命令的作用。
whatis ls
快捷键
Ctrl + L 用于清理终端的内容,就是清屏的作用。其实clear命令也有同样效果
Ctrl + D 给终端传递EOF (End Of File,文件结束符)如果你在命令行提示符后什么也不输入的情况下直接按下这组快捷键,那么就会关闭当前的终端。
Shift + PgUp 用于向上滚屏,与鼠标的滚轮向上滚屏是一个效果,但岂不是很方便吗?
Shift + PgDn 用于向下滚屏,与鼠标的滚轮向下滚屏是一个效果。
Ctrl + A 光标跳到一行命令的开头。一般来说,Home键有相同的效果。
Ctrl + E 光标跳到一行命令的结尾。一般来说,End键有相同的效果。
Ctrl + U 删除所有在光标左侧的命令字符。
Ctrl + K 删除所有在光标右侧的命令字符。
Ctrl + W 删除光标左侧的一个“单词”,这里的“单词”指的是用空格隔开的一个字符串。例如 -a 就是一个“单词”。
Ctrl + Y 粘贴用Ctrl + U, Ctrl + K或Ctrl + W“删除”的字符串,有点像“剪切-粘贴”。
tmux是一款终端中的分屏工具
sudo apt-get install tmux
tmux的使用方法见tmux快捷键
flux是一款护眼工具,能根据一天中的不同时间自动调节屏幕亮度
sudo add-apt-repository ppa:nathan-renniewaldock/flux
sudo apt-get update
sudo apt-get install fluxgui
Linux写代码的夜间模式(保护眼睛),在Linux中安装f.lux
1.自动创建中间目录
mkdir:创建一个目录
mkdir也可以同时创建好几个目录:
mkdir new_folder new_folder_2
如果我所要创建的目录的名字里有空格怎么办呢?
很简单,加上双引号:
mkdir "new folder"
还可以用 -p 参数来递归创建目录结构。
mkdir -p /tmp/123/345/567
mkdir -p会自动创建中间缺的目录,而不需要一个个的按顺序创建。
就会先创建123这个目录,在123目录里面创建345这个目录,在345里面再创建567这个目录:
touch命令:创建一个空白文件.
touch在英语中是“触摸,触碰”的意思,就是说我碰一下那个文件,让电脑以为我刚修改过。
touch命令其实一开始的设计初衷是修改文件的时间戳,就是可以修改文件的创建时间或修改时间,让电脑以为文件是在那个时候被修改或创建的。
用touch命令同时创建多个文件:
touch new_file new_file_2
在创建文件的时候,如果需要一次性创建多个文件,比如:“love_1_linux.txt,love_2_linux.txt,… love_10_linux.txt”。
touch love_{1..10}_linux.txt
如果所要创建的文件的名字里有空格怎么办呢?
很简单,加上双引号:
touch "new file"
cp命令和mv命令:拷贝文件和移动文件
cp命令:拷贝文件或目录
拷贝刚才创建的new_file文件怎么做呢?
cp new_file new_file_copy
第一个文件new_file是已经存在的文件,也就是被拷贝的文件;第二个文件new_file_copy是需要创建的文件,是new_file的副本,内容一模一样。
复制文件到另一个目录
只需要把cp命令的第二个参数换成目录名。
cp new_file one/
上面的命令就把new_file这个文件拷贝到了one这个目录中
拷贝目录
要拷贝目录,只要在cp命令之后加上-R参数(注意是大写的R)。拷贝的时候,目录中的所有内容(子目录和文件)都会被拷贝。
cp -R one one_copy
之前,我们创建了一个目录one,现在我们将其拷贝为one_copy
*使用通配符*
*号(星号)是很常用的正则表达式的符号,被称为“通配符”,顾名思义就是百搭,可以替代任意字符串。
cp *.txt folder
那么就会把当前目录下所有txt文件拷贝到folder这个子目录当中。
mv命令:移动文件
cp命令就好比Windows中的复制+黏贴,而mv命令就好比Windows中的剪切+黏贴。
mv命令来移动目录很简单,不需要额外的参数,就跟移动文件一样:
mv new_folder one
以上命令将new_folder这个目录(包括其下的子目录和文件)移动到one这个目录中。
除了移动文件,mv命令还可以用于重命名文件
mv new_file renamed_file
以上命令会将new_file重命名为renamed_file
rm命令:删除文件和目录
rm是英语remove的缩写,表示“移除”。这个命令就是用来删除东西的。
同时删除多个文件,只要用空格隔开每个文件即可。例如:
rm file1 file2 file3
i 参数:向用户确认是否删除
保险起见,用rm命令删除文件时,可以加上 -i 参数,这样对于每一个要删除的文件,终端都会询问我们是否确定删除。i是英语inform的缩写,表示“告知,通知”。
-f参数:慎用,不会询问是否删除,强制删除
如果在rm命令后加上-f参数,那么终端不会询问用户是否确定删除文件,不论如何,文件会立刻被强制删除。
f是英语force的缩写,表示“强迫,强制”。
rm -f file
以上命令会强制删除file文件。
-r参数:递归地删除
r是英语recursive的缩写,表示“递归的”。所以使用-r参数,可以使rm命令删除目录,并且递归删除其包含的子目录和文件。
这个命令也挺危险的,用得不好可能你的子目录和文件都没了。
rm -r one
以上命令会删除one这个目录,包括其子目录和文件。
rm命令加-r和-f参数:极为危险!
千万不要这样做!
rm -rf /* 或者 rm -rf /
rm:rm命令,这个没问题吧,删除命令么。
-r:递归删除。
-f:不询问,强制删除。
/:系统的根目录。后面可以不加通配符*,也可以加。
所以整个命令的意思很明确:强制递归删除根目录下所有文件!
#linux 复制多个文件夹下的文件到一个文件夹下面
for i in $(find ./aug_label/ -name \*.tif);do cp -rf $i ./newlabel/;done
for i in $(find ./aug_train/ -name \*.tif);do cp -rf $i ./newtrain/;done
for i in $(find ./train/ -name \*.tif);do cp -rf $i ./newtrain/;done
for i in $(find ./label/ -name \*.tif);do cp -rf $i ./newlabel/;done
#http://www.cnblogs.com/awinlei/archive/2013/02/05/2893292.html
#批量重命名
for var in *.tif;do mv "$var" "${var%.tif}_train.tif";done
for var in *.tif;do mv "$var" "${var%.tif}_label.tif";done
#http://www.cnblogs.com/pangblog/p/3243931.html
2.网络监控软件
bwm-ng
iptraf
iftop
Linux流量监控软件bwm (支持64位系统)
Bandwidth Monitor NG (简称为 Bwm-NG)是一个简单的网络和磁盘带宽监视程序,可在Linux、BSD、Solaris等平台上运行。它支持各种各样的检测元件,用于收集各种统计数据,包括/proc/net/dev、netstat、getifaddr、sysctl、kstat、 /proc/diskstats /proc/partitions、 IOKit、 devstat 、 libstatgrab等。接口或设备可以黑白方式列示,这样用户就可以只查看感兴趣的数据。Bwm-NG支持多种输出选项,如图形、纯文本、CVS及 HTML等。查看流量命令:bwm-ng -d (按u键可切换流量单位)
看看会不会拿服务器被当"肉鸡"使用,检测这一问题的最好办法就是查看外面的流量出口,这时候我想到了iftop命令。
iftop是类似于top的实时流量监控工具。iftop可以用来监控网卡的实时流量(可以指定网段)、反向解析IP、显示端口信息等,详细的将会在后面的使用参数中说明。
sudo iftop -np
查看访问服务器的IP个数
netstat -pnt | grep :80
netstat -pnt | grep :80 | wc -l # IP个数
IPTraf的是一个IP网络的网络监控工具。它截取网络上的数据包,并给出了当前的IP流量在它的各条信息。IPTraf的是一个纯软件的分析仪。它利用内置的原始数据包捕获的Linux内核,允许它被用于广泛的以太网卡,支持FDDI适配器,支持ISDN适配器,令牌环网,异步SLIP / PPP接口和其他网络设备的接口。不需要特殊的硬件要求。
# 查看有无异常进程
$ ps aux
#查看正运行的进程
ps -u username
# grep python的意思是过滤出跟python相关的进程
ps -aux | grep python
# 查看GPU上的进程
ps -ef|grep <pid>
......
# 查看系统资源占用有无异常
$ top
......
# 有没有新增异常用户
$ cat /etc/passwd
......
#查看了root用户的命令历史记录,当然这个对稍有经验家伙是没有意义的,拿到了root权限后可以清理任何痕迹
# history
......
3.打开文件夹
nautilus /home
或者
xdg-open /home
文件管理
file #确定文件类型,通过file指令,我们得以辨识该文件的类型
stat #文件信息
文件内容显示
nl #(添加行号列印)
nl /etc/issue #用 nl 列出 /etc/issue 的内容
head #功能说明,显示先是文件的前几行(默认10行)。
head -n 5 syslog #可以指定显示的行数,用 -n 这个参数
head -20 test.sh #显示文件 test.sh前20行
tail #命令用于查看纯文本文档的后N行
tail -n 5 syslog #默认情况下,tail会显示文件的尾10行。可以指定显示的行数,用 -n 这个参数
head命令和tail命令:显示文件的开头和结尾
Less #功能说明,less 命令的功能几乎和 more 命令一样,也是用来按页显示文件,不同之处在于less 命令在显示文件时允许用户既可以向前又可以向后翻阅文件。
less命令:分页显示文件内容
less test.sh
less命令和cat命令之间最大的区别就是:less命令会分一页一页地显示文件内容,使我们可以方便地在终端里阅读。
more的缺陷就是它没有less那么强大,比如more命令虽然也是一页一页地显示文件,但是我们不能往后翻页,只能往前,“一路向北”.
less命令的好处是它会先读入文件开始的若干行,然后就停在那里,而这若干行的行数取决于终端屏幕的大小。这样的好处是我们可以有时间去渐进地读文件的内容。
less命令中最基本最常用的快捷键:
空格键:文件内容读取下一个终端屏幕的行数,相当于前进一个屏幕(页)。很常用的快捷键。与键盘上的PageDown(下一页)效果一样。
回车键:文件内容读取下一行,也就是前进一行。与键盘上的向下键效果是一样的。
d键:前进半页(半个屏幕)。
b键:后退一页。与键盘上的PageUp(上一页)效果一样。
y键:后退一行。与键盘上的向上键效果是一样的。
u键:后退半页(半个屏幕)。
q键:停止读取文件,中止less命令。
less高级的快捷键
=号:显示你在文件中的什么位置(会显示当前页面的内容是文件中第几行到第几行,整个文件所含行数,所含字符数,整个文件所含字符)。
h键:显示帮助文档。按q键退出帮助文档。
/(斜杠):进入搜索模式,只要在斜杠后面输入你要搜索的文字,按下回车键,就会把所有符合的结果都标识出来。要在搜索所得结果中跳转,可以按n键(跳到下一个符合项目),N键(shift键+n。跳到上一个符合项目)。当然了,正则表达式(Regular Expression)也是可以用在搜索内容中的。
n键:跳到下一个符合的搜索结果。
N键:跳到上一个符合的搜索结果。
文件显示总结
cat 由第一行开始显示內容
tac 从最后一行开始显示,可以看出 tac 是 cat 的到这写!
nl 显示的时候,顺道输出行号。
more 一页一页显示內容
less 与more 类似,但是比 more 更好的是,可以往前翻页!
head 只看头几行,默认前10行。
tail 只看尾巴几行。
od 以二进位的方式读取文档內容!
文件查找
whereis #由一些特定的目录中寻找文件档名
whereis filename #快速查找某个文件
whereis ifconfig #请找出 ifconfig 这个档名
which #用于查找PATH路径下的某个命令是否存在
whatis #显示命令的简要描述,即会显示man手册页的第一行描述
find 目录 -name 文件名
locate命令,快速查找
locate是英语“定位”的意思。这个命令用于定位要查找的文件,而且此命令很快。
locate命令的用法也很直观,后接需要查找的文件名(当然也可以用正则表达式)。
例如我们来查找一个叫做 renamed_file的文件:
locate renamed_file
文件的数据库
在使用locate命令查找文件时,大家可能会遇到这样的问题:我刚创建的文件,为什么用locate命令查找不到呢?
这正好是locate命令的缺陷,我正要说到:locate命令不会对你实际的整个硬盘进行查找,而是在文件的数据库里查找记录。
locate命令的原理如下图所示:
对于刚创建不久的文件,因为它们还没被收录进文件数据库,因此locate命令就找不到其索引,自然就不会返回任何结果。
可以用updatedb命令强制系统立即文件数据库。但是updatedb命令只能由root用户执行。
update是英语“更新”的意思。db是英语database的缩写,表示“数据库”。所以连起来就是“更新数据库”。
sudo updatedb
查找软件安装位置及版本
dpkg -L firefox 查看软件firefox的安装路径。
dpkg -l firefox 查看软件firefox版本
apt-show-versions firefox 查看软件firefox版本
aptitude show firefox
find命令详解
与locate命令不同,find命令不会在文件数据库中查找文件的记录,而是遍历你的实际硬盘。
所以,如果你的硬盘容量很大的话,那find命令会查找比较久。
find命令的原理如下图所示
find命令的这种“耿直”的查找方式保证了我们不会遗漏一天之内创建的文件。
find命令的用法是这样的:
find 《何处》《何物》《做什么》
1. 根据文件名查找
find -name "france1.jpg"
这里,我们用-name参数指定了文件名字,是france1.jpg,用双引号括起来。不加双引号或者用单引号也是可以的。
假如,现在我位于我的家目录中,我却想在其他目录中进行查找,怎么办呢?
那就须要指定《何处》这个参数了。
例如,我要在/var/log目录下查找名为syslog的文件,我应该这么输入:
find /var/log "syslog"
与locate命令不同的是,find命令只会查找完全符合《何物》的字符串表示的文件。**locate会查找所有包含关键字的文件。**比如,如果要用find来找thing这个文件,那么只会找到名字就是thing的文件;而locate命令会查找到比如thing,thing1,onething,twothings这样的文件。
可以用通配符:*(星号)来实现匹配多个名称。
例如,我要查找所有以syslog这个关键字开头的文件,可以这样来实现:
find /var/log -name "syslog*"
那如果我要在整个硬盘里查找怎