这是我对2021年春季学期学习的Linux课程记录的笔记.内容较多,都是自己亲自整理的.Linux的内容多而且杂,主要都是指令,在不去充分运用的情况下会很容易遗忘,所以在应聘,考试或使用前应该回来浏览一遍Linux的笔记.注意,本笔记是从word文档中移植过来的,可能会存在纰漏,如有发现欢迎指正交流.

第一章 基本的系统操作

Passwd:修改密码

可以后面添加用户名:

1
passwd aaron

Date:展示当前时间

%m:用数字表示月份

%d:用数字表示按月记的时间

%y:输出年份的后两个数字

%D:输出日期,格式为mm/’dd/yy

%H:输出24小时数

%M:输出分钟数

%S:输出秒数

%T:输出日期格式为HH:MM:SS

%a:输出星期几

%h:输出月份名

%r:输出12小时的时间

修改屏幕:

Clear:清屏

Tput clear:清屏

Tput cup: 将光标放置在特定位置,例如 tput cup 3 5将光标放置在第三行第五列

Tput smso:将操作的行颜色反转

Tpud rmso:恢复屏幕颜色

Tput blink:让屏幕闪烁

Tput reset:恢复屏幕设置

辨别用户:

Who:列出所有的 用户名 终端种类 上次登录时间 ip

Who am I:列出当前用户的信息

Who -m:等同于who am i

Who -q:列出用户名和用户的数量

列出菜单页面:

Man:用来了解某些信息,比如man ls可以列出有关ls的信息

Info:其中的信息比man更详细更新,用同样的方式可以展示命令的用途

–apropos—string在所有菜单中查找string

-o,–output—filename创建一个filename文件并将Info的信息放置到里面

-h,–help列出帮助菜单并退出

–version:列出info的版本信息并退出

第二章 对文件的基础操作

查看当前操作目录:pwd

修改当前目录:cd

Cd ..代表回到上一层,随后可以添加其它操作

Cd ~代表跳到主目录

创建文件夹:

Mkdir用来创建一个文件

Mkdir dir:在当前目录创建一个dir文件

Mkdir /tmp/dir在tmp文件夹中建立一个dir文件

移除文件

Rmdir用来移除文件,与mkdir一样可以加文件名或者地址

只有文件不为空,当前文件夹不是该文件时可以移除该文件

列出文件

ls列出文件夹中的文件,默认当前文件夹,可以指定地址

ls+ -l:详细展示文件,包括访问权限,链接数,文件拥有者,小组拥有者,文件大小,修改时间,文件名

-a:列出所有文件,包括隐藏文件

-F:展示文件类型和文件名(‘/’代表文件,’*’代表可执行文件)

-R:展示当前文件夹的所有内容和下级所有文件夹的内容

-r:用相反的顺序列举出文件

-S:通过文件大小排序文件

以下为一些文件类型的表示

-: Ordinary file

d: Directory

b: Block special file

c: Character special file

l: Symbolic link

s: Socket

打开文件

cat:打开文件,例如:

打开data1

1
cat data1

也可以一次打开多个文件:例如打开data1和data2

1
cat data1 data2

复制文件

cp+ -r:如果data2存在,将data1中的所有文件和子文件放置到data2,否则在当前操作目录创建一个data2来完成操作

1
cp -r data1 data2

-i: 在覆写目标文件之前提示用户是否覆盖,回答y则覆盖

-l:不复制文件,只生成链接文件

-s:建立一个symbolic link

移除文件

rm:用来移除文件,用法主要有:

删除文件data

1
rm data

删除data1和data2

1
rm data1 data2

删除目录中的文件

1
rm /home/aaron/data

移动和重命名文件

mv:

1.用来移动文件

1
mv source destination

如果省略一个参量,默认将该文件从当前文件夹移动到目标文件夹

2.同样也可以用来重命名文件

mv+ -f:操作前不提示

-i:操作前提示

分页查看内容

more:分页更方便地看文件,支持空格向前和b向后,翻完后不能退回

less:与more相似,更加自由,可以翻回

通配符字符

文件访问权限:

展示格式:

在ls -l展示的文件信息中,最左侧就是文件的访问权限

[ ][r][w][x][r][w][x][r][w][x]

共有10个位置

第一个是-或者d,-代表普通文件,d代表文件夹

第2-4位是owner的权限

第5-7位是group的权限

