Linux常用命令

Published at 2020-04-29 21:14

Author:zhixy

View:946


由于部分特殊符号markdown的html页面显示问题,文中采用了全角格式,包括*,$。请忽略符号前后形似的空格。

磁盘管理

ls

用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)。

常用参数:

  • -a :显示所有文件及目录 (ls内定将文件名或目录名开头为"."的文件视为隐藏档,不会列出)
  • -l :除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出
  • -t :将文件依建立时间之先后次序列出
# 列出目前工作目录下所有文件及目录,包括隐藏文件
[user@server ~]# ls -la

pwd

用于显示工作目录。

# 列车目前工作目录的绝对路径
[user@server ~]# pwd

cd

用于切换当前工作目录至 dirName(目录参数)。

常用参数:

  • . 代表当前目录
  • .. 代表上层目录
  • ~ 代表当前用户的宿主目录
  • / 代表转换到根目录
# 跳到 /usr/bin/
[user@server ~]# cd /usr/bin/

mkdir

用于建立名称为 dirName 之子目录。

常用参数:

  • -p 确保目录名称存在,不存在的就建一个
# 在工作目录下的 BBB 目录中,建立一个名为 Test 的子目录。 若 BBB 目录原本不存在,则建立一个。
[user@server ~]# mkdir -p BBB/Test

文件管理

cat

用于连接文件并打印到标准输出设备上。

常用参数:

  • -n :由 1 开始对所有输出的行数编号;
  • -b :和 -n 相似,只不过对于空白行不编号;
  • -s :当遇到有连续两行以上的空白行,就代换为一行的空白行。
  • -a : 显示所有字符
# 把 textfile1 的文档内容输出到屏幕
[user@server ~]# cat textfile1

# 把 textfile1 的文档内容加上行号后输入 textfile2
[user@server ~]# cat -n textfile1 > textfile2

# 把 textfile1 和 textfile2 的文档内容加上行号
# (空白行不加)之后将内容附加到 textfile3
[user@server ~]# cat -b textfile1 textfile2 >> textfile3

# 清空 test.txt 文档内容
[user@server ~]# cat /dev/null > test.txt

Note: dev/null:在类 Unix 系统中,/dev/null 称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据。

more

逐页的形式显示文件内容。

常用参数:

  • -num 一次显示的行数;
  • -p 不以卷动的方式显示每一页,而是先清除萤幕后再显示内容;
  • -s 当遇到有连续两行以上的空白行,就代换为一行的空白行;
  • num 从第 num 行开始显示。
#逐页显示testfile文档内容,如有连续两行以上空白行则以一行空白行显示
[user@server ~]# more -s textfile

#从第20行开始显示testfile的内容
[user@server ~]# more 20 testfile

常用操作命令:

  • Enter 向下n行,需要定义。默认为1行;
  • CtrlF 向下滚动一屏;
  • 空格键 向下滚动一屏;
  • CtrlB 返回上一屏;
  • :f 输出文件名和当前行的行号;
  • !命令,调用Shell,并执行命令;
  • h 显示帮助文档;
  • q 退出;

less

逐页的形式显示文件内容,与more类似。

touch

用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。

#使用指令"touch"修改文件"testfile"的时间属性为当前系统时间
[user@server ~]# touch testfile

#使用指令"touch"时,如果指定的文件不存在,则将创建一个新的空白文件。
[user@server ~]# touch file

cp

用于复制文件或目录

常用参数:

  • -r :若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
  • -f :覆盖已经存在的目标文件而不给出提示。
  • -i :与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。
  • -l :不复制文件,只是生成链接文件。
  • -p :除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
#使用指令"cp"将当前目录"test/"下的所有文件复制到新目录"newtest"下
[user@server ~]# cp –r test/ newtest

rm

用于删除一个文件或者目录。

常用参数:

  • -i :删除前逐一询问确认。
  • -f :即使原档案属性设为唯读,亦直接删除,无需逐一确认。
  • -r :将目录及以下之档案亦逐一删除。
#删除文件可以直接使用rm命令,若删除目录则必须配合选项"-r"
[user@server ~]# rm test.txt
[user@server ~]# rm -r homework

mv

用来为文件或目录改名、或将文件或目录移入其它位置。

常用参数:

  • -i :若指定目录已有同名文件,则先询问是否覆盖旧文件;
  • -f :在mv操作要覆盖某已有的目标文件时不给任何指示。
#将文件 aaa 更名为 bbb 
[user@server ~]# mv aaa bbb

#将info目录放入logs目录中。注意,如果logs目录不存在,则该命令将info改名为logs。
[user@server ~]# mv info/ logs

find

用来在指定目录下查找文件。

