浅谈Liunx常用命令

楔子

又到了一年一度的毕业季,Linux作为今年新生培训的一门课程,我们借此机会对其整理了一番。一千个读者就有一千个哈姆雷特,而对于不通岗位的IT人员需要掌握的Linux技能也不太一样。在本文中我们列举出了对于开发人员最为常用的一些命令和使用场景作为Linux的入门知识点,希望可以引导新生能够快去拥抱Linux的怀抱。

正文

一、 单一命令

1. ls命令
* 作用

显示指定路径下的文件信息

* 格式
ls [options] 目录
* 主要参数说明

options:

-a, --all:不隐藏任何以“." 字符开始的项目。
-l:使用较长格式列出信息。
-m:所有项目以逗号分隔,并填满整行行宽。
-R, --recursive:同时列出所有子目录层。
2. cd命令
* 作用

显示指定路径下的文件信息

* 格式
cd 目录
* 主要参数说明

路径:

空:用户主目录
~:用户主目录
-:上一次进入的目录
..:进入上一层级
3. grep命令
* 作用

全称:Global Regular Expression Print,对文本进行全局正则搜索

* 格式
grep [options] pattern 文件
* 主要参数说明

options:

-c:只输出匹配行的计数。
-I:不区分大小写(只适用于单字符)。
-h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-n:显示匹配行及行号。
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。

文件: 支持多个文件,使用空格分隔

* 场景
  1. 在日志中查询发生在09:25:30的日志
* 示例
1. grep '09:25:30' debug.log
4. mv命令
* 作用

用来为文件或目录改名,或者将文件由一个目录移入另一个目录中

* 格式
mv [options] 源文件或目录 目标文件或目录
* 主要参数说明

options:

-i:交互方式操作。 要求用户回答"y""n"
-f:禁止交互操作。 操作过程中不给任何指示
* 场景
  1. 修改文件名称为oldFile的文件修改名称为newFile
  2. 备份console.log日志到logback文件夹中
* 示例
1. mv -f oldFile newFile
2. mv console.log ../../logback
5. find命令
* 作用

在指定目录下搜索文件

* 格式
find 路径 [options] [expression]
* 主要参数说明

options:

-depth:使用深度级别的查找过程方式,在某层指定目录中优先查找文件内容。
-maxdepth levels:表示至多查找到开始目录的第level层子目录。level是一个非负数,如果level是0的话表示仅在当前目录中查找。
-mindepth levels:表示至少查找到开始目录的第level层子目录。

expression:

-name:支持统配符*和?。
-regex:正则表达式
* 场景
  1. /bin目录下显示以ch开头的命令
* 示例
1.1 find . -name 'ch*'
1.2 find . -regex './ch.*'

out:

./chgrp
./chown
./chmod

这里需要注意的是所有查询到的结果都包含了路径信息

6. cp命令
* 作用

将一个或多个源文件或者目录复制到指定的目的文件或目录

* 格式
cp [options] 源文件或目录 目标文件或目录
* 主要参数说明

options:

-R/r:递归处理,将指定目录下的所有文件与子目录一并处理
-f:强行复制文件或目录,不论目标文件或目录是否已存在
-i:覆盖既有文件之前先询问用户
-b:覆盖已存在的文件目标前将目标文件备份
-S:在备份文件时,用指定的后缀"SUFFIX"代替文件的默认后缀
7. scp命令
* 作用

Linux下进行远程拷贝文件的命令,和它类似的命令有cp

* 格式
scp [options] 源文件或目录 目标文件或目录
* 主要参数说明

options:

-r:以递归方式复制
-P:指定远程主机的端口号

目标文件或目录:

目标文件或目录:user@host:path/filename
8. rm命令
* 作用

删除一个目录中的一个或多个文件或目录

* 格式
rm [options] 文件或目录 
* 主要参数说明

options:

-d:直接把欲删除的目录的硬连接数据删除成0,删除该目录
-f:强制删除文件或目录
-i:删除已有文件或目录之前先询问用户
-r或-R:递归处理,将指定目录下的所有文件与子目录一并处理
--preserve-root:不对根目录进行递归操作
* 场景