第8-10位是other users的权限

**修改访问权限:**

修改对象符号:

u: user

g: group

o: other users

chmod 修改对象+/-权限 文件名 完成对权限的修改

Absolute Mode:

通过一串数字来代表这个文件的访问权限

read=4 也就是二进制100

write=2 也就是二进制010

execute=1 也就是二进制001

进而:一个文件的访问权限可以由三个数字组成

第三章 vi编辑器

1.打开vi编辑器:

1
vi filename

如果filename不存在,会在左下角显示”filename.txt”[New File]

如果文件存在,会读取文件内容并且展示在屏幕上

2.vi editor有三种模式:

Command mode:用来执行指令,通过按esc进入该模式

Input mode:用来编辑文本内容,在command mode中按a ,i 或o等来进入该模式

Escape mode:用来执行一些指令指令,在command mode中点击 : 来进入这个模式

常规指令:

h光标移动到前一个字符

l光标移动到下一个字符

k光标上移一行

j光标下移一行

x删除一个字符

dd删除一行

:wq+Enter保存文件并退出编辑器

:w+Enter保存文件

:q!+Enter退出文件并不保存编辑

:e +Enter打开这个文件

:w +Enter写进另一个文件

:w!+Enter强制写入另一个文件

Ctrl +d or D移动到屏幕的最后一行

Ctrl +u or U向上移动半屏

Ctrl +F向前移动一页

Ctrl +B向后移动一页

nG去第n页

0(zero) 去这一行的开头

$去这一行的末尾

H去屏幕的开头行

M去屏幕的中间行

L去屏幕的最后一行

高级阅读和保存指令

插入和替代指令 ???

文字移动指令

删除修改指令

复制行指令

查询指令

字符查询指令

Vi配置

Ab command:

用string1来代替string2

1
:ab <string1><string2>

取消这个代替关系

1
:unab <string1>

Map:映射

:map: 用前者键位来映射后者

:map!:可以在编辑模式映射

第四章 重定向与管道

重定向输入输出

输入重定向:

1
cat<test1

指定标准输入来自磁盘文件而不是键盘,相当于cat 后面手打test1的内容

1
cat 0<test1

0表示输入重定向

输出重定向:

1
cat test1>out_test

将test1的内容传递到out.test,如果文件out.test不存在会创建,如果存在就会覆写(删除原数据)

1
cat test1>>out_test

将test1附加到out_test后面

1
cat test1 1>out_test

可以在前面写1来代表输出重定向,不是必须的,但可以说明操作,容易理解

错误重定向:

1
cat test_2 2>error-mesg

假如test_2不存在,会产生一个错误信息,这个信息原本应该显示在屏幕上,这样可以显示在error_mesg文件中

使用过滤器

grep过滤器:

****搜索具有特定样式的字符并显示包含那个样式的所有行,在文件中搜索的样式被称为正则表达式,不指定正则表达式无法使用

语法是

1
grep [option] pattern [filename]

例如 在java.txt文件中搜索含有正则表达式为”gdddd[d]”的字符串

1
grep 'gdddd[d]' java.txt;

正则表达式:

grep中的option:有

-n:打印与样式匹配的每行及行号,行号打印在行首

-c:打印与模式匹配的行数

-v:打印与正则表达式不匹配的所有行

wc过滤器:

****用于计算磁盘文件或标准输入文件中的行数,字数和字符数

1
wc [option] [filename]

option:

-l:显示行数

-w:显示词数

-c:显示字符数

如果没有提供文件名,wc使用标准输入

cut过滤器:

****在特定命令的输出抽取特定列时使用cut过滤器

1
cut [option] {fileame}

option:

-f:显示指定列

-c:显示指定字符

-d:指定判定界符,Tab是默认的

例如,显示文件每行的前5个字符
1
cut -c1-5 filename

tr过滤器

****用于将一组字符翻译成另一组字符,或者可以用于删除重复的字符

-s用于出现的几个字符压缩成一个

例如,压缩文件空格并打印

1
tr -s ' ' <filename>
将小写字符转化成大写
1
tr “[a-z]” “[A-Z]”

把所有:换成空格

1
tr ‘:’ ‘ ’<filename>

sort过滤器

****sort的操作有:

-r 反序排序输出

-f以字符ascii码顺序排序

-n 以非ascii码的顺序排序