常用参数:

  • -type c :文件类型是 c 的文件; d: 目录,c: 字型装置文件,b: 区块装置文件,p: 具名贮列,f: 一般文件,l: 符号连结。
  • -size n :文件大小。 是n单位,b代表512位元组的区块,c表示字元数,k表示 kilo bytes;
  • -empty :空的文件;
  • -name name :文件名称符合 name 的文件;
  • -iname name :文件名称符合 name 的文件,忽略大小写。
#查找目前目录及其子目录下,扩展名为 c 的文件
[user@server ~]# find . -name "*.c"

#查找目前目录其下子目录中所有一般文件
[user@server ~]# find . -type f

diff

用于比较文件的差异。

常用参数:

  • -y :以并列的方式显示文件的异同之处;
  • -w :在使用-y参数时,指定栏宽;
  • -i :不检查大小写的不同;
  • -q :仅显示有无差异,不显示详细的信息;
  • --suppress-common-lines :在使用-y参数时,仅显示不同之处。
#比较两个文件
[user@server ~]# diff test1.txt test2.txt 

#并排格式输出,列宽50
[user@server ~]# diff test1.txt test2.txt  -y -W 50

which

在环境变量$PATH设置的目录里查找符合条件的文件(主要用于查找各执行程序)。

#查看指令"bash"的绝对路径
[user@server ~]# which bash

scp

用于Linux之间(远程)复制文件和目录。

#复制local_file到远程主机remote_ip的目录remote_folder(全路径),用户名remote_username
[user@server ~]# scp local_file remote_username@remote_ip:remote_folder

#复制远程主机remote_ip的目录remote_folder下的remote_file,到本地目录local_folder,并存为local_file
[user@server ~]# diff remote_username@remote_ip:remote_folder/remote_file local_folder/local_file

tar

用于备份文件。

常用参数:

  • -c :建立新的备份文件;
  • -f :指定备份文件;
  • -v :显示指令执行过程;
  • -x : 抽取 .tar 文件里的内容(解压);
  • -z :通过gzip指令处理备份文件.
# 压缩 a.c文件为test.tar.gz
[user@server ~]# touch a.c
[user@server ~]# tar -czvf test.tar.gz a.c
# 解压文件
[user@server ~]# tar -xzvf test.tar.gz

文档编辑

wc

用于计算字数。

常用参数:

  • -l :只显示行数;
  • -w :只显示字数;
  • -c :只显示Bytes数.
# 在默认的情况下,wc将计算指定文件的行数、字数,以及字节数
[user@server ~]# wc testfile

split

用于将一个文件分割成数个。

常用参数:

  • -<行数> : 指定每多少行切成一个小文件;
  • -b<字节> : 指定每多少字节切成一个小文件;
  • -c<字节> : 与参数"-b"相似,但是在切割时将尽量维持每行的完整性;
  • [输出文件名] : 设置切割后文件的前置文件名,split会自动在前置文件名后再加上编号。
#使用指令"split"将文件"README"每6行切割成一个文件 
[user@server ~]# split -6 README

join

用于将两个文件中,指定栏位内容相同的行连接起来。

[user@server ~]# cat testfile_1 #testfile_1文件中的内容
Hello 95 #例如,本例中第一列为姓名,第二列为数额  
Linux 85  
test 30
[user@server ~]# cat testfile_2 #testfile_2文件中的内容
Hello 2005 #例如,本例中第一列为姓名,第二列为年份  
Linux 2009  
test 2006
[user@server ~]# join testfile_1 testfile_2 #连接testfile_1、testfile_2中的内容
Hello 95 2005
Linux 85 2009  
test 30 2006

cut

用于显示每行从开头算起 num1 到 num2 的文字

常用参数:

  • -b :以字节为单位进行分割;
  • -c :以字符为单位进行分割;
  • -d :自定义分隔符,默认为制表符;
  • -f :与-d一起使用,指定显示哪个区域;
  • --complement :选项提取指定字段之外的列。
#提取test.txt文件中,以制表符分割的,第2列 
[user@server ~]# cut -f 2 test.txt

#提取test.txt文件中,以';'分割的,第2列 
[user@server ~]# cut -f 2 -d ';' test.txt

paste

用于合并文件的列。

常用参数:

  • -d<间隔字符>: 用指定的间隔字符取代跳格字符;
  • -s : 串列进行而非平行处理.
[user@server ~]# cat pas1
ID123
ID345
ID456
ID789
[user@server ~]# cat pas2
come
back
hello
world
[user@server ~]# paste -d: pas1 pas2#间隔字符为“:”
ID123:come
ID345:back
ID456:hello
ID789:world
[user@server ~]# paste -s pas1 pas2
ID123    ID345    ID456    ID789
come    back    hello    world
# paste命令还有一个很有用的选项(-)。即对每一个(-),从标准输入中读一次数据。
[user@server ~]# cat pas1 pas2 | paste - - -
ID123   ID345   ID456
ID789   come    back
hello   world

sort

用于将文本文件内容加以排序。

