《弟哥带你学Linux系列》 - 第六章 Linux基础命令(重要)篇

134 阅读12分钟

man

man命令用于查看命令的帮助文档,其格式为 man 命令,如

man ls

tail

tail [参数] [文件]

从尾部查看文本,默认10 行 -n 显示n行

tail -f 查看动态文本,即会动态更新最后十行并显示

head

tail [参数] [文件]

从头查看文本,默认10 行 -n 显示n行

grep

grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。

grep [-abcEFGhHilLnqrsvVwxy][-A<显示行数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]

shutdown 关机指令

shutdown [OPTIONS] [TIME] [WALL]

OPTIONS:

TIME

两种方式:

  1. hh:mm,24小时制,表示在几点几分关机
  2. +m,m表示过几分钟后关机 now 相当于+0 

默认为+1

wall是一个信息,发给所有现在登录这台机器的人,告诉他们要关机了

关机的时候 输入 shutdown -c可以取消关机

\

rm

用于删除文件

rm -r

可用于删除目录

rm -f

表示强制删除。它不再询问是否删除,而是直接删除。如果后面跟一个不存在的文件或者目录,则不会报错。慎用

环境变量PATH

在讲环境变量之前,先介绍一下命令which,它用于查找某个命令的绝对路径。

表示我们用rm时,相当于用rm -i

但直接用/bin/rm时,是相当于不加任何参数的rm

这便是环境变量了,干啥用的不用多说

新增环境变量:

export PATH=$PATH:/xxx

用于将xxx目录加入环境变量,需要注意: 直接使用 export 设置的变量都是临时变量,也就是说退出当前的 shell ,为该变量定义的值便不会生效了

永久新增环境变量

法一: 修改 /etc/profile

vi /etc/profile

export PATH=$PATH:/xxx # 在配置文件中加入此行配置

退出后

source /etc/profile #修改完这个文件必须要使用这个命令在,使不用重启系统的情况下修改的内容生效。

法二:修改 .bashrc 文件是在当前用户 shell 下生效

vi /root/.bashrc?

在里面加入:

export PATH=$PATH:/xxx

修改这个文件之后同样也需要使用 source 或者是 . 使配置文件生效。

touch

用于创建文件

cp

cp是copy(即复制)的简写,该命令的格式为: cp [选项] [来源文件][目的文件]。下面介绍命令cp的几个常用选项。

cp -r

用于复制目录

mv

注意:第一第三种情况如何分辨:如果源文件是目录,则是第一种情况,源文件是文件,则是第三种情况

cat

命令cat(它并不是某个单词的简写,大家可以通过man cat命令查看它的解释)是比较常用的一个命令,用于查看一个文件的内容并将其显示在屏幕上。cat后面可以不加任何选项,直接跟文件名。下面介绍它的两个常用选项:

-n 查看文件时,把行号也显示到屏幕上。

上例中出现了符号>>,它跟前面介绍的符号>类似,其作用也是重定向,即把前面的内容输入到后面的文件中,但符号>>是“追加”的意思。当使用符号>时,如果文件中有内容,则会删除文件中原有的内容,而使用符号>>则不会删除原有的内容。

-A 显示所有的内容,包括特殊字符

上例中,若不加-A选项,那么每行后面的$符号是看不到的。

tac

反向cat,倒序显示

more

命令more也用于查看一个文件的内容,后面直接跟文件名。当文件内容太多,一屏不能全部显示时,用命令cat肯定是看不了前面的内容,这时可以使用命令more。当看完一屏后,按空格键可以继续看下一屏,看完所有内容后就会退出,按Ctrl+D可以向上翻屏,按Ctrl+F向下翻屏(同空格)。如果你想提前退出,按q键即可。

less