sort+一堆数字的时候,会先比较第一位数字,第一位数字大,数字整体就大。比如2>19

排序指定文件的内容,默认升序

+ops1 -pos2按特定列的顺序排序文件pos1是前面忽略的列数,pos2是排序终止的列。例如第三列是+2 -3.可以指定多列,例如3 4列就是 +2 -3 +3 -4

-t基于特定列分隔符排序文件,例如

在用_分割的列中选中第三列

1
sort -t”-” +2 -3 new_namelist

-o将sort过滤器输出的内容保存在磁盘上,而不是显示在标准输出上

将sort的内容保存在name_list中

1
sort -t”-” +2 -3  -o new_namelist name_list

使用管道:

竖线|是管道字符,可以将两个步骤合并为一个步骤并且不需要创建临时文件

tee命令:

tee读取标准输入并将其写到标准输出和文件,如果要写入的文件不存在,则将创建该文件,如果文件已存在,就重写该文件

展示文件temp内容,并且写入temp1和temp2
1
cat temp | temp1 temp2

第五章 Linux Shell

了解shell:

alias:创建别名

1
alias dir=’ls -l’

执行此命令后,可以使用关键字dir来代替ls -l

还可以用一个别名表示几个命令的组合

1
alias check=’who;uptime’

这样执行check会依次执行who 和uptime

bg fg:作业控制

在前台控制程序时,可以在后台运行多个进程,还可以按Ctrl+z暂挂一个作业,并在前台启动另一个作业,需要使用bg命令将作业发到后台

1
bg %commandname

其中commandname是暂挂的作业名称,也可以指定一个命令编号

1
fg %commandname

fg 用来将命令推回前台,除了name也可以用number

jobs列出活动的作业

文件名完成:

****使用tab键完成没写全的文件名

按两次tab可以列出所有可能的文件名

命令完成:

使用tab完成没写全的指令

按两次tab列出可能的所有命令

ps:

展示当前的shell版本

修改shell:

chsh:修改shell

在new shell后面要输入新shell的全路径

同时还需要输入密码

这样在下次登录用户时就会使用新的shell

在linux中创建shell脚本

echo命令:

****echo命令用来在屏幕上显示括起来的内容,最好使用双引号

1
echo “Hello”

上面将会展示hello,默认状态下会换行

1
echo -n “Hello”

可以使光标保持在同一行

执行shell脚本:

****使用sh命令创建新的子shell并将要执行的shell脚本名称传递到此shell

执行Shell脚本必须具有读权限,如果没有可以提供

1
2
3
chmod u+x magic.sh

home/steve/magic.sh

上面操作可以给用户添加x权限并且执行magic,sh 这是在新shell中执行脚本

.magic.sh在当前shell中执行脚本

创建变量:

1
name=”John Lennon”

****如果名字带空格,就用引号

1
name=Paul

没有空格,引号可选

1
ctr=1

ctr不是整型变量,而是字符串

echo “$变量名”可以查看变量的名字

引用变量:

****$用于引用变量的内容

1
x=${today}th

使得x的值是字符串today+th

在不涉及连接操作时,大括号可选

1
2
3
x=${today}

x=$today

以上两个是相同的

将值读取到变量:

read+名可以用键盘给变量赋值

本地和全局shell变量:

****在一个shell中创建的变量不能再其它shell中直接调用

使用export指令使得变量可以让后续子shell调用

export+变量名

环境变量:

HOME:

****存储用户的主目录的位置

PATH:

可以用它来定位用户调用的命令

例如,以下命令指定在任何可执行文件或命令中依次搜索目录/user/bin和/bin:

1
$PATH=/user/bin:/bin

:/代表当前目录

PS1:

通过此变量的值来设置期望的提示符来代替目前的shell提示符

PS1=”HELLO>”通过运行这行代码,提示符变成了HELLO>

\w提示符字符串用于显示当前用户所在的目录

PS1=’\w >’可以反映当前的目录

PS2:

用于设置次提示符的值的环境变量,默认状态下是>

修改方法同上

LOGNAME:

****用来保存用户的登录名

SHLVL:

****用于显示当前工作的shell层

SHELL:

****用户存储用户的默认shell

env命令用于查看所有导出的环境变量及其各自的值

第六章 Shell指令的基本操作

使用替换命令:

执行以下语句:

1
echo “The date is `date`”