强制删除某个服务下nohup日志和log文件夹下的日志

* 示例
rm -rf /log nohup
9. file命令
* 作用

显示文件基本信息

* 格式
file [options] 文件
* 主要参数说明

options:

-i: 显示MIME类别
-b:隐藏文件名称
-L:文件类别
10. mkdir命令
* 作用

创建文件夹

* 格式
mkdir [options] 路径
* 主要参数说明

options:

-m, --mode=模式:设定权限<模式>
11. touch命令
* 作用
  • 创建空文件
  • 修改文件时间(不常用)
* 格式
touch [options] 文件名
12. more命令
* 作用

分屏显示文本信息

* 格式
more [options] 文本文件
* 主要参数说明

options:

-<数字>:指定每屏显示的行数;
-d:显示"[press space to continue,'q' to quit.]""[Press 'h' for instructions]"-c:不进行滚屏操作。每次刷新这个屏幕;
-s:将多个空行压缩成一行显示;
-u:禁止下划线;
+<数字>:从指定数字的行开始显示。
13. chmod命令
* 作用

变更文件或目录的权限

* 格式
chmod [options] 授权模式 文件或文件夹
* 主要参数说明

options:

-R或--recursive:递归处理,将指令目录下的所有文件及子目录一并处理

授权模式:

u:User,即文件或目录的拥有者;
g:Group,即文件或目录的所属群组;
o:Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围;
a:All,即全部的用户,包含拥有者,所属群组以及其他用户;
r:读取权限,数字代号为"4";
w:写入权限,数字代号为"2";
x:执行或切换权限,数字代号为"1";
-:不具任何权限,数字代号为"0";
s:特殊功能说明:变更文件或目录的权限。
* 场景
  1. start.sh脚本赋予对当前用户读写执行,用户所在组读写,其他用户只读权限
  2. start.sh脚本赋予对当前用户、组、其他用户可执行权限
  3. start.sh脚本删除其他用户的可执行权限
* 示例
1 chmod 764 start.sh
2 chmod +x start.sh
3 chmod o-x start.sh
14. chown命令
* 作用

改变某个文件或目录的所有者和所属的组

* 格式
chown [options] 用户组 文件或文件夹
* 主要参数说明

options:

-R或--recursive:递归处理,将指定目录下的所有文件及子目录一并处理

用户组:

用户组(用户:组):指定所有者和所属工作组。当省略":组",仅改变文件所有者
* 场景
  1. app.sh是通过root用户拷贝至服务器的,但是要求使用app组下的app用户来执行该脚本,所以这里需要修改该脚本的所属用户和组
* 示例
chown app:app app.sh
15. sort命令
* 作用

将文件进行排序,并将排序结果标准输出

* 格式
sort [options] 文件
* 主要参数说明

options:

-n:依照数值的大小排序
-o<输出文件>:将排序后的结果存入制定的文件
-r:以相反的顺序来排序
-t<分隔字符>:指定排序时所用的栏位分隔字符
-d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符
-f:排序时,将小写字母视为大写字母
-i:排序时,除了040176之间的ASCII字符外,忽略其他的字符
-b:忽略每行前面开始出的空格字符
16. wc命令
* 作用

计算文件的Byte数、字数或是列数

* 格式
wc [options] 文件
* 主要参数说明

options:

-c或--bytes或--chars:只显示Bytes数;
-l或--lines:只显示列数;
-w或--words:只显示字数。
17. head命令
* 作用

显示文件的开头的内容

* 格式
head [options] 文件
* 主要参数说明

options:

-n<数字>:指定显示头部内容的行数;
-c<字符数>:指定显示头部内容的字符数;
-v:总是显示文件名的头信息;
-q:不显示文件名的头信息。
18. tail命令
* 作用

文件中的尾部内容,默认显示末尾10行,可以实时刷新文件最后几行内容

* 格式
tail [options] 文件
* 主要参数说明

options:

-c<N>或--bytes=<N>:输出文件尾部的NN为整数)个字节内容
-n<N>或--line=<N>:输出文件的尾部NN位数字)行内容
-f:显示文件最新追加的内容。
* 场景
  1. 实时刷新日志文件console.log
