闲下来总结一下最近一年工作中常用到的一些linux命令,大多数都是每天几乎能用到的。

1,tar

创建一个新的tar文件

1
$ tar cvf archive_name.tar dirname/

解压tar文件

1
$ tar xvf archive_name.tar

查看tar文件

1
$ tar tvf archive_name.tar

2,grep

在文件中查找字符串(不区分大小写)

1
$ grep -i "str" file

输出成功匹配的行,以及该行之后的n行

1
$ grep -A n -i "str" file

在一个文件夹中递归查询包含指定字符串的文件

1
$ grep -r "str" *

3,find

查找指定文件名的文件(不区分大小写)

1
$ find -iname "filename"

模糊查找

1
$ find . -name "*filename*"

4,ssh

登录到远程主机

1
$ ssh -l jsmith remotehost.example.com

调试ssh客户端

1
$ ssh -v -l jsmith remotehost.example.com

显示ssh客户端版本

1
$ ssh -V

5,sed

当你将Dos系统中的文件复制到Unix/Linux后,这个文件每行都会以\r\n结尾,sed可以轻易将其转换为Unix格式的文件,使用\n结尾的文件

1
$ sed 's/.$//' filename

反转文件内容并输出

1
$ sed -n '1!G; h; p' filename

为非空行添加行号

1
$ sed '/./=' thegeekstuff.txt | sed 'N; s/\n/ /'

6,awk

删除重复行

1
$ awk '!($0 in array) { array[$0]; print}' temp

打印/etc/passwd中所有包含同样的uid和gid的行

1
$ awk -F ':' '$3=$4' /etc/passwd

打印文件中的指定部分的字段

1
$ awk '{print $2,$5;}' employee.txt

7,vim

打开文件并跳到第10行

1
$ vim +10 filename.txt

打开文件跳到第一个匹配的行

1
$ vim +/search-term filename.txt

以只读模式打开文件

1
$ vim -R /etc/passwd

8,diff

比较的时候忽略空白符

1
$ diff -w name_list.txt name_list_new.txt

9,sort

以升序对文件内容排序

1
$ sort names.txt

以降序对文件内容排序

1
$ sort -r names.txt

以第三个字段对/etc/passwd的内容排序

1
$ sort -t: -k 3n /etc/passwd | more

10,export

输出跟字符串oracle匹配的环境变量

1
2
3
4
5
$ export | grep ORCALE
declare -x ORACLE_BASE="/u01/app/oracle"
declare -x ORACLE_HOME="/u01/app/oracle/product/10.2.0"
declare -x ORACLE_SID="med"
declare -x ORACLE_TERM="xterm"

设置全局环境变量

1
$ export ORACLE_HOME=/u01/app/oracle/product/10.2.0

11,xargs

将所有图片文件拷贝到外部驱动器

1
$ ls *.jpg | xargs -n1 -i cp {} /external-hard-drive/directory

将系统中所有jpd文件压缩打包

1
$ find / -name *.jpg -type f -print | xargs tar -cvzf images.tar.gz

下载文件中列出的所有url对应的页面

1
$ cat url-list.txt | xargs wget –c

12,ls

以易读的方式显示文件大小(显示为MB,GB…)

1
2
$ ls -lh
-rw-r----- 1 ramesh team-dev 8.9M Jun 12 15:27 arch-linux.txt.gz

以最后修改时间升序列出文件

1
$ ls -ltr

在文件名后面显示文件类型

1
$ ls -F

13,gzip

创建一个*.gz的压缩文件

1
$ gzip test.txt

解压*.gz文件

1
$ gzip -d test.txt.gz

显示压缩的比率

1
2
3
$ gzip -l *.gz
compressed uncompressed ratio uncompressed_name
23709 97975 75.8% asp-patch-rpms.txt

14,bzip

创建*.bz2压缩文件

1
$ bzip2 test.txt

解压*.bz2文件

1
bzip2 -d test.txt.bz2

15,uzip

解压*.zip文件

1
$ unzip test.zip

查看*.zip文件的内容

1
2
3
4
5
6
7
8
$ unzip -l jasper.zip
Archive: jasper.zip
Length Date Time Name
-------- ---- ---- ----
40995 11-30-98 23:50 META-INF/MANIFEST.MF
32169 08-25-98 21:07 classes_
15964 08-25-98 21:07 classes_names
10542 08-25-98 21:07 classes_ncomp

16,shutdown

关闭系统并立即关机

1
$ shutdown -h now

10分钟后关机

1
$ shutdown -h +10

重启

1
$ shutdown -r now

重启期间强制进行系统检查

1
$ shutdown -Fr now

17,ps