系统会将反向单引号``中的命令执行,然后执行整个命令

命令替换还可以用于在变量中存储命令输出

1
ctr=`ls *.c| wc -l`

以上命令使得ctr存储当前目录中以.c结尾的文件计数

可以使用以下命令在变量中存储命令输出:

expr:

****大部分shell不支持数字变量,expr可以用来评估算数表达式

1
expr 4 + 5
   以上代码可以得到9,但注意加号左右必须有空格
1
2
3
4
5
a=4

b=5

expr $4 + $5
   可以得到9

expr支持的运算有+ - * / %,但是*运算必须使用*,否则会被理解为通配符,同时除法不支持小数,expr不支持小数

test:

****test评估一个表达式,并返回真或假,test关键字还可以用[]替换,即

test 表达式 = [表达式]

1
test $user = “Aaron”

等价于

1
[ $user = “Aaron” ]

注意中括号和等号必须有空格隔开

一个test命令还可以测试多个条件 -a -o分别表示and 和 or

在shell脚本中使用编程构造

if:

****if语句通常与test命令一起使用如以下代码段所示:

1
2
3
4
5
6
7
8
9
10
11
echo “Input a number ”

read no

if [ $no -ge 1 -a $no -le 100 ]

then echo “Number between 1 and 100

else echo “Number greater than 100

fi

其中fi指示构造的结尾

同时语句支持elif关键字,代表else if

case…esac:

****相当于switch case

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
echo -n "Enter a string"

read xval

dozen

case $(xval) in

> dozen)

> echo "12";;

> score)

> echo "20"

> ;;

> *)

> echo "Neither";;

> esac

为任何一个变量执行的最后一个命令必须接分号

while:

****支持迭代循环

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>while true

> do

> echo "wish to continue ?"

> read ans

> if test "ans" = "n"

> then exit

> fi

> done

当读入n时停止循环

until:

****当until中的条件为真时结束循环

for:

for循环将一列值作为输入,并为循环中的每个值执行该循环,在for循环中执行do…done之间的命令

1
2
3
4
5
6
7
>for name in Ruby Samul

> do

> echo "${name}"

> done

name将作为Ruby 与Samul输出两次并结束

exit:

****从shell脚本中退出,可以用在if…else中

再次谈到test命令:

****test命令也可以用来检查文件的状态

test也可以实现一些算术式的判定

算数测试:

****test可以实现一些算数式的判定

字符串测试:

break和continue语句:

****break用于终止循环

continue用于终止本次循环

创建函数:

****例子:

这是一个可以判断文件类型的函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function ftype

{

if test -f $fname

then echo "$fname is an ordinary file."

elif test -d $fname

then echo "$fname is an directory file"

elif test ! -r "$fname"

then echo "No readable file called $fname exists"

fi

}

fname赋值,并运行ftype就可以得到结果

处理Shell脚本中的参数

参数用于将自变量从命令行传递到Shell脚本,参数可以是任何值

shell在处理命令行的词时,会依次将命令行的每个词放入特殊变量:

第一个词,也就是命令名,放入$0

剩下的词会依次放入$1 $2 $3…

除了$0以外,Linux Shell最多可以创建9个变量,变量$1-$9也称为命令行的位置参数,根据命令中指定的参数的数量,shell将赋值给这些变量中的一些或者全部

除了以上这些以外,还有一些特殊的变量:

$*:包含整串参数 也就是把参数全部列出来

$#:包含命令中制定数量的参数 也就是输入的参数的数量(不包括操作名)

以下操作展示了上述参数的使用:

创建一个shell脚本:

1
2
3
4
5
6
7
8
9
vi pos-para

echo "The name of the program is $0"

echo "The first argument is $1"

echo "The number of argument is $#"

echo "They are $*"

使用这个脚本:

1
2
3
4
5
6
7
8
9
sh pos-para one two three

The name of the program is pos-para

The first argument is one

The number of argument is 3

They are one two three

通过对应关系可以了解参数的用法

shift命令:

shell最多只能创建9个位置参数,即$1-$9,面对多于9个参数的情况,或者允许用户输入可变数量的参数,shift命令可以用于此类情况

例子:

shell脚本check带有3个参数a,b,c,位置参数的值为:

$0:check

$1:a

$2:b

$3:c

$#:3

$*:a b c

执行shift命令:将丢失的$1的值,即a,后续的值依次递补,参数总数-1,即目前的参数为:

$0:check

$1:b

$2:c

$3:

$#:2

$*:b c

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
vi shiftfile

if test $# -eq 0

then echo "Arguments required"

exit

fi



command=$1

shift



if test $command = 'c'

then

if test $# -ne 2

then echo "Invalid number of arguments for copy"

else cp $1 $2

fi

elif test $command = 'd'

then

if test $# = 0

then echo "Invalid number of arguments for delete"

else rm $*

fi

else echo "Invalid argument - must be 'c' or 'd'"

fi

上述操作利用了shift实现文件的删除与拷贝功能

sh shiftfile c finename finename

sh d filename filename …

.bash_profile

是系统中自带的一个特殊的shell脚本,用户登录时统一执行这个文件,此文件包含用户的标准设置,例如使用的终端类型和路径。该文件的存在是可选的,如果需要执行该文件,它必须存在于用户的home目录下

here文档

****command<<pattern

content

pattern

其中command是一个指令,pattern是开始/结束标志。中间可以写多行内容,直到结束符结束内容,执行中间的内容

例如想要构建一个菜单:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>$ cat<<MM

> Do you wish to:

> 1.Add records

> 2.Delete records

> 3.Modify records

> 4.LIst records

> 5.Quit

> Enter Choice:

> MM

上述的方式比使用echo要快捷很多

调试shell脚本

可以使用Set命令调试Shell脚本,可以在Set命令中使用-v和-x选项

sh -v:

会在执行语句前在终端显示Shell脚本中编写的语句,这样可以验证执行的命令是您想要执行的命令

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sh -v empinfo

echo "Enter your name"

Enter your name

read name

Aaron

echo "Enter your department"

Enter your department

read dept

asd

可以看到每个语句执行前都被输出了一遍

sh -x:

与-v类似,都可以在语句执行前展示与举报

不同点在于-x会在每一个被执行语句前面补一个+

并且会把语句中的参数自动替换为输入的数值

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sh -x squarevalues

+ echo 'Enter a number'

Enter a number

+ read num

4

++ expr 4 '*' 4

+ square=16

+ echo 'the square of 4 is 16'

the square of 4 is 16

其中的num被4替换掉了

sh -vx

将两个指令结合,可以更清晰地观察代码运行过程,方便调试

第七章 管理文件和进程

查找Linux系统上的文件,可以使用一些命令快速搜索或者定位用户所需的文件

用户可以使用以下命令在Linux中查找文件:

find

locate

另外,可以使用xargs命令从标准输入构建和执行命令行,它可以与find和locate的命令一起使用,输出文件的长列表

find命令

find命令用于定位特定目录及其所有子目录中的文件,它是用来定位文件最常用的命令,有多个选项用于高级搜索

find命令的语法:

1
find [path] [expression]

可以与find命令一起使用的选项有:

-name

-print

-type

-mtime

-exec

-ok

-name和-print选项:

-name用于搜索指定名称的文件,-print用于输出文件的地址

例子:

1
find /home/steve -name ”jan” -print

在/home/steve地址中搜索名字为jan的文件,并将其完整路径名输出

可以在命令中使用通配符,不过必须添加引号

如果在find命令中不指定name,那么会将指定目录及其子目录下的所有文件路径名输出

-type选项

-type选项定位特定文件类型的文件,比如f与-type一起使用将用于搜索所有普通文件:

1
find /home/steve -type f -print

搜索目录文件:

1
find /home/steve -type d-print

下面列出了-type选项的参数

b:特殊块

c:特殊字符

d:目录

f:普通文件

l:符号链接

-mtime选项:

****-mtime选项用于显示在当前日期前的特定天数内修改过的所有文件名称,下面列出了可用于-mtime选项的参数

-mtime n:指定就在n天以前的那一天修改过的文件

-mtime +n:指定早于n天前修改过的文件

-mtime -n:指定当前日期之前的n天之内修改过的文件

-exec选项:

****-exec用于指定对文件执行的操作,这些文件通过find定位,例如可以通过以下命令从特定目录下的目录删除名为temp的所有文件

1
find -name temp -type f -exec rm {} \;

其中{}是必须的,find命令将{}替换为它定位的文件的路径名

\代表exec命令的结束

-ok选项:

****-exec命令选项始终对通过find命令定位的每个文件执行命令,-ok允许用户对找到的文件进行操作,但是会在每个文件执行命令前要求用户进行确认

