一、概述
对 Shell 有个最简单的认识之后,我们立刻来学习日常生活中最最需要用到的最重要的Shell 命令,以下挑出 30 个命令详解,这三十个命令要是都掌握了,你基本上对 Linux 系统的普通的日常操作就游刃有余了.
命令 | 功能 | 示例 | 备注 |
---|---|---|---|
alias | 给命令起别名 | alias c=’clear‘ | 取 clear 的别名为 c |
cat | 显示文本内容 | cat file | 显示 file 的内容 |
cd | 修改当前路径 | cd /etc | 转到 /etc 中去 |
chmod | 修改文件访问权限 | chmod 644 file | 改 file 的权限为 644 |
chown | 修改文件所有者 | chown foo file | 改 file 的所有者为 foo |
clear | 清屏 | clear | 清屏 |
cp | 拷贝文件 | 1: cp file1 file2 2: cp dir1.0/ dir2.0/ -r | 1: 拷贝 file1 为 file2 2: 拷贝 dir1.0/ 为 dir2.0/ |
df | 查看文件系统信息 | df -h | 显示文件系统信息 |
diff | 比较两文件的异同 | 1: diff file1 file2 -uN 2: diff dir1/ dir2/ -urN | 1: 比较 file1 和 file2 2: 比较 dir1/ 和 dir2/ |
dpkg | 手工安装软件包 | dpkg -i example.deb | 安装 example.deb |
echo | 显示字符串 | echo “hello!” | 显示 “hello!” |
find | 查找文件 | find / -name “*.c” | 找出/下的所有 .c 文件 |
grep | 查找字符串 | grep “abc” ./ -rwHn* | ./* 中找字符串 “abc” |
ifconfig | 查看或修改网络 | ifconfig eth0 | 查看 eth0 的网络信息 |
kill | 发送信号 | kill -s SIGKILL 1234 | 给进程 1234 发送信号 SIGKILL |
ln | 创建链接文件 | 1: ln apple a 2: ln apple a -s | 1: 取 apple 别名为 a 2: 创建一个符号链接 a 指向 apple |
ls | 列出文件信息 | ls -l | 列出当前文件信息 |
man | 查找帮助信息 | man ls | 查找关于 ls 的帮助 |
mount | 挂载或卸载分区 | mount /dev/x /mnt | 将 /dev/x 挂接到 /mnt 下 |
more | 分屏显示信息 | ps -ef | more | 分屏显示 ps -ef 的信息 |
mkdir | 创建目录 | 1: mkdir dir/ 2: mkdir -p -m 777 dir/ | 创建新目录 dir/ -p: 允许创建目录及子目录 -m: 创建指定权限的目录 |
mv | 移动或重命名文件 | 1: mv file1 file2 2: mv file dir/ | 1: 改 file1 名字为 file2 2: 将 file 移动到 dir/ 去 |
pwd | 显示当前路径 | pwd | 显示当前路径 |
ps | 查看系统进程信息 | ps -ef 或者 ps ajx | 查看系统进程信息 |
rm | 删除文件 | 1: rm file 2: rm dir/ -r | 1: 删除 file 2: 递归地删除 dir/ |
sort | 排序 | sort file | 对 file 排序后打印到屏幕 |
tar | 归档或释放 压缩或解压 | **1: tar cjf a.tar.bz2 2: tar xjf a.tar.bz2 3: tar czf a.tar.gz 4: tar xzf a.tar.gz | 1: 将所有文件压缩为 .bz2 2: 解压 .bz2 文件 3: 将所有文件压缩为 .gz 4: 解压 .gz 文件 |
uniq | 去掉相邻重复的行 | uniq file | 去除 file 中相邻的重复行 |
wc | 计数器 | wc a | 计算 a 的行、单词和字符 |
which | 查找所在路径 | which ls | 显示命令 ls 所在路径 |
二、命令详解
1. sed
awk 是一种用于处理文本的编程语言工具,他扫描文件中的每一行,查找与命令行中所给定内容相匹配的模式,如果发现匹配内容,则进行下一个编程步骤。如果找不到匹配内容,则继续处理下一行。
语法:
sed [-hnV][-e<script>][-f<script文件>][文本文件]
参数说明:
-e <script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
-f <script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
-h 或--help 显示帮助。
-n 或--quiet或--silent 仅显示script处理后的结果。
-V 或--version 显示版本信息。
动作说明:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
元字符集:
^ 指定行的开始
$ 指定行的结尾
. 匹配一个非换行符的字符
* 匹配零个或多个字符
[] 匹配指定字符内的任一字符
[^] 匹配不在指定字符内的任一字符
.. 保存已匹配的字符
& s/super/YY&yy/ super变成YYsuperyy & 保存搜索字符用来替换其他字符
\< 词首定位符 /\<my/ 匹配包含以my开头的单词的行
\> 词尾定位符 /my\>/ 匹配包含以my结尾的单词的行
x\{m\} 连续m个x /9\{5\}/ 匹配包含连续5个9的行
x\{m,\} 至少m个x /9\{5,\}/ 匹配包含至少连续5个9的行
x\{m,n\} 至少m个,但不超过n个x /9\{5,7\}/ 匹配包含连续5到7个9的行
2. PS1
PS1命令是linux系统中的一个全局变量,用于定义用户命令行的字符显示。
# 命令行中可以通过命令获得PS1结果
echo $PS1
# 默认值为
'[\u@\h \W]\$ '
PS1默认值对应命令行样式为:
sevan@sevan-vm:~$
3. pwd & PWD 命令
一句话解释: 都指某个进程运行时所在的 目录.
$PWD 是个系统变量
pwd 是linux 自带的命令. 全称: pathname of the current working directory.
cwd: 不是系统自带的命令, 但是属于 系统的属性 . 全称: current working directory .
不但在 /proc/{id} 这个目录下可以看到cwd, 在很多其他的编程语言中也可以看到( 例如grunt )
有时候 pwd 与 $PWD 给出的结果不同.
4. echo命令
显示转义字符
选项:
-n 不换行输出
-e 启用反斜线转义解释
-E 禁用反斜线转义解释(默认)
5. useradd
创建用户并设置密码的命令:useradd -m -g 组名
新建的用户名
& passwd 用户名
删除用户的命令:userdel -r 用户名
- -c<备注> 加上备注文字。备注文字会保存在passwd的备注栏位中。
- -d<登入目录> 指定用户登入时的起始目录。
- -D 变更预设值.
- -e<有效期限> 指定帐号的有效期限。
- -f<缓冲天数> 指定在密码过期后多少天即关闭该帐号。
- -g<群组> 指定用户所属的群组。
- -G<群组> 指定用户所属的附加群组
- -p, --password PASSWORD 加密后的新账户密码
- -m 制定用户的登入目录。
- -M 不要自动建立用户的登入目录
- -n 取消建立以用户名称为名的群组.
- -r 建立系统帐号。
- -s 指定用户登入后所使用的shell。
- -u 指定用户ID。
6. grep
在文件里查找字符串。例如要在 example.c 中查找字符串”abc”,则可以写成:
sun@ubuntu:~$ grep “abc” example.c
sun@ubuntu:~/100ask_imx6ull-sdk/Linux-4.9.88/drivers/char$ grep "module_init" * -rn //*代表在当前文件夹下所有的文件中搜索
下面是 grep 常用的选项:
-r :如果有子目录,则递归地查找。
-w :严格匹配指定的单词(比如指定查找”apple”,”appletree”将被剔除)
-n :打印行号
-H :打印文件名
例如,递归地在/opt/src 下查找所有包含单词”apple”的.c 文件,并打印出含有该单词的文件名称和该单词在文件中的行号,命令是:
vincent@ubuntu:~$ grep “apple” /opt/src/*.c -rwnH
我们通常需要查找某一类文件,再在这些文件中查找我们需要的字符串或者单词,这时我们可以将 find 和 grep 命令通过管道‘|’连接起来一起用,实现更加强大的功能,比如:要在/opt/src 的所有普通文件中查找单词”apple”,要求剔除像”appletree”这样的单词:
vincent@ubuntu:~$ find /opt/src -type f | xargs grep “apple” -wnH
xargs
代表 find
的输出作为 grep
的参数(否则 grep 只会在 find 找出来的文件列表名称中查找”apple”,而不会进入文件内部查找)。
grep [选项] “模式” [文件]
其中常用的选项参数有:
-E :开启扩展(Extend)的正则表达式。
-i :忽略大小写(ignore case)。
-v :反过来(invert),只打印没有匹配的,而匹配的反而不打印。
-n :显示行号
-w :被匹配的文本只能是单词,而不能是单词中的某一部分,如文本中有woman,而我搜寻的只是man,就可以使用-w选项来避免匹配woman
-c :显示总共有多少行被匹配到了,而不是显示被匹配到的内容,注意如果同时使用-cv选项是显示有多少行没有被匹配到。
-o :只显示被模式匹配到的字符串。
--color=auto :将匹配到的内容以颜色高亮显示。
-A n:显示匹配到的字符串所在的行及其后n行,after
-B n:显示匹配到的字符串所在的行及其前n行,before
-C n:显示匹配到的字符串所在的行及其前后各n行,context
man grep的时候有一个-P,文档上的英文:
man grep的时候有一个-P,文档上的英文:
-P, --perl-regexp
Interpret PATTERN as a Perl regular expression. This is highly experimental and grep -P may warn of nimplemented features.
这意思是,-P 可以让grep使用perl的正则表达式语法,因为perl的正则更加多元化,能实现更加复杂的场景。
最典型的用法是,匹配指定字符串之间的字符。 比如,我们想在一句话(Hello,my name is aming.)中匹配中间的一段字符串(my name is) 可以这样写正则表达式。
echo "Hello, my name is aming." | grep -P '(?<=Hello, ).*(?= aming.)'
如果只需要匹配到的部分,还可以加上-o选项
echo "Hello, my name is aming." | grep -P -o '(?<=Hello, ).*(?= aming.)'
- 判断文件中是否包含字符串
grep -wq “hello world” a.txt && echo “contain”||echo “not contain”
说明:
-w 全匹配某一列
-q 不打印信息
#install git
if (echo "${install_software_list[@]}" | grep -wq "git");then
apt-get -y install git && echo -e "${BLUE_COLOR}git install completed.${END_COLOR}"
fi
7. tail
tail
命令是linux中一个很实用的应用命令,该命令可以显示一个或多个文件或管道数据的最后一部分。tail
命令最常见的用途之一是监视和分析随时间变化的日志和其他文件,通常与grep
等其他工具结合使用。
7.1 tail命令语法
首先我们了解一下tail命令的语法,格式如下:
tail [OPTION]... [FILE]...
- OPTION - tail命令可以使用的选项,可以参看tail options这里。
- FILE - 零个或多个输入文件名。 如果未指定文件,或者当文件为
-
时,tail
将读取标准输入。
7.2 如何使用tail命令
如果不使用任何选项,tail
命令将以最简单的形式显示最后10
行。
tail filename.txt
7.3 显示指定数量的行
如果要显示指定文件中指定行数内容,我们可以使用-n (--lines)
选项指定要显示的行数,命令格式如下:
tail -n <NUMBER> filename.txt
您也可以省略字母n
,而只使用连字符(-)
和数字(它们之间没有空格)。
要显示名为filename.txt
的文件的最后50
行,请使用:
tail -n 50 filename.txt
下面的命令将和上面的命令执行效果一样。
tail -50 filename.txt
7.4 显示指定数量的字节
显示指定数量文件内容可以使用-c (--bytes)
选项,命令格式如下:
tail -c 500 filename.txt
您还可以在数字后面使用乘数后缀来指定要显示的字节数。 b乘以512,kB乘以1000,K乘以1024,MB乘以1000000,M乘以1048576,依此类推。
tail -c 2k filename.txt
7.5 查看文件中的更改
要监视文件中的更改,请使用-f(--follow)
选项:
tail -f filename.txt
此选项对于监视日志文件特别有用。 例如,要显示/var/log/nginx/error.log
文件的最后10行,并监视文件中的更新,请使用:
tail -f /var/log/nginx/error.log
要在查看文件时中断tail
命令,请按Ctrl + C
。
要在重新创建文件时继续监视文件,请使用-F
选项。
tail -F filename.txt
当tail
命令跟随旋转的日志文件时,此选项很有用。 与-F
选项一起使用时,tail
命令将在文件再次可用后立即重新打开它。
7.6 同时显示多个文件
如果提供了多个文件作为tail
命令的输入,它将显示每个文件的最后十行。
tail filename1.txt filename2.txt
您可以使用与显示单个文件时相同的选项。 此示例显示文件filename1.txt
和filename2.txt
的最后20行:
tail -n 20 filename1.txt filename2.txt
7.7 结合其他命令使用tail
通过使用管道将标准输出从其他实用程序重定向到其他实用程序,可以将tail
命令与其他命令结合使用。
例如,要监视apache访问日志文件并仅显示包含IP地址192.168.42.12
的行,可以使用:
tail -f /var/log/apache2/access.log | grep 192.168.42.12
以下ps
命令将显示按CPU使用率排序的前十个正在运行的进程:
ps aux | sort -nk +3 | tail -5
tail 命令是head命令`的补充;