命令less的作用和命令more一样,后面直接跟文件名,但命令less比more功能要多一些。按空格键可以翻页,按j键可以向下移动(按一下就向下移动一行),按k键可以向上移动。在使用more和les:查看某个文件时,你可以按一下/键,并输入一个字符串((如root),然后回车,这样就可以查找这个字符串了。如果是查找多个该字符串,可以按n键显示下一个。另外,也可以用?键替代/键来搜索字符串,唯一不同的是,/是在当前行向下搜索,而?是在当前行向上搜索。

pwd

执行 pwd 指令可立刻得知您目前所在的工作目录的绝对路径名称。

du

du命令用来计算文件或者目录的大小,-k表示以KB为单位

[root@localhost ~]# du -k
12	./.ssh
0	./dir3/g
32	./dir3
76	.

[root@localhost dir3]# du -k test
4	test

\

cut

cut命令用来截取某一个字段,其格式为cut -d '分隔字符' [-cf] n,这里的n是数字。该命令有如下几个可用选项。

-d:后面跟分隔字符,分隔字符要用单引号括起来。
-c:后面接的是第几个字符。
-f:后面接的是第几个区块。即被分隔字符分隔的第几个

实例:

# head -5 /etc/passwd | cut -d ':' -f 1
root
bin
daemon
adm
lp

————————————————————————————————————————
[root@localhost dir3]# head -5 /etc/passwd | cut -d ':' -f 2
x
x
x
x
x

————————————————————————————————————————
[root@localhost dir3]# head -5 /etc/passwd | cut -d ':' -f 1-3
root:x:0
bin:x:1
daemon:x:2
adm:x:3
lp:x:4
[root@localhost dir3]# head -5 /etc/passwd | cut -c 1
r
b
d
a
l

sort 

sort命令用做排序,其格式为sort [-t分隔符][-kn1,n2] [-nru] ,这里n1和n2指的是数字,其他选项的含义如下。

-t:后面跟分隔字符,作用跟cut的-d选项一样。
-n:表示使用纯数字排序。
-r:表示反向排序。
-u:表示去重复。
-kn1,n2:表示由n1区间排序到n2区间,可以只写-kn1,即对第n1个字段排序。

如果sort不加任何选项,则从首字符向后依次按ASCII码值进行比较,最后将它们按升序输出。

[root@localhost dir3]# head -5 /etc/passwd | sort
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
root:x:0:0:root:/root:/bin/bash

-t选项后面跟分隔符,-k选项后面跟单个数字表示对第几个区域的字符串排序,-n选项则表示使用纯数字排序。示例命令如下:

[root@localhost dir3]# head -5 /etc/passwd | sort -t: -k3 -n
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

-k选项后面跟数字n1和n2表示对第n1和n2区域内的字符串排序,-r选项则表示反向排序。示例命令如下:

[root@localhost dir3]# head -5 /etc/passwd | sort -t: -k3,4 -r
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash

wc

wc命令用于统计文档的行数、字符数或词数。该命令的常用选项有-1(统计行数)、-m(统计字符数)和-w(统计词数)。示例命令如下:

[root@localhost dir3]# cat /etc/passwd | wc -l
22


[root@localhost dir3]# cat /etc/passwd | grep adm | wc -l
1

\

uniq 

uniq命令用来删除重复的行,该命令只有-c选项比较常用,它表示统计重复的行数,并把行数写在前面。我们先来编写一个文件,示例命令如下:

[root@localhost dir3]# cat test2
11111
11111
2222222
33333333
444
444
11111
444
——————————————————————————————————————————————————————————————
[root@localhost dir3]# uniq test2
11111
2222222
33333333
444
11111
444

可以看到,若不排序,只会去除相邻的重复行

[root@localhost dir3]# sort test2 | uniq
11111
2222222
33333333
444
[root@localhost dir3]# sort test2 | uniq -c
      3 11111
      1 2222222
      1 33333333
      3 444

注:uniq并不会真的删除原文件里的行,而是将去重的结果输出出来

[root@localhost dir3]# cat test2 //内容不变
11111
11111
2222222
33333333
444
444
11111
444

tee 

tee命令后面跟文件名,其作用类似于重定向>,但它比重定向多一个功能,即把文件写入后面所跟的文件时,还显示在屏幕上。该命令常用于管道符|后。示例命令如下:

#echo "aaaaaaaaaaaaaaaaaaaaaaaaaaa"|tee testb.txt
aaaaaaaaaaaaaaaaaaaaaaaaaaa
#cat testb.txt
aaaaaaaaaaaaaaaaaaaaaaaaaaa

tr

tr命令用于替换字符,常用来处理文档中出现的特殊符号,如DOS文档中出现的符号^W。该命令常用的选项有以下两个。

-d:表示删除某个字符,后面跟要删除的字符。
-s:表示删除重复的字符。

tr命令常用于把小写字母变成大写字母,如tr '[a-z]' '[A-Z]'。示例命令如下:

[root@localhost dir3]# head -2 /etc/passwd | tr '[a-z]' '[A-Z]'
ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH
BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN

[root@localhost dir3]# head -2 /etc/passwd | tr 'r' 'R'
Root:x:0:0:Root:/Root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

同样并不是真的对文件进行修改

split 

split命令用于切割文档,会真的修改文件,常用的选项为-b和-l。

  • -b:表示依据大小来分割文档,单位为byte,示例命令如下:
[root@localhost g33]# cp /etc/passwd ./
[root@localhost g33]# split -b 500 passwd
[root@localhost g33]# ls
passwd  xaa  xab

如果split不指定目标文件名.则会以xaa xab...这样的文件名来存取切割后的文件 当然,我们也可以指定目标文件名,如下所示: 

[root@localhost g33]# split -b 500 passwd g!
[root@localhost g33]# ls
g!aa  g!ab  passwd
  • -l:表示依据行数来分割文档,示例命令如下:
[root@localhost g33]# split -l 10 passwd
[root@localhost g33]# ls
passwd  xaa  xab  xac

date

date命令在shell脚本中最常用的几个用法如下。

date +%Y:表示以四位数字格式打印年份。
date +%y:表示以两位数字格式打印年份。
date +%m:表示月份。
date +%d:表示日期。
date +%H:表示小时。
date +%M:表示分钟。
date +%S:表示秒。
date +%w:表示星期。结果显示0则表示周日。

shell基础

记录命令历史 

我们执行过的命令Linux 都会记录,预设可以记录1000条历史命令 这些命令保存在用户的家目录的.bash_history文件中 但需要注意的是,只有当用户正常退出当前shell时,在当前shell中运行的命令才会保存至.bash_history文件中 

  • !!: 连续两个!表示执行上条指令,示例命令如下 
# pwd 
/root 
#!! 
pwd 
/root 
  •   !n: 这里的n是数字,表示执行命令历史中的第n条指令 例如,!1002 表示执行命令历史中的第1002个命令,如下所示 :
# history | grep 1002 
1002 pwd 
1015 history |grep 1002 
# !1002 
pwd 
/root
  • !字符串(字符串大于等于1) :例如!pw表示执行命令历史中最近一次以pw开头的命令。示例代码如下:
# !pw 
pwd 
/root

通配符 * ?

在bash下,可以使用*来匹配零个或多个字符,用?匹配一个字符。示例命令如下:

[root@localhost dir3]# ls
11887022.html  file1.tar  g33  tesallt.zip  test  test2  test.bz2  test.zip  yasuo.tar
[root@localhost dir3]# ls -a ?est*
test  test2  test.bz2  test.zip

别名 alias

也可以向定义命令的别名,其格式为 alias 命令别名 = '具体的命令' ,示例命令如下: 

# alias aming = 'pwd' 
# aming 
/root 
# unalias aming 
# aming
bash: aming 未找到命令

输入/输出重定向 

输入重定向用于改变命令的输入,输出重定向用于改变命令的输出,输出重定向更为常用,它经常用于将命令的结果输入到文件中,而不是屏幕上。输入重定向的命令是<,输出重定向的命令是> 。另外,还有错误重定向命令2>以及追加重定向命令>>

[root@localhost dir3]# echo "123123" >test
[root@localhost dir3]# echo "123123" >>test
[root@localhost dir3]# cat test
123123
123123

——————————————————————————————————

[root@localhost test]# ls aaa 2> error
[root@localhost test]# cat error
ls: 无法访问aaa: 没有那个文件或目录

[root@localhost test]# ls bbb 2>> error
[root@localhost test]# cat error
ls: 无法访问aaa: 没有那个文件或目录
ls: 无法访问bbb: 没有那个文件或目录

管道符 

前面已经提过管道符|,它用于将前一个指令的输出作为后一个指令的输入,如下所示 

[root@localhost dir3]# cat /etc/passwd | wc -l
22

表示passwd有22行

作业控制 

当运行进程时,你可以使它暂停(按Ctrl+Z组合键),然后使用fg ( foreground的简写)命令恢复它,或是利用

bg ( background的简写)命令使它到后台运行。此外,你也可以使它终止(按CtrI+C组合键)。示例命令如下:

[root@localhost dir3]# vi test //修改一些东西后,按ESC,CTRL+Z

[1]+  已停止               vi test
[root@localhost dir3]# jobs    //jobs 命令显示了当前 shell 环境中已启动的作业状态
[1]+  已停止               vi test

使用bg可以让作业在后台运行

[root@localhost dir3]# vmstat 1 > test2
^Z
[2]+  已停止               vmstat 1 > test2

[root@localhost dir3]# jobs     //多个被暂停的任务会有编号
[1]-  已停止               vi test
[2]+  已停止               vmstat 1 > test2


[root@localhost dir3]# bg 2 //让2号任务在后台运行
[2]+ vmstat 1 > test2 &

可以通过fg命令回到某个被暂停的任务

[root@localhost dir3]# fg 2
vmstat 1 > test2

结束任务有两种方法:

第一种:在某个任务执行页面按CTRL+C

[root@localhost dir3]# fg 2
vmstat 1 > test2
^C
[root@localhost dir3]# 

————————————————————————————————————————————————————————————————————————————

第二种:查找某任务的pid,使用 kill pid,若某个任务无法结束,可以用-9选项强行杀死

[root@localhost dir3]# ps -aux | grep vmstat
root       4135  0.0  0.0 152700  1408 pts/0    T    17:38   0:00 vmstat 1
root       4137  0.0  0.0 112824   976 pts/0    S+   17:39   0:00 grep --color=auto vmstat
[root@localhost dir3]# kill -9 4135
[root@localhost dir3]# jobs
[1]+  已杀死               vmstat 1 > test2

注释符号# 

这个符号在linux 中表示注释说明,即#后面的内容都会被忽略 用法如下:

 # abc=123 #aaaaa 
 # echo $abc 
 123  

脱义字符\ 

这个字符会将后面的特殊符号(如*)还原为普通字符。用法如下:

#ls -d test*
ls:无法访问test*:没有那个文件或目录

特殊符号 ; && ||

通常,我们都是在一行中输入一个命令,然后回车就运行了。如果想在一行中运行两个或两个以上的命令,需要在命令之间加符号;。示例命令如下:

[root@localhost test]# mkdir testdir ; touch test1.txt ; touch test2.txt; ls
test1.txt  test2.txt  testdir

使用;时,不管command1是否执行成功,都会执行command2。

使用8&时,只有command1执行成功后,command2才会执行,否则command2不执行。

使用||时,command1执行成功后则command2不执行,否则执行command2,即command1和command2中总有一条命令会执行。

特殊符号 ~

符号~表示用户的家目录,root用户的家目录是/root,普通用户则是/home/username。示例命令如下:

[root@localhost test]# cd ~
[root@localhost ~]# ls
anaconda-ks.cfg  test

特殊符号& 

如果想把一条命令放到后台执行,则需要加上符号&,它通常用于命令运行时间较长的情况。比如,可以用在sleep后,如下所示:

[root@localhost ~]# sleep 30 &
[1] 4585
[root@localhost ~]# jobs
[1]+  运行中               sleep 30 &

中括号[]