ps命令用于显示正在运行中的进程的信息,ps命令有很多选项,这里只列出了几个

查看当前正在运行的所有进程

1
$ ps -ef | more

以树状结构显示当前正在运行的进程,H选项表示显示进程的层次结构

1
$ ps -efH | more

18,free

这个命令用于显示系统当前内存的使用情况,包括已用内存、可用内存和交换内存的情况

默认情况下free会以字节为单位输出内存的使用量

1
2
3
4
5
$ free
total used free shared buffers cached
Mem: 3566408 1580220 1986188 0 203988 902960
-/+ buffers/cache: 473272 3093136
Swap: 4000176 0 4000176

如果你想以其他单位输出内存的使用量,需要加一个选项,-g为GB,-m为MB,-k为KB,-b为字节

1
2
3
4
5
$ free -g
total used free shared buffers cached
Mem: 3 1 1 0 0 0
-/+ buffers/cache: 0 2
Swap: 3 0 3

如果你想查看所有内存的汇总,请使用-t选项,使用这个选项会在输出中加一个汇总行

1
2
3
4
5
6
$ free -t
total used free shared buffers cached
Mem: 3566408 1592148 1974260 0 204260 912556
-/+ buffers/cache: 475332 3091076
Swap: 4000176 0 4000176
Total: 7566584 1592148 5974436

19,top

top命令会显示当前系统中占用资源最多的一些进程(默认以CPU占用率排序)如果你想改变排序方式,可以在结果列表中点击O(大写字母O)会显示所有可用于排序的列,这个时候你就可以选择你想排序的列

1
2
3
4
5
6
7
Current Sort Field: P for window 1:Def
Select sort field via field letter, type any other key to return
a: PID = Process Id v: nDRT = Dirty Pages count
d: UID = User Id y: WCHAN = Sleeping in Function
e: USER = User Name z: Flags = Task Flags
........

如果只想显示某个特定用户的进程,可以使用-u选项

1
$ top -u oracle

20,df

显示文件系统的磁盘使用情况,默认情况下df -k 将以字节为单位输出磁盘的使用量

1
2
3
4
$ df -k
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 29530400 3233104 24797232 12% /
/dev/sda2 120367992 50171596 64082060 44% /home

使用-h选项可以以更符合阅读习惯的方式显示磁盘使用量

1
2
3
4
5
6
7
8
$ df -h
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on
/dev/disk0s2 232Gi 84Gi 148Gi 37% 21998562 38864868 36% /
devfs 187Ki 187Ki 0Bi 100% 648 0 100% /dev
map -hosts 0Bi 0Bi 0Bi 100% 0 0 100% /net
map auto_home 0Bi 0Bi 0Bi 100% 0 0 100% /home
/dev/disk0s4 466Gi 45Gi 421Gi 10% 112774 440997174 0% /Volumes/BOOTCAMP
//[email protected]/public 2.7Ti 1.3Ti 1.4Ti 48% 0 18446744073709551615 0% /Volumes/public

使用-T选项显示文件系统类型

1
2
3
4
$ df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/sda1 ext4 29530400 3233120 24797216 12% /
/dev/sda2 ext4 120367992 50171596 64082060 44% /home

21,cat

你可以一次查看多个文件的内容,下面的命令会先打印file1的内容,然后打印file2的内容

1
2
$ cat file1 file2
-n命令可以在每行的前面加上行号
1
2
3
4
5
6
7
$ cat -n /etc/logrotate.conf
/var/log/btmp {
missingok
monthly
create 0660 root utmp
rotate 1
}

22,mount

如果要挂载一个文件系统,需要先创建一个目录,然后将这个文件系统挂载到这个目录上

1
mkdir /u01
1
mount /dev/sdb1 /u01

也可以把它添加到fstab中进行自动挂载,这样任何时候系统重启的时候,文件系统都会被加载

1
/dev/sdb1 /u01 ext2 defaults 0 2

23,tail

tail命令默认显示文件最后的10行文本

1
$ tail filename.txt

你可以使用-n选项指定要显示的行数

1
$ tail -n N filename.txt

你也可以使用-f选项进行实时查看,这个命令执行后会等待,如果有新行添加到文件尾部,它会继续输出新的行,在查看日志时这个选项会非常有用。你可以通过CTRL-C终止命令的执行

1
$ tail -f log-file

24,less

这个命名可以在不加载整个文件的前提下显示文件内容,在查看大型日志文件的时候这个命令会非常有用

1
$ less huge-log-file.log

当你用less命令打开某个文件时,下面两个按键会给你带来很多帮助,他们用于向前和向后滚屏

1
2
CTRL+F – forward one window
CTRL+B – backward one window