-ok与-exec的格式相同

1
find . name temp -type f -ok  rm {} \;

locate命令:

locate命令是定位文件的最快和最简单的方法

locate命令的语法是

1
locate [option] <string>

例如:

1
locate echo

提供了文件名中包含字符串echo的所有文件的路径名的列表

xargs命令:

当您想要对多个文件执行一个命令时,使用xargs命令。当您想要使用一种通配符样式,但这种样式太长而不能在一行输入时,此命令很有用。例如,如果命令echo *在一个有很多文件的目录中,会显示命令行太长

xargs语法:

1
xargs [options] [commands [initial arguments]]

例子:

1
find -type l -print | xargs rm

得到文件类型为链接的文件,通过print传递给xargs,并将其删除

例子:

1
find -type f -name “*.txt” | xargs grep “searchtext” | wc –l

找到以.txt结尾的文件,并将其内容传递到xargs,并查找其中的searchtext

xargs命令的常用选项:

-n 对命令行最多处理max-args个参数

-P最多运行max-procs个进程,默认值为1

-p以交互模式运行,当响应以y/Y开头才会运行命令

-s指定每个命令行最多max-chars个字符

-t在执行前,在标准错误文件中打印命令行

-r如果标准输入不包含任何行,它不应当执行命令,通常,即使没有输入也会运行一次命令

操作多个文件

在linux的多用户环境中,多个用户可以同时操作一组文件。

1.可以选择创建文件的多个副本,但这并不推荐,因为会造成数据的冗余问题

2.可以为文件设置组权限,这样可以让组中的任何用户访问文件。但可能会发生另一个问题:不是组中所有用户都被允许访问文件,此问题可以使用ln命令解决

3.还有一种情况,就是用户可能需要并排显示两个文件的内容。这种情况下可以使用paste命令

ln命令:

使用ln命令在目录中创建一个链接,允许一些用户访问文件

ln命令的语法:

1
ln [options] <source file> <destination path>

例子:

1
ln myfile temp/mylink

上述命令创建了文件Myfile的链接,链接的名称是mylink,位置在temp目录下

在ls -l命令中,第二列输出数据就是链接的数量

paste命令:

paste命令并排显示文件的内容,即水平合并(相对于将文件垂直合并的cat命令)

1
paste 文件1 文件2

将文件 1 2的内容并排显示

在Linux中比较文件

Linux提供了一些命令,用于比较不同文件的内容

以下命令用于比较文件:

cmp命令

comm命令

uniq命令

另外linux还提供了type和exec命令来显示有关命令执行的信息

cmp命令:

cmp命令允许用户比较两个文件,并显示两个文件首个不同之处的行号和字符位数,它按字节比较两个文件

1
cmp t1 t2

输出

1
t1 t2 differ:byte 50,line2

输出指示两个文件在第二行,第50个字节处开始不同

如果两个文件是相同的,cmp不提供任何输出

comm命令:

不像cmp命令按字节比较文件,comm命令按行比较两个排序的文件

不带任何选项的comm命令提供三列输出

第一列包含只存在于第一个文件中的行,第二列包含只存在于第二个文件中的行,第三列包含两个文件都有的行

以下为comm所带的选项:

uniq命令:

用来比较存储文件中的相邻行,通过不同选项来显示文件中唯一的或者重复的内容。它是一个过滤器

例子:

1
sort mov_titles | uniq

输出对文件mov_titles的排序并没有重复行

以下为uniq指令的选项:

type命令:

type命令将一个命令作为一个参数,并指定如何解释它。对于命令名参数,type命令提供命令的绝对路径,如果两个参数是内置命令,则会相应地指定它

例子:

1
2
3
type cat

cat is… / / /

通过上面操作指定了cat命令,输出cat命令的位置

exec命令:

exec命令将一个命令作为参数,用命令代码代替当前shell并执行命令,因此它不创建新的进程来执行命令

1
exec 操作名

第八章 Linux实用程序

了解文件压缩实用程序

Gzip实用程序:

Gzip命令用于压缩文件,解压文件对应的实用程序是gunzip,gzip-d 或zcat。

它能创建带.gz扩展名的文件

1
2
3
4
5
Gzip [options] [filename]

Gunzip [options] [filename]

Zcat [options] [filename]

