常用的 Shell 命令整理

想法

这篇主要记录一下在 Linux 终端下常用的 Shell 命令, 像 ls, cd, cp, mv 等基本的就不做整理介绍了,之后遇到了会一点点追加,算是一个整理吧。整理的命令都在 Ubuntu 14.04 LTS 系统亲测通过 …

wc 命令

wc 命令是一个统计命令,使用方式可以使用 「 man wc 」 查看。

统计文件个数

1: 统计某文件夹下文件的个数

1
2
# 注: 参数 '-l', 是小写的英文字母 l, 不是数字 1
ls -l | grep "^-" | wc -l

2: 统计某文件夹下目录的个数

1
ls -l | grep "^d" | wc -l

3: 统计文件夹下文件的个数,包括子文件夹

1
ls -lR | grep "^-" | wc -l

4: 统计某目录(包含子目录)下的所有包含关键子的文件个数:

1
2
3
ls -lR 目录路径 | grep 关键字 | wc -l
或:
ls -l "目录路径" | grep "关键字" | wc -l

例如:

1
2
3
4
# 统计 /home/xxxx 下所有文件名称包含关键字"shell"的文件个数
ls -lR /home/xxxx | grep shell | wc -l
或:
ls -l "/home/xxxx" | grep "shell" | wc -l

统计代码行数

年底又要统计代码工作量了,总不能一个一个文件找吧。 试试 wc 这个命令吧。

1
2
3
4
5

wc -l /usr/bin/*

# 统计 /usr/bin/ 目录下所有代码文件的代码行数
# 该命令会输出该目录下每个代码文件的代码行数,最后输出总代码行数

scp 命令:不同节点间复制文件或者文件夹

Linux scp 命令用于 Linux 之间复制文件和目录。
scp 是 secure copy的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。

Note: 请先确保集群中的各个节点间可以使用 SSH 免密登录。

从本地复制文件

1
2
3
4
5
6
7
8

scp local_file remote_username@remote_ip:remote_folder
或者
scp local_file remote_username@remote_ip:remote_file
或者
scp local_file remote_ip:remote_folder
或者
scp local_file remote_ip:remote_file

eg:

1
2
3
4
5

scp /home/space/music/1.mp3 root@1.1.1.5:/home/root/others/music
scp /home/space/music/1.mp3 root@1.1.1.5:/home/root/others/music/001.mp3
scp /home/space/music/1.mp3 1.1.1.5:/home/root/others/music
scp /home/space/music/1.mp3 1.1.1.5:/home/root/others/music/001.mp3

从本地复制文件夹

1
2
3
scp -r local_folder remote_username@remote_ip:remote_folder 
或者
scp -r local_folder remote_ip:remote_folder

eg:

1
2
3

scp -r /home/space/music/ root@1.1.1.6:/home/root/others/
scp -r /home/space/music/ 1.1.1.6:/home/root/others/

复制文件到远程

从远程复制到本地,只要将从本地复制到远程的命令的后 2 个参数调换顺序即可,如下实例

eg:

1
2
3

scp root@1.1.1.6:/home/root/others/music /home/space/music/1.mp3
scp -r 1.1.1.6:/home/root/others/ /home/space/music/

tail 命令

tail 命令依照要求将指定的文件的最后部分输出到标准设备,通常是终端,通俗讲来,就是把某个文件的最后几行显示到终端上,假设该文件有更新,tail 会自己主动刷新,确保你看到最新的输出内容,常用于监控 log 日志的输出等。

eg:

tail -f

1/ tail -f filename

监控 filename 文件的尾部内容(默认 10 行,相当于增加参数 -n 10),实时刷新显示在屏幕上。 按下 「 CTRL + C 」 退出,。

2/ tail -n 20 filename

显示 filename 最后 20 行。

3/ tail -r -n 10 filename

逆序显示 filename 最后 10 行。

grep 命令

Linux grep 命令用于查找文件里符合条件的字符串。常见的几个配置参数使用说明如下表格:

No params explain
1 –version or -V 该命令的版本号
2 -A N 找到所有的匹配行,并显示匹配行后 N 行
3 -B N 找到所有的匹配行,并显示匹配行前面 N 行
4 -b 显示匹配到的字符在文件中的偏移地址
5 -c 显示有多少行被匹配到
6 –color 把匹配到的字符用颜色显示出来
7 -e 可以使用多个正则表达式
8 -f FILEA FILEB FILEA 在 FILEAB 中的匹配
9 -i 不区分大小写针对单个字符
10 -m N 最多匹配 N 个后停止
11 -n 打印行号
12 -o 只打印出匹配到的字符
13 -R 搜索子目录
14 -v 显示不包括查找字符的所有行

这里举这几个常用的参数的例子:

-v : 反转匹配输出。
-w : 精确匹配输出。
-c : 输出能匹配到的列数。

eg: /etc/hosts 文件中包含如下内容 [cat /etc/hosts]:

127.0.0.1 xxxx xxxx xxxx xxxx
::1 xxxx xxxx xxxx xxxx
x.x.x.x xxxx xxxx xxxx xxxx
x.x.x.x xxxx xxxx xxxx xxxx

则使用举例和输出如下:

1 使用 -v 过滤

1
$ cat /etc/hosts | grep -v 127 | grep -v ::1

则输出将前两行过滤了,输出如下:

1
2
x.x.x.x   xxxx xxxx xxxx xxxx
x.x.x.x xxxx xxxx xxxx xxxx

2 使用 -w 精确匹配

1
$ cat /etc/hosts | grep -w 127

则精确匹配搭配包含 「 127 」 的行,输出如下:

1
127.0.0.1 xxxx xxxx xxxx xxxx

3 使用 -c 输出匹配的行数

1
$ cat /etc/hosts | grep -c 127

则精确匹配搭配包含 「 127 」 的行数为 1 ,输出如下:

1
$ 1

参考资料

[1] http://blog.sina.com.cn/s/blog_464f6dba01012vwv.html
[2] http://www.runoob.com/linux/linux-comm-scp.html
[3] https://www.jianshu.com/p/4131d09ff592
[4] http://www.runoob.com/linux/linux-comm-grep.html


END

0%