常用参数:

  • -b:忽略每行前面开始出的空格字符;
  • -d: 排序时,处理英文字母、数字及空格字符外,忽略其他的字符;
  • -r :以相反的顺序来排序.

uniq

用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。

常用参数:

  • -c :在每列旁边显示该行重复出现的次数;
  • -d :仅显示重复出现的行列;
  • -u :仅显示出一次的行列.
# 利用sort对行排序(让重复的行相邻),通过管道“|”,输入 uniq,并统计各行在文件中出现的次数
[user@server ~]# sort testfile1 | uniq -c

tr

用于转换或删除文件中的字符。

常用参数:

  • -c :反选设定字符. 也就是符合 SET1 的部份不做处理,不符合的剩余部份才进行转换;
  • -d :删除指令字符;
  • -s :缩减连续重复的字符成指定的单个字符;
# 大小写转换
[user@server ~]# cat testfile | tr a-z A-Z

grep

查找文件里符合条件的字符串。该命令通常与管道命令一起使用,用于对一些命令的输出进行筛选加工等。

常用参数:

  • -a :将二进制文件以text文件的方式查找数据;
  • -c : 计算找到“查找字符串”的次数;
  • -i :不区分大小写;
  • -n : 添加行号;
  • -w: 只匹配过滤的单词,类似于精确匹配;
  • -v :反向选择,相当于取反(排除指定字符串).
#利用grep命令查找文件linux.txt 中的字符串you"
[user@server ~]# cat linux.txt 
this is linux
how are you
fine thank you

#查找含有"you"的行
[user@server ~]# grep "you" linux.txt 
how are you
fine thank you

#-v: 不包含,相当于取反
[user@server ~]# grep -v "you" linux.txt 
this is linux

#-n:添加行号
[user@server ~]# grep -n "you" linux.txt
1:how are you
2:fine thank you

#-c :统计匹配的行数,不是匹配字符串的次数
[user@server ~]# grep -c "you" linux.txt
2

#通过正则表达式实现模糊搜索
[user@server ~]# ls -l / | grep -e '\s[SD]e' #查找在一个空格后出现一个S或D之后又有一个e的行

sed

用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。

常用参数:

  • -n:关闭自动输出模式空间的内容;

  • -e:直接在命令行模式上进行sed动作编辑,此为默认选项;

  • -f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作;

  • -i:就地编辑文件,如果指定了后缀,则备份源文件;

  • -r: 在脚本命令中使用扩展正则表达式.

常用命令:

a:新增 、c:取代 、d:删除 、i:插入、p:打印

[user@server ~]# cat testfile
Hello 2005 
Linux 2009  
test 2006

#在每一行后面增加字符串"kkk"
[user@server ~]# sed 'akkk' testfile
Hello 2005 
kkk
Linux 2009
kkk
test 2006
kkk

#替换每行中出现的'2'为'1'
[user@server ~]# sed 's/2/1/' testfile # 仅替换第一个出现的'2', 's/2/1/g' 替换所有的'2'
Hello 1005
Linux 1009
test 1006

#删除以Li开头09结尾的行
[user@server ~]# sed '/^Li.*09$/d' testfile
Hello 2005   
test 2006

awk

是一种处理文本文件的语言,是一个强大的文本分析工具。

常用参数:

#ls -l 的结果通过管道交给awk逐行扫描处理
[user@server ~]# ls -l
total 4
-rw-rw-r-- 1 user user ...... linux.txt
#打印每1行的第1列
[user@server ~]# ls -l | awk '{print $1}' 
total
lrwxrwxrwx
dr-xr-xr-x
drwxr-xr-x
drwxr-xr-x
....

#打印每1行的第6列
[user@server ~]# ls -l | awk '{print $6}'

Dec
May
Aug
Aug
Jan
Dec

[user@server ~]# cat linux.txt 
this is linux
how are you
fine thank you

#整行输出
[user@server ~]# awk '{print $0}' linux.txt
this is Linux
how are you
fine thank you

#输出最后一列
[user@server ~]# awk '{print $NF}' Linux.txt 
Linux
you
you

#一次输出多列,使用逗号隔开要输出的列
[user@server ~]# awk '{print $1, $3}' Linux.txt
this Linux
how you
fine you

#给文件加上自定义的列
[user@server ~]# cat message.txt 
A 20 man 
B 23 woman 
C 21 man 
[user@server ~]# awk '{print "name:" $1, "age:" $2, "sex:" $3}' message.txt 
name:A age:20 sex:man 
name:B age:23 sex:woman 
name:C age:21 sex:man

#-F 参数可自定义分割列的字符,如:-F '\t' 用制表符分割列
[user@server ~]# awk -F '\t' '{print $1}' message.txt

#考察第1列,如大于50则输出整行
[user@server ~]# awk -F '\t' '{if($1>50){print $0}}' result.txt