* 示例
tail -f console.log
19. cut命令
* 作用

显示文件内容

* 格式
cut [options] 文件
* 主要参数说明

options:

-b:仅显示行中指定直接范围的内容
-c:仅显示行中指定范围的字符
-d:指定字段的分隔符,默认的字段分隔符为"TAB"
-f:显示指定列的内容
20. whereis命令
* 作用

定位指令的二进制程序、源代码文件和man手册页等相关文件的路径

* 格式
whereis [options] 文件
* 主要参数说明

options:

-b:只查找二进制文件
-f:不显示文件名前的路径名称
* 场景
  1. 查询whereis的安装路径
* 示例
whereis -b whereis
21. which命令
* 作用

查找并显示给定Linux指令的绝对路径

* 格式
which [options] 指令
* 场景
  1. 查询whereis的安装路径
* 示例
which whereis
22. ping 命令
* 作用

测试主机之间网络的连通性

* 格式
ping [options] 目标主机
23. ifconfig命令
* 作用

显示Linux内核中网络接口的网络参数

* 格式
ifconfig [options]
* 查询结果
eth0      Link encap:Ethernet  HWaddr 00:16:3E:13:CC:E2  
          inet addr:172.16.36.69  Bcast:172.16.47.255  Mask:255.255.240.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:10024870 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6233698 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1472440631 (1.3 GiB)  TX bytes:648127065 (618.1 MiB)
* 结果参数说明
eth0:表示第一块网卡
HWaddr:网卡的物理地址(MAC地址)
inet addr:网卡的IP地址
Bcast:广播地址
Mask:子网掩码地址
24. df命令
* 作用

显示磁盘分区上的可使用的磁盘空间

* 格式
df [options] 目录
* 主要参数说明

options:

-h--human-readable:以可读性较高的方式来显示信息
-a--all:包含全部的文件系统
25. sed命令
* 作用

流编辑器

* 格式
sed [options] 命令 文件
* 主要参数说明

options

-n或--quiet或——silent:仅显示script处理后的结果
-i:直接编辑文本文件

命令:

s:替换指定字符
d:删除,删除选择的行

替换标记:

g:表示行内全面替换。  
p:表示打印行。  

元字符集:

^ 匹配行开始,如:/^sed/匹配所有以sed开头的行
$ 匹配行结束,如:/sed$/匹配所有以sed结尾的行
. 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d
* 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行
[] 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed
[^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行
\(..\) 匹配子串,保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers
& 保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**
\< 匹配单词的开始,如:/\<love/匹配包含以love开头的单词的行
\> 匹配单词的结束,如/love\>/匹配包含以love结尾的单词的行
x\{m\} 重复字符x,m次,如:/0\{5\}/匹配包含5个0的行
x\{m,\} 重复字符x,至少m次,如:/0\{5,\}/匹配至少有5个0的行
x\{m,n\} 重复字符x,至少m次,不多于n次,如:/0\{5,10\}/匹配5~10个0的行
* 场景
  1. 我们从windows上拷贝文本文件至Liunx时,在文件每行末尾都会带上一个^M的特殊字符,为了在某些软件中不影响正常使用,需要将其去掉

  2. 这里有一个配置文件app.properties,里面的内容如下

    key=123456
    time=2018-06-11

    使用sed读取key的值

  3. 删除test.txt的第1行到第3行

  4. 删除test.txt的第1行到最后一行

  5. 删除test.txt的最后一行

  6. 删除空白行

* 示例
1. sed -i 's/\r//g' filename
2. sed '/^key/!d;s/.*=//g' app.properties

这里值得注意的是

sed '表达式' | sed '表达式' == sed '表达式;表达式'
3. sed '1,3d' test.txt
4. sed '1,$d' test.txt
5. sed '$d' test.txt
6. sed '/^$/d' test.txt
26. tr命令
* 作用

对来自标准输入的字符进行替换、压缩和删除

* 格式
tr [options] 字符集1 [字符集2]
* 主要参数说明

options:

-c或--complerment:取代所有不属于第一字符集的字符
-d或--delete:删除所有属于第一字符集的字符
-s或--squeeze-repeats:把连续重复的字符以单独一个字符表示
-t或--truncate-set1:先删除第一字符集较第二字符集多出的字符
* 场景
  1. 删除hello 123 world 456中的数字
  2. 将字符串123456中非2项都改成字符A
* 示例
1. echo "hello 123 world 456" | tr -d '0-9'
2. echo 123456 | tr -c '2' 'A'
27. ps命令
* 作用

用于报告当前系统的进程状态

* 格式
ps [options]
* 主要参数说明
-ef:显示所有包含其他使用者的行程,使用System V Style显示
-aux:显示所有包含其他使用者的行程,使用Unix Style显示
28. kill命令
* 作用

删除执行中的程序或工作

* 格式
kill [options]
* 主要参数说明
-n:信号编号,这里最常用的是-9,表示强制退出进程
* kill -9 和 kill的区别

执行kill命令,系统会发送一个SIGTERM信号给对应的程序。当程序接收到该signal信号后,将会发生以下事情

  1. 程序立刻停止
  2. 当程序释放相应资源后再停止
  3. 程序可能仍然继续运行

大部分程序接收到SIGTERM信号后,会先释放自己的资源,然后再停止。但是也有程序可能接收信号后,做一些其他的事情(如果程序正在等待IO,可能就不会立马做出响应),也就是说,SIGTERM多半是会被阻塞的

然而kill -9命令,系统给对应程序发送的信号是SIGKILL,即exit。exit信号不会被系统阻塞,所以kill -9能顺利杀掉进程

29. who命令
* 作用

显示目前登录系统的用户信息

* 格式
who:显示当前所处的用户和登录的用户
who am i:显示登录的用户
whoami:显示当前所处的用户
30. su命令
* 作用

切换当前用户身份到其他用户身份

* 格式
su - 用户名称
* 场景
  1. 切换至oracle用户
  2. 切换至root用户
* 示例
1. su - oracle
2. su - [root]
31. tar命令
* 作用

为linux的文件和目录创建档案

* 格式
- 打包/拆包
tar -cvf 打包后的文件(*.tar) 待打包的文件
tar [options] -xvf 打包后的文件(*.tar)
- 压缩/解压
tar -zcvf 压缩后的文件(*.tar.gz) 待压缩的文件
tar [options] -xzvf 压缩后的文件(*.tar.gz)
* 主要参数说明

options:

-C <目录>:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项
32. zip/unzip命令
* 作用

压缩,解压zip文件

* 格式
zip [options] 压缩后的文件(*.zip) 待压缩的文件/目录
unzip [options] 压缩后的文件(*.zip)
* 主要参数说明

options:

-zip:
-r:递归目录下的所有文件

unzip:
-d:解压后的文件夹

二、常用工具

1. vim工具
* 简介

从vi 发展出来的一个文本编辑器,与vi的使用方式相同

* 使用教程

vim分为三种模式

命令模式(Command mode)
输入模式(Insert mode)
底线命令模式(Last line mode

命令模式:

进入vim默认使用命令模式,在该模式下支持以下命令:

i/a/o 切换到输入模式,以输入字符
: 切换到底线命令模式,以在最底一行输入命令

- 剪切/删除
x,X x为向后删除一个字符 (相当于[del]按键),X为向前删除一个字符(相当于[backspace]键) 
dd 剪切光标所在的一整行,常作为删除使用
ndd n为数字,从光标向下剪切n行,常作为删除使用
d1G 剪切光标所在到第一行,常作为删除使用
dG 剪切光标所在到最后一行,常作为删除使用
d$ 剪切光标所在处,到该行的最后一个字符,常作为删除使用
d0 剪切光标所在处,到该行的第一个字符,常作为删除使用

- 复制
yy 复制光标所在行
nyy 从光标所在行向下复制n行
y1G 复制光标所在行到第一行
yG 复制光标所在行到最后一行
y$ 复制光标所在处,到该行的最后一个字符
y0 复制光标所在处,到该行的第一个字符

- 粘贴
p,P p为将已复制的数据在光标下一行贴上,P则为贴在游标上一行

- 撤销
u 撤销上一步的操作
Ctrl+r 恢复上一步被撤销的操作

输入模式:

字符按键以及Shift组合,输入字符
ENTER,回车键,换行
BACK,退格键,删除光标前一个字符
DEL,删除键,删除光标后一个字符
方向键,在文本中移动光标
HOME/END,移动光标到行首/行尾
Page Up/Page Down,上/下翻页
Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
ESC,退出输入模式,切换到命令模式

底线命令模式:

:q 退出程序
:w 保存文件
:set nu 显示行号
:set nonu 取消行号
:! 强制命令,比如:q!表示强制退出vim

- 搜索
:/word 从当前光标向下搜索word字符
:?word 从当前光标向上搜索word字符
在执行搜索时可以使用n来寻找下一个匹配的字符,使用N来寻找上一个匹配的字符

- 替换
:s/word1/word2/[g] 替换当前行第一个word1为word2,g代表替换指定行所有匹配到的字符
:n,$s/word1/word2/[g] 替换从第n行到最后一行第一个word1为word2
:%s/word1/word2/[g] 替换所有行第一个word1为word2

- 删除
:g/word/d 删除包含关键字word所在的行
2. awk工具
* 简介

是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具

由于awk的强大,所以我们这里只介绍它最为常用的功能,字符串切割

* 格式
awk [options]  '[pattern] {action}' 文件
* 主要参数说明

options:

-F:指定文本的分隔符,如果不指定则默认空格

pattern:

/正则表达式/:使用通配符的扩展集。
关系表达式:使用运算符进行操作,可以是字符串或数字的比较测试。

action:

这里其实就是awk内置的函数

print:字符打印
* 场景

假设你有一个名为 emp.data 的文件,其中包含员工的姓名、薪资(美元/小时)以及小时数,一个员工一行数据,如下所示:

张三,60,36
李四,40,50
王五,120,0
赵六,50,43
孙七,54,0

现在需要显示工作时间超过0小时的员工姓名和工资

* 示例
awk -F , '$3 > 0 {print $1, $2 * $3}' emp.data

三、组合命令

1. 串联命令
1.1. 管道符
* 作用

将命令1的正确输出作为命令2的操作对象

* 格式
命令1 | 命令2
1.2. xargs 命令
* 作用

给命令传递参数的一个过滤器,它能够捕获一个命令的输出,然后传递给另外一个命令 。它的强大之处在于具有for循环的功能,因此可以简化shell脚本

* 格式

该命令需要搭配管道符使用

命令1 | xargs [options] 命令2

options:

-I 指定一个特殊字符作为接受命令1输出结果的变量,这里常使用{}
2. 复杂场景
2.1 场景1
* 场景描述

/bin目录下显示以ch开头的命令

* 示例
ls /bin | grep '^ch'
2.2 场景2
* 场景描述

在部署完某些中间件以后,会修改配置文件中关于本机的IP,而通过组合命令就能轻松获取到本机的IP

* 示例
ifconfig eth0 | grep 'inet addr' | awk '{print $2}' | awk -F : '{print $2}'
2.3 场景3
* 场景描述

某次发现某个数据访问层执行速度异常慢,这时候需要检索一些指定时间段内是否还有其他服务的数据访问层执行速度也异常。这里我们知道所有服务的标识都是SSP,而其中也有一些临时备份文件,需要过滤掉。而记录数据执行层具体执行时间的日志行具有执行sql的特殊标识

* 示例
ls ./ |grep SSP |grep -v 'tar\|war\|back0525\|201805251922' | xargs -I {} grep '09:40:2\|09:40:3\|09:40:4\|09:40:5' ./{}/log/console.log |grep 执行sql > log.txt
2.4 场景4
* 场景描述

查看User服务当前的进程信息,并获取到其进程号,然后kill掉

* 示例
ps -ef | grep User | grep -v grep | awk '{print $2}' | xargs kill -9

四、参考

1. Linux帮助文档
2. 查询网站:http://man.linuxde.net/

欢迎关注微信公众号,在这里可以提前看到下一期文章哦~

mark

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值