下面提供了gzip和gunzip提供的选项

GZIP环境变量:

GZIP环境变量可以用于为gzip和gunzip指定默认选项

比如

1
2
3
GZIP=”-9vr”

Export gzip

意思是在执行gzip和gunzip命令时,压缩/解压将在第九层以详细和递归模式进行,这是最佳压缩

重定向:

还可以通过gzip实用程序重定向输出以方便执行

以下示例演示了重定向的用法

1
2
3
4
5
Gzip -c file1 >files.gz                 //将file1压缩为files

Gzip -c file2 >files.gz                 //将file2添加到files中

Gunzip -c files.gz                       //将files解压缩并输出

了解格式化磁盘实用程序

Fdisk被认为是一个菜单驱动程序,用于创建和操作分区。分区是一个后跟分区号的设备名称。

要启动fdisk,需要作为root用户输入fdisk命令。可以使用fdisk使用以下任何一种设备格式化

/dev/hda

/dev/hdb

/dev/sda

/dev/sdb

基本fdisk选项是:

P:创建打印分区

N:创建新分区

D:删除一个分区

Q:不保存退出

W:写入新分区并退出

了解聊天实用程序

可以用于聊天的一些重要命令是mesg,who -T 和talk命令

另外,还有诸如write的实用程序,用于将文本写入另一个用户的终端,以及wall实用程序,用于将信息写入所有的用户终端

Mesg命令:

为您提供选项,允许或不允许其他用户写入您的终端。

不带任何参数的mesg命令显示您的终端当前的访问状态

例如:

1
2
3
Mesg

Is y

Who -T命令:

您可以使用带有-T或-w参数的who命令查找当前登录用户的消息状态

Talk命令:

Talk实用程序允许您通过网络与另一个用户聊天,它是一个交互式可视通信程序,将您的终端上显示的各行的内容复制到另一个用户的终端上

Talk实用程序的语法是:

1
Talk person_name [terminal name]

比如talk angela

Write

Write实用程序用于将文本写入另一个用户的终端,write实用程序的语法与talk相同

Wall实用程序

Wall命令用于向所有用户终端发送信息

Wall实用程序的语法是

1
Wall mesg

调度任务:

对于您的shell脚本,您可能想在特定时间让它自动运行

Cron守护进程

Cron守护进程以您调度的时间间隔执行任务,当系统启动时,它会自动启动。

Crontab实用程序用于将您的任务提交到cron守护进程,您想要自动执行的任务必须放在名为crontab的文件夹中

Crontab文件:

用于列出您想在linux系统上自动执行的任务,对于您想要自动执行的每个任务,它都包含一行信息

Crontab实用程序

指示cron以特定日期和时间执行命令,它将crontab文件提供给cron守护进程,crontab命令的语法是:

1
2
3
Crontab [-u user] file

Crontab [-u user] [options]

At实用程序

用于调度任务的另一个实用程序是at,它可以调度任务只运行一次,而cron守护进程用于以一定时间间隔执行任务,如果必须重复执行任务,应当使用crontab实用程序。

以下列出了at实用程序的重要文件

了解其他实用程序

Bc实用程序

Bc实用程序可以用作计算器,它可以计算很大的小数值

Bc实用程序使用的语法是:

1
Bc [option] [file …]

以下实例展示了bc的用法‘

1
2
3
4
5
6
7
Bc <<<5*6

30

Echo “55.7 + 73.8” | bc

129.5

如果您有一个文件calc,其中包含运算式,您可以使用以下bc命令计算该表达式

1
Bc <calc

Finger实用程序:

用于显示当前登录到Linux系统的所有用户的状态,不带任何参数的finger实用程序为当前登陆的每一个用户显示一行输出

Finger实用程序的语法是

1
Finger [option] [user name]

Aspell实用程序

用于对文章内容进行拼写检查,它最终取代了ispell实用程序

1
Aspell [options] command

Chfn实用程序

用于更改用户的finger信息,它从/etc/passwd文件检查用户的信息,并允许用户更改信息

Chfn实用程序的语法是:

1
Chfn [options] [user name]

Head和tail实用程序

Head用于从文件开头显示指定的行数,tail,命令从文件末尾显示指定的行数,如果未指定,10行是默认值,两个命令的语法是

1
2
3
Head [options] [filename]

Tail [options] [filename]

Head和tail命令用于从终端显示指定的行数