Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

时间:2024-04-04 14:47:18

前几年整理出来打印的纸质版笔记,被搞丢了,丢了,丢了。只能重新再整理一份,这下应该不会再丢了吧。

排版有点乱,基础且重要的内容几乎都在里面了,基本操作够用了。最后一部分“Linux系统管理员”,内容不多,想继续学习的可以看原版书。

  • 计算机的五大单元

输入单元,输出单元,外部存储设备,内存和CPU(算术逻辑单元,控制单元)。

重点是CPU和内存。基本上数据都是流经过内存再转出去。CPU发布控制指令,控制数据流进/流出内存。CPU要处理的数据完全来自于内存。所有的单元都是由CPU内部的控制单元来负责协调的,因此CPU是这个计算机系统的最重要部分。

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

  • 操作系统

操作系统其实也是一组程序,这组程序的重点在于管理计算机的所有活动以及驱动系统中的所有硬件。

OS的功能就是让CPU可以开始判断逻辑与运算数值,让内存可以开始加载/读出数据与程序代码,让硬盘可以开始被访问,让网卡可以开始传输数据,让所有周边可以开始运转等。总之,硬件的所有操作都必须要通过这个OS来完成。

内核程序锁放置到内存当中的区块是受保护的,并且开机后就一直常驻在内存当中。

OS角色:硬件—>内核—>系统调用—>应用程序  其中内核和系统调用属于OS部分,内核程序在于管理硬件,提供合理的计算机系统资源分配(包括CPU资源、内存使用资源等)。为了保护内核,并且让程序员比较容易开发软件,因此OS除了内核程序之外,通常还会提供一整组开发接口,那就是系统调用层。

OS的内核层直接参考硬件规格携程,所以同一个OS程序不能够在不一样的硬件架构下运行。

OS只是在管理整个硬件资源,包括CPU、内存、输入输出设备及系统文件。

应用程序的开发都是参考OS提供的开发接口,所以该应用程序只能在该OS上面运行而已,不可以在其他OS上面运行。

Linux的优缺点:

优点:稳定的系统(不经常宕机及关机),免费或少许费用,安全性、漏洞的快速修补,多任务、多用户,用户与用户组的规划,想对比较不耗资源的系统

缺点:没有特定的支持厂商,游戏的支持度不足,专业软件的支持度不足

  • 硬盘设备在Linux中的文件名

在Linux系统中,每个设备都被当成一个文件来对待。几乎所有的硬件设备文件都在/dev这个目录下。

瓷盘的设备文件名主要分为IDE接口的dev/hd[a-d]及SATA/SCSI/USB接口的/dev/sd[a-p]两种。

  • BIOS与CMOS

CMOS是记录各项硬件参数且嵌入在主板上面的存储器。BIOS则是一个写入到主板上的一个韧体(即:写入到硬件上的一个软件程序)。这个BIOS就是在开机的时候计算机系统会主动执行的第一个程序了。

 

  • 开机的流程是BIOS—>MBR—>boot loader—>内核文件

MBR(主引导分区):Master Boot Record  可以安装引导加载程序的地方。

boot loader(引导装载程序):主要有提供菜单、加载内核、转交控制权给其他loader.

Linux OS的文件使用目录树系统。

  • 基础命令操作

1.显示日期与时间:date  date +%Y/%m/%d/%H:%M

2018/08/22/16:09

2.显示日历:cal / cal 2018 /  cal [month] [year]

3.计算器:bc   使用quit退出

4.man命令

空格键/[Page Down]--向下翻一页

[Page Up]—向上翻一页

[Home]—去到第一页

[End]--去到最后一页

/string--向下查询string字符串

?string--向上查询string字符串

n,N—利用/or?查询字符串时,可以用n来继续下一个查询。用N来反向查询。

5.查看谁在线:who

6.查看后台执行的程序:ps -au

7.查看网络联机状态:netstat -a

8.重启、关机:reboot

9.关机:shutdown (shutdown -h now立即关机  shutdown -h 20:00)

  • Linux文件属性

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

 

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

chgrp:改变文件所属用户组

chown:改变文件所有者

chmod:改变文件的权限

chgrp [-R] dirname/filename …

-R:进行递归的持续更改,也即连同子目录下的所有文件、目录都更新成为这个用户组之意。

chown [-R] 账号名称 文件或目录

同时改变某文件的所有者和用户组:chown root:root xx.txt

chmod u=rwx,go=rx xx.txt----表示user具有读写执行的权限,用户组group和others具有读和执行的权限。

chmod

u(user)

+(加入)

r

文件或目录

g(group)

-(除去)

w

o(other)

=(设置)

x

a(all)

 

 

 Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

FHS(Filesystem Hierarchy Standard)定义的三层主目录为/、/var、/usr

有五个目录不可与根目录放在不同的分区,分别为/etc、/bin、/lib、/dev、/sbin

  • 目录相关操作

mkdir [-mp] 目录名称

-m:配置文件案的权限。直接设置,不需要看默认权限

-p:帮助你直接将所需要的目录(包含上层目录)递归创建起来

 

查看文件与目录

ls [-aAdfFhilnrRSt] 目录名称

-a:查看全部的文件,连同隐藏文件(开头为.的文件)一起列出来

-d:仅列出目录本身,而不是列出目录内的文件数据

-l:列出长数据串,包含文件的属性与权限等数据

复制、移动、删除:cp,mv,rm

1)cp [-adfilprsu] 源文件 目标文件

常用参数:

-a:相当于-pdr的意思.即整个数据特性完全一模一样。文件/文件夹的权限、时间等。但所有者、用户组相关的,即使加上-a参数,也无法达成完整复制权限。

-i:若为目标文件已经存在时,在覆盖时会先询问操作的进行

-r:递归持续复制,用于目录的复制行为

2)rm [-fir] 文件或目录

-f:force意思,忽略不存在的文件,不会出现警告信息

-i:互动模式,在删除前会询问用户是否操作

-r:递归删除。最常用在目录的删除了。非常危险的参数。

3)mv [-fiu] 源文件 目标文件

-f:force,如果目标已存在,不会询问直接覆盖

-i:若目标文件已存在,询问是否覆盖

-u:若目标文件已存在,且source源文件较新,才会更新。

 

文件内容查询

cat:由第一行开始显示文件内容

tac:由最后一行开始显示文件内容

nl:显示的时候,顺便输出行号

more:一页一页地显示文件内容

less:与more类似,但比more更好的是,它可以往前翻页

head:只看头几行

tail:只看结尾几行

od:以二进制方式读取文件内容

1)cat [-AbEnTv]

-b:打印行号,非空白行会有行号,空白行不标行号

-n:打印行号,连同空白行也会有行号

2)head [-n number] 文件(默认显示前10行)

-n:后面接数字,代表显示几行的意思

head -n -100 /etc/xx.txt——后面100行不打印

3)tail [-n number] 文件----取出后面几行

例题:显示某文件xx.txt的第11到20行

head -n 20 xx.txt | tail -n 10

修改文件时间或创建新文件:touch

touch [-acdmt] 文件

-a:仅修改访问时间

-c:仅修改文件的时间,若该文件不存在则创建新文件

文件默认权限与隐藏权限

文件默认权限:umask

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

umask的数值指的是“该默认值需要减掉的权限”。2代表写的权限,即为拿掉写的权限。

文件隐藏属性chatter,lsattr

1)chattr [+-=] [ASacdistu] 文件或目录名

+:增加某一个特殊参数,其他原本存在的参数则不动

-:删除某一个特殊参数,其他原本存在的参数则不动

=:仅有后面接的参数

 

a:当设置a之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有root才能设置这个属性

i:让一个文件“不能被删除、改名、设置连接,也无法写入或添加数据”,对于系统安全性有很大的帮助。只有root才能设置此权限。

 

2)lsattr [-adR] 文件或目录名 (显示文件隐藏属性)

-a:显示隐藏文件属性

-d:如果连接的是目录,仅列出目录本身的属性而非目录内的文件名

-R:连同子目录的数据也一并列出来

查看文件类型:file

脚本文件名的查询

which [-a] command

find [PATH] [Option] [action]

-newer file:file为一个存在的文件,列出比file还要新的文件名

find / -mtime 0———0代表当前的时间,即从现在开始到24小时前,有改动过内容的文件都会被列出来

find /etc -newer /etc/passwd———寻找/etc下面的文件,如果文件日期比/etc/passwd新就列出

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

find / -name file——/代表全文搜索

find /home -user Anmy——查找/home下属于Anmy的文件

find / -nouser—— 查找系统中不属于任何人的文件,可以轻易找出那些不太正常的文件

find / -name passed—— 查找文件名为passed的文件

find其他参数:

-type TYPE: 查找文件类型为TYPE的,类型主要有:一般正规文件(f)、设备文件(b,c)、目录(d)、连接文件(l)、socket(s)及FIFO(p)等属性

-perm mode: 查找文件权限刚好等于mode的文件

-perm +mode:查找文件权限“包含任一mode的权限”的文件。

-perm -mode:查找文件权限“必须要全部包括mode的权限”的文件。

查找目录:find /(查找范围) -name '查找关键字' -type d

find后其他可进行的操作:

-exec command:command为其他命令,-exec后面可再接其他的命令来处理查找到的结果。

-print:将结果打印到屏幕上,为默认操作。

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

权限与命令间的关系

1)用户能进入某目录成为“可工作目录”的基本权限

可使用的命令:例如cd等

目录所需权限:用户对此目录至少需要有x的权限

额外需求:若用户想要在此目录内利用ls查阅文件名,则用户对此目录还需要r的权限

 

2)用户在某个目录内读取一个文件的基本权限

可使用的命令:cat,more,less等

目录所需权限:至少具有x

文件所需权限:至少具有r

 

3)让用户可以修改一个文件的基本权限

可使用的命令:vi等

目录所需权限:用户在该文件所在的目录至少要有x权限

文件所需权限:执行好有r,w权限

 

4)让一个用户可以创建一个文件的基本权限

目录所需权限:用户在该目录要具有w,x权限

 

5)让用户进入某目录并执行该目录下的某个命令的基本权限

目录所需权限:至少x

文件所需权限:至少x

 

  • Linux磁盘与文件系统

df—调出目前挂载的设备

dumpe2fs——查询每个区段与superblock(超级块--记录整个文件系统相关信息的地方,包含的信息主要有:block与inode总量;未被使用与已被使用的inode/block数量;block与inode大小等)的信息。

df -h——将容量结果以易读的容量格式显示出来

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

du -sm /*——检查根目录下面每个目录所占用的容量

 

连接文件:ln (类似于windows下的快捷方式)

ln [-sf] 源文件 目标文件

-s:如果不加任何参数就进行连接,即是 hard link,至于-s就是symbolic link

fdisk -l ------查看目前系统内的所有分区有哪些

挂载与卸载:mount umount

磁盘的使用必须经过分区、格式化和挂载,惯用的命令为fdisk、mkfs和mount

 

  • Linux系统常见的压缩命令

压缩命令:gzip,bzip2

gzip [-cdtv#] 文件名

-c:将压缩的数据输出到屏幕上,可通过数据流重定向来处理

-d:解压缩的参数(也可以解压bzip文件)

-t:可以用来检验一个压缩文件的一致性,看看文件有误错误

-v:可以显示出源文件/压缩文件的压缩比等信息

-#:压缩等级 -1最快 -9最慢。默认为-6(最好)

 

打包命令:tar

tar [-j|-z] [cv] [-f 新建的文件名] filename——打包与压缩

tar [-j|-z] [tv] [-f 新建的文件名] ——查看文件名

tar [-j|-z] [xv] [-f 新建的文件名] [-C 目录]—— 解压缩

-c:新建打包文件,可搭配-v来查看过程中被打包的文件名

-t:查看打包文件的内容含有哪些文件名,重点在查看文件名

-x:解答宝或解压缩的功能,可以搭配-C在特定目录解开。

-v:在压缩/解压缩的过程中,将正在处理的文件名显示出来。

-z:通过gzip的支持进行压缩/解压缩。此时文件名最好为 *.tar.gz

 

简单的几个tar命令:

压缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名

查询:tar -jtv -f filename.tar.bz2

解压缩:tar -jxv -f filename.tar.bz2 -C欲解压缩的目录

 

完整备份工具:dump

dump -W:查看有没有任何文件系统被dump过的数据

dump [-Suvj] [-level] [-f 备份文件] 待备份数据

-level 为备份等级。 level 0为完整备份。

restore查看dump后的备份数据内容

  • vi与vim

vi三种模式:一般模式、编辑模式、命令行模式

一般模式:以vi打开一个文件就直接进入一般模式,在这个模式中,可以使用上下左右按键来移动光标,可以删除字符或删除整行,也可以复制、粘贴文件数据

编辑模式:按下“i,I,o,O,a,A,r,R”等任何一个字母之后才会进入编辑模式。按“Esc”退出编辑模式

命令行模式:在一般模式中输入“: ? /”三个钟任何一个按钮,就可以将光标移动到最下面那一行。在此模式中,可以查找数据、读取、保存、大量替换字符、离开vi、显示行号等的操作都在此模式下完成。

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

按键说明:

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

:set nonu—取消行号

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

  • shell与shell script

shell 的功能只是提供用户OS的一个接口。

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

bash(Linux用它作为默认的shell)主要的优点:

1)命令记忆功能——history

history n——n为数字,列出最近的n条命令行。

history [-c]——将目前的shell中的所有history内容全部消除。

history [-raw] histfiles

-a:将目前新增的history命令新增如histfiles中,若没有加histfiles,则默认写入 ~/.bash_history

-r:将histfiles的内容督导目前这个shell的history记忆中。

-w:将目前的history极易内容写入histfiles中。

2)命令与文件补全功能—— [Tab]按键的好处

3)命令别名设置功能—— alias

4)作业控制、前后台控制—— job control,foreground,background

5)程序脚本—— shell script

6)通配符—— Wildcard (*)

bash shell内置命令:type

type [-tpa] name

不加任何参数时,type会显示出name是外部命令还是内置命令

-t:type会将name以下面这些字眼显示出它的意义:

    file:表示为外部命令

    alias:表示为该命令为命令别名所设置的名称

    builtin:表示该命令为bash内置的命令功能

-p:如果后面接的name为外部命令时,才会显示完整文件名

-a:会由PATH变量定义的路径中,将所有含name的命令都列出来,包含alias

 

变量的显示与设置:echo, unset

echo ${PATH}——显示PATH里面的内容

用env查看环境变量与常见环境变量说明

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

locale—— 查看Linux支持的语系(-a)

read:读取来自键盘输入的变量。

命令运行的顺序:

1)以相对/绝对路径执行命令,例如“/bin/ls”或“./ls”

2)由alias找到该命令来执行

3)由bash内置的(builtin)命令来执行

4)通过$PATH这个变量的顺序找到的第一个命令来执行。

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

通配符:

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

bash环境中的其他特殊符号:

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

命令执行过程的数据传输情况:

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

1)标准输入(stdin):代码为0,使用< or <<

2)标准输出(stdout):代码为1,使用> or >>

3)标准错误输出(stderr):代码为2,使用2> or 2>>

 

  • /dev/null 垃圾桶黑洞设备与特殊写法

例:将错误的数据丢弃,在屏幕上显示正确的信息

find /home -name .bashrc 2> /dev/null

命令执行情况:

cmd1 && cmd2

cmd1 || cmd2

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

三个command的正确顺序:cmd1 && cmd2 || cmd3

 

  • 管道命令: Pipe |

“|”仅能处理由前一个命令传来的正确信息,即为standard output的信息,对于standard error并没有直接处理的能力。

  • 选取命令:cut, grep (处理信息以行为单位)

cut -d '分割字符’ -f fields

cut -c 字符范围 (以字符的单位取出固定字符区间)

例:echo $PATH | cut -d ‘:’ -f 5  (以:为分隔符,显示第5段内容)

echo $PATH | cut -d ‘:’ -f 3,5  (以:为分隔符,显示第3和第5段内容)

export | cut -c 12-20(取出第12-20的字符)

 

grep:分析一行数据

grep [-acinv] [—color=auto] ‘查找字符串’ filename

-a:将binary文件以text文件的方式查找数据

-c:计算找到’查找字符串’的次数

-i:忽略大小写的不同,所以大小写视为相同

-n:顺便输出行号

-v:反向选择,即显示出没有’查找字符串’内容的那一行

--color=auto:可以将找到的关键字部分加上颜色显示

示例如下:

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

  • 排序命令:sort, wc, uniq

sort:依据不同的数据类型来排序

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

/etc/passwd内容以:来分隔,以第三列来排序

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

  • 双向重定向:tee

tee [-a] file : -a以累加的方式,将数据加入file当中。

  • 字符转换命令:tr,col,join,paste,expand

  • 切割命令:split 将大文件依据文件大小或行数来切割成为小文件

split [-bl] file PREFIX

-b:后面可接欲切割成的文件大小,可加单位 b,k,m等

-l:以行数来进行切割

PREFIX:代表前导符,可作为切割文件的前导文字

 

例: 将/etc/termcap分成300KB的一个个文件

cd /tmp; split -b 300k /etc/termcap termcap

 

使用ls -al /输出的信息中,每10行记录成一个文件

ls -al / | split -l 10 -lsroot

  • 参数代换:xargs

xargs :产生某个命令参数。很多命令并不支持管道命令,可以通过xargs来提供该命令引用standard input之用。

find /sbin -perm +7000 | xargs  ls -l (因为ls不是管道命令,所以需要使用barges)

 

  • 减号的用途 -

AnmydeMacBook-Pro:tmp root# find . -name 'test.*' | xargs ls -l

-rw-r--r--  1 root  wheel  1024 Aug 28 10:02 ./test.txt

AnmydeMacBook-Pro:tmp root# tar -cvf - test.txt | tar -xvf - 

a test.txt

x test.txt

AnmydeMacBook-Pro:tmp root# find . -name 'test.*' | xargs ls -l

-rw-r--r--  1 root  wheel  1024 Aug 28 10:02 ./test.txt

AnmydeMacBook-Pro:tmp root# tar -cvf test.tar.bz2 test.txt  #压缩test.txt文件为test.tar.bz2

a test.txt

AnmydeMacBook-Pro:tmp root# find . -name 'test.*' | xargs ls -l

-rw-r--r--  1 root  wheel  2560 Aug 28 10:08 ./test.tar.bz2

-rw-r--r--  1 root  wheel  1024 Aug 28 10:02 ./test.txt

蓝色字体是将test.txt文件打包,但打包的数据不是记录到文件,而是传送到stdout;经过管道后,将tar -xvf - test.txt传送给后面的tar -xvf -,后面的这个-则是取用前一个命令的stdout,因此我们就不需要使用文件了。

  •  正则表达式

正则表达式就是处理字符串的方法,它是以行为单位。通过一些特殊符号的辅助,可以让用户轻易达到查找、删除、替换某特定字符串的处理程序。

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

  • grep—进行字符串数据的对比,然后将符合用户需求的字符串打印出来。

grep [-A] [-B] [--color=auto] ‘搜寻字符串’ filename

-A:后面可加数字,为after意思,除了列出该行外,后续的n行也列出来

-B:后面可加数字,为before意思,除了列出该行外,前面的n行也列出来

 

例:用dmesg列出内核信息,再以grep找出内含eth的那行:dmesg | grep ‘eth’

加上行号显示,并把关键字所在行的前两行后三行也一起显示出来: grep -n -A3 -B2 ‘eth’

 

可以使用 --color=auto将关键字部分使用颜色显示。可以在~/.bashrc内加上 alias grep = ‘gre --color=auto’,再以source来立即生效,则每次执行grep它都会自动加上颜色显示。

 

例题1:查找特定字符串

grep -n 'the’ regular_test.txt :查找文件中有the的行

grep -vn 'the’ regular_test.txt :查找文件中没有the的行

grep -in 'the’ regular_test.txt :查找文件中不区分大小写the的行

 

例题2:利用[]来查找集合字符,不论[]中有几个字符,只代表某一个字符

grep -n 't[ae]st' regular_test.txt :查找test或taste这两个单词

grep -n '[^g]oo’ regular_test.txt:查找oo前没有g的行

grep -n ‘[^a-z]oo’ regular_test.txt:查找oo前面没有小写字符的行。

 

例题3:行首与行尾^$

grep -n ‘^the’ regular_test.txt:查找行首有the的行

grep -n ‘!$’ regular_test.txt:查找行尾有!的行

grep -n '^[a-z]’ regular_test.txt:查找开头是小写字符的行 or ‘^[[:lower:]]’

 

grep -n ‘^$’ regular_test.txt:查找空白行

grep -v '^$' /etc/syslog.conf | grep -v '^#’:查找非空白行且不以#开头的行

 

例题4:任意一个字符.与重复字符*

AnmydeMacBook-Pro:anmytest root# grep -n 'g..d' regular_test.txt

1:"Open source" is a good mechanism to develop program.

9:Ho! The soup taste good.

16:The world <Happy> is the same with "glad”.

 

*代表重复0个或多个前面的RE字符的意义,一次,’o*’代表的是具有空字符或一个o以上的字符。特别注意:因为允许空字符(就是有没有字符都可以的意思),所以grep -n 'o*’将会把所有的数据都打印在屏幕上。

因此,当需要至少2个o以上的字符串时,需要’ooo*’

AnmydeMacBook-Pro:anmytest root# grep -n 'ooo*' regular_test.txt

1:"Open source" is a good mechanism to develop program.

2:apple is my favorite food.

3:Football game is not use feet only.

9:Ho! The soup taste good.

18:google is the best tools for search keyword.

19:goooooogle yes!

 

.*代表0个或多个任意字符的意思

AnmydeMacBook-Pro:anmytest root# grep -n 'g.*g' regular_test.txt

1:"Open source" is a good mechanism to develop program.

14:The gd software is a library for drafting programs.

18:google is the best tools for search keyword.

19:goooooogle yes!

20:go! go! Let's go.

 

找出任意数字的行

AnmydeMacBook-Pro:anmytest root# grep -n '[0-9][0-9]*' regular_test.txt

5:However,this dress is about $ 3183 dollars.

15:You are the best is mean you are the no.1.

 

例题5:限定连续RE字符范围{}

因为{}在shell中有特殊意义,因此,必须要使用转义字符\来让它失去特殊意义。

 

找到两个o的字符串。

AnmydeMacBook-Pro:anmytest root# grep -n 'o\{2\}' regular_test.txt

1:"Open source" is a good mechanism to develop program.

2:apple is my favorite food.

3:Football game is not use feet only.

9:Ho! The soup taste good.

18:google is the best tools for search keyword.

19:goooooogle yes!

 

找出g后面接2到5个o,然后再接一个g的字符串

AnmydeMacBook-Pro:anmytest root# grep -n 'go\{2,5\}g' regular_test.txt

18:google is the best tools for search keyword.

 

找出g后面2个o以上的gooooo...g的行

AnmydeMacBook-Pro:anmytest root# grep -n 'go\{2,\}g' regular_test.txt

18:google is the best tools for search keyword.

19:goooooogle yes!

基础正则表达式字符表:

 Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

练习:

列出etc下文件类型为连接文件属性的文件名,并统计其个数

AnmydeMacBook-Pro:etc root# ls -al | grep '^l'

lrwxr-xr-x   1 root  wheel      15 Mar 15 10:48 aliases -> postfix/aliases

lrwxr-xr-x   1 root  wheel      33 Mar 15 10:59 localtime -> /usr/share/zoneinfo/Asia/Shanghai

lrwxr-xr-x   1 root  wheel      22 Mar 15 10:48 resolv.conf -> ../var/run/resolv.conf

AnmydeMacBook-Pro:etc root# ls -al | grep '^l' | wc -l

       3

 

  • sed工具:sed本身也是一个管道命令,可以分析standard input的,而且sed还可以将数据进行替换、删除、新增、选取特定行等功能。

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

  • 以行为单位的新增/删除功能

删除2-5行

AnmydeMacBook-Pro:anmytest root# nl regular_test.txt | sed '2,5d'

     1    "Open source" is a good mechanism to develop program.

     6    GNU is free air not free beer.

     7    Her hair is very beauty.

     8    I can't finish the test.

 

在第二行后增加drink milk,也可以增加多行,用\ <Enter>来继续增加下一行

nl regular_test.txt | sed ‘2a drink milk'

 

以行为单位的替换/显示功能

将第2-5行的内容替换成为’No 2-5 number’

nl regular_test.txt | sed '2,5c No 2-5 number’

 

列出第11-20行,若sed后不带-n,则为复制11-20行

同样效果:cat -n regular_test.txt | head -n 20 | tail -n 10

 

AnmydeMacBook-Pro:anmytest root# nl regular_test.txt | sed -n ’11,20p’ 

    11 This window is clear.

    12 the symbol '*' is represented as start.

    13 oh!    My god!

    14 The gd software is a library for drafting programs.

    15 You are the best is mean you are the no.1.

    16 The world <Happy> is the same with "glad".

    17 I like dog.

    18 google is the best tools for search keyword.

    19 goooooogle yes!

    20 go! go! Let's go.

 

部分数据的查找并替换功能

sed ’s/要被替换的字符串/新的字符串/g

删除下行的 #inet addr: 和Bcast:..... Mask:255.255.255.0

#inet addr: 192.168.1.100 Bcast:..... Mask:255.255.255.0

sed ’s/^.*addr://g' | sed ’s/Bcast.*$//g

192.168.1.100

删除空白行:sed ’/^$/d'

直接修改文件内容

利用sed将文件内以.结尾的行换成!

-i参数让sed直接去修改后面接的文件内容而不是由屏幕输出。

sed -i 's/\.$/\!/g’ regular_test.txt

 

利用sed直接在文件最后一行加入”#this is a test”

sed -i ‘$a #this is a test’ regular_test.txt

 

  • 扩展正则表达式

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

!和>在正则表达式中不是特殊符号。查找时可以直接使用。例如:grep -n ‘[!>]’ regular_test.txt

egrep -v '^$|^#’ regular_test.txt 功能等于grep -v '^$' regular_test.txt | grep -v '^#'

 

  • 文件的格式化与相关处理
  • 格式化打印:printf

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

printf '%10s %5i %5i %5i %8.2f \n' $(cat printf.txt| grep -v Name)

%10s表示一个长度为10的字符串

%5i表示一个长度为5的数字字段

%8.2f表示一个长度为8个字符的具有2个小数点的字段。

  • awk:好用的数据处理工具

awk倾向于将一行分为数个“字段”来处理,因此awk相当适合处理小型的数据呢!

awk ‘条件类型1{动作1} 条件类型2{动作2}...’ filename

 

取出最近5条登录者的数据,仅查看第一列和第三列内容

AnmydeMacBook-Pro:anmytest root# last | awk '{print $1 "\t" $3}' | sed -n '1,5p'

ZhangAnmy    Tue

ZhangAnmy    Mon

ZhangAnmy    Mon

reboot    Mon

ZhangAnmy    Thu

 

awk内置变量

NF:每一行($0)拥有的字段总数

NR:目前awk所处理的是“第几行”数据

FS:目前的分隔字符,默认是空格键。

 

AnmydeMacBook-Pro:anmytest root# last | awk '{print $1 "\t lines: " NR "\t columes: "NF}'

ZhangAnmy     lines: 1     columes: 9

ZhangAnmy     lines: 2     columes: 9

ZhangAnmy     lines: 3     columes: 9

reboot     lines: 4     columes: 6

ZhangAnmy     lines: 5     columes: 9

ZhangAnmy     lines: 6     columes: 9

ZhangAnmy     lines: 7     columes: 9

ZhangAnmy     lines: 8     columes: 9

ZhangAnmy     lines: 9     columes: 9

ZhangAnmy     lines: 10     columes: 9

     lines: 11     columes: 0

wtmp     lines: 12     columes: 6

awk逻辑运算:> < >= <= == !=

在passwd中以冒号:作为字段分隔,查阅第三列小于10以下的数据,仅列出账号与第三列。

AnmydeMacBook-Pro:anmytest root# cat /etc/passwd | awk '{FS=":"} $3 < 10 {print $1 "\t" $3}' | grep -v '^#'

nobody    -2

root    0

daemon    1

_uucp    4

 

awk中加法运算

AnmydeMacBook-Pro:anmytest root# cat printf.txt | \

>awk 'NR==1{printf "%10s %10s %10s %10s %10s %10s\n",$1,$2,$3,$4,$5,"Total"} NR>=2{printf "%10s %10d %10d %10d %8.2f %10d\n",$1,$2,$3,$4,$5,total=$2+$3+$4}'

      Name    Chinese    English       Math    Average      Total

      Anmy         95         85         90    90.00        270

      Jack         80         60         92    77.33        232

     Pavan         60         90         70    73.33        220

 

逻辑运算

>awk ‘if(NR==1){printf "%10s %10s %10s %10s %10s %10s\n",$1,$2,$3,$4,$5,"Total”} 

NR>=2{printf "%10s %10d %10d %10d %8.2f %10d\n",$1,$2,$3,$4,$5,total=$2+$3+$4}'

 

文件比较工具

diff:不要用它比较两个完全不相干的文件

AnmydeMacBook-Pro:anmytest root# cat bk1.txt | sed '4d' > bk_new.txt

AnmydeMacBook-Pro:anmytest root# diff bk1.txt bk_new.txt

4d3 —>左边第四行被删除(d)掉了,基准是右边的第三行

< this dress doesn't fit me. —>列出左边(<)文件被删除的那一行内容

 

cmp [-s] file1 file2

cmp默认仅输出第一个发现的不同点。-s列出所有的不同点

AnmydeMacBook-Pro:anmytest root# cmp bk1.txt bk_new.txt

bk1.txt bk_new.txt differ: char 118, line 4

 

var=$((运算内容)): echo $((14*28))

script的执行方式区别(source,shscript,./script)

source filename.sh—>在父进程中执行

 

利用test命令测试功能

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

利用判断符号[]

在[]的每个组件都需要有空格键来分隔

在[]内的变量,最好都以双引号括起来

在[]内的常量,最好都以单或双引号括起来

[ ”$params” == “value” ]

 

条件判断式:if…then

if [条件判断式1]; then

...

elif [条件判断式2]; then

...

else

...

fi

 

case...esac

function()功能

循环 while do done,until do done,for...do...done

 

  • 用户账号

/etc/passwd文件结构

AnmydeMacBook-Pro:scripts ZhangAnmy$ egrep -v '^_|^#' /etc/passwd

nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false

root:*:0:0:System Administrator:/var/root:/bin/sh

daemon:*:1:1:System Services:/var/root:/usr/bin/false

以:分隔第1个字段为账号名称第2个为密码,现在看到的都为*,放到了/etc/shadow中了第3个为UID,rootd UID为0(系统管理员),1~499(系统账号,其中1~99由distributions自行创建的系统账号;100~499若用户有系统账号需求时,可以使用的账号UID),500~65535(可登陆账号,给一般用户使用。已经可以支持2^32-1这么大的UID号码)

第4个字段GID,用来规定组名与GID的对应。

第5个字段为用户信息说明。

第6个字段为主文件夹

第7个为shell

 

有效与初始用户组:groups,newgrp

/etc/group文件结构

AnmydeMacBook-Pro:etc ZhangAnmy$ egrep -v '^#|^_' /etc/group | head -n 4

nobody:*:-2:

nogroup:*:-1:

wheel:*:0:root

daemon:*:1:root

第1字段:用户组名称

第2字段:用户组密码

3字段:GID

4字段:此用户组支持的账号名称

账号相关文件之间UID/GID与密码相关性示意图

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

  • 账号管理

新增与删除用户:user add,相关配置文件,passwd,user mod,userdel

新增与删除用户组:groupadd,groupmod,groupdel,gpasswd

  • 用户身份切换su,sudo

su [-lm] [-c 命令] [username]

-:单纯使用-(su -)代表使用login-shell的变量文件读取方式来登录系统;若用户名称没加,则代表切换到root身份

-l:与-类似,但后面需要加用户账号

-m:与-p一样,表示使用目前的环境设置,而不读取新用户的配置文件

-c:仅进行一次命令,所以-c后面可以加上命令。

 

PAM(Pluggable Authentication Modules,嵌入式模块):是一套应用程序编程接口(API),它提供了一连串的验证机制,只要用户将验证阶段的需求告知PAM后,PAMJ就能够回报用户验证的结果。

 

  • 软件磁盘阵列(Software RAID)

RAID-0:等量模式,性能最佳

RAID-1:映像模式,完整备份

RAID 5:性能与数据备份的均衡考虑

 

  • 逻辑卷管理器(Logical Volume Manager)

LVM:逻辑卷管理器

Physical Volume,PV,物理卷

Volume Group,VG,卷用户组

Physical Extend,PE,物理扩展快

Logical Volume,LV,逻辑卷

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

 

fdisk /dev/hda

partprove

fdisk -l

 

PV阶段:

pvcreate:将物理分区新建成为PV

pvscan:查询目前系统里面任何具有PV的磁盘

pvdisplay:显示出目前系统上面PV的状态

pvremove:将PV属性删除,让该分区不具有PV属性

 

LVM相关命令汇整

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

  • 循环执行的例行性工作调度

crontab [-u username] [-l|-e|-r]

-u:只有root才能进行这个任务,也即帮其他用户新建/删除crontab工作调度

-e:编辑crontab工作内容

-l:查阅crontab工作内容

-r:删除所有的crontab工作内容,若仅要删除一项,请用-e编辑

 

每项工作的格式具有六个字段:

crontab -e—>进入编辑界面

0   12    *    *    *  mail dmtsai -s “at 12:00” < /home/dmtsai/.bashrc

分  时  日  月  周|————————— 命令串—————————>

 

字段意义如下所示:其中周 0和7都表示星期天。

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

  • 系统的配置文件: /etc/crontab

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/

 

#run-parts

01  *    *    *    *      root       run-parts /etc/cron.hourly <==每小时

02  4    *    *    *      root       run-parts /etc/cron.daily <==每天

22  4    *    *    0      root       run-parts /etc/cron.weekly <==每周日

01  4    1    *    *      root       run-parts /etc/cron.monthly <==每个月1号

分  时   日 月  周     执行者身份   |—————— 命令串——————>

 

  • 进程与程序

程序一般是放置在磁盘中,然后通过用户的执行来触发。出发后会加载到内存中成为一个个体,那就是进程。为了OS可管理这个进程,因此进程有给予执行者的权限/属性等参数,并包括进程所需要的脚本与数据或文件数据等,最后再给予一个PID。系统就是通过这个PID来判断该Process是否具有权限进行工作的,它是很重要的。

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

由这个进程衍生出来的其他进程在一般状态下,也会沿用这个进程的相关权限。

程序:通常为二进制程序放在在存储媒介中(如硬盘、光盘、软盘、磁带等),以武力文件的形式存在;

进程:程序被触发后,执行者的权限与属性、程序的程序代码与所需数据等都会被加载到内存中,OS并给予这个内存内的单元一个标识符PID,可以说,进程就是一个正在运行中的程序。

 

使用ps -l查看进程

AnmydeMacBook-Pro:~ root# ps -l

  UID   PID  PPID        F CPU PRI NI       SZ    RSS WCHAN  S   ADDR TTY      TIME CMD

    0   438   437     4106   0  31  0  2471088      8 -      Ss   0 ttys000    0:00.03 login -pf ZhangA

    0  4490   440     4106   0  31  0  2471100   4164 -      S    0 ttys000    0:00.03 su - root

    0  4491  4490     4006   0  31  0  2438512   1308 -      S    0 ttys000    0:00.01 -sh

    0  4654  4491     4006   0  31  0  2443232    752 -      R+   0 ttys000    0:00.00 ps -l

fork and exec:过程调用的流程

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

常驻在内存的进程称之为服务(daemon)

 

  • 工作管理

要进行bash的job control必须注意以下限制:

1)这些工作所触发的进程必须来自于你shell的子进程(只管理自己的bash);

2)前台:你可以控制与执行命令的这个环境称为前台(foreground)的工作;

3)后台:可以自行运行的工作,你无法使用[ctrl]+c终止它,可使用bg/fg调用该工作

4)后台中“执行”的进程不能等待terminal/shell输入(input)

 

&:直接将命令丢到后台执行

可以利用数据重定向将后台执行命令的错误信息传送到文件中,以免输入到屏幕上。

tar -zpcf /tmp/text.gar.gz /etc > /tmp/log.txt 2 > &1 & (2表示错误的数据stderr)

 

查看目前的后台工作状态:jobs

jobs [-lrs]

-l:除了列出job number与命令串之外,同事列出PID的号码

-r:仅列出正在后台run的工作

-s:仅列出正在后台当中暂停(stop)的工作

 

fg &jobnumber —> 将后台工作拿到前台来处理

 

AnmydeMacBook-Pro:~ root# vi ~/.bashrc

[1]+  Stopped(SIGTSTP)        vi ~/.bashrc

AnmydeMacBook-Pro:~ root# jobs -l

[1]+  4731 Suspended: 18           vi ~/.bashrc

AnmydeMacBook-Pro:~ root# fg 1

vi ~/.bashrc

AnmydeMacBook-Pro:~ root# jobs -l

AnmydeMacBook-Pro:~ root#

 

[ctrl]-z—>将目前的工作丢到后台下面去“暂停”,bg让在后台下面“暂停”的工作去“run”

 

管理后台当中的工作:kill

kill -signal %jobnumber

kill -l:列出目前kill能够使用的信号(signal)有哪些

-1:重新读取一次参数的配置文件(类似reload);

-2:代表与由键盘输入[ctrl]-c同样的操作;

-9:强制删除一个工作

-15:以政策的程序方式终止一项工作。默认为15

 

注意:kill后面接的数字默认会是PID,如果想要管理bash的工作控制,就得要加上%数字了。

 

AnmydeMacBook-Pro:~ root# jobs

[1]-  Stopped(SIGTSTP)        vim ~/.bashrc

[2]+  Stopped(SIGTSTP)        find / -print

AnmydeMacBook-Pro:~ root# kill -9 %2;jobs

[1]+  Stopped(SIGTTOU)        vim ~/.bashrc

[2]   Killed: 9               find / -print

 

  • 进程管理

进程的查看

ps:将某个时间点的进程运行情况选取下来

ps aux:查看系统所有的进程数据

ps -l:仅查看自己的bash相关进程

 

top:动态查看进程的变化

top [-d 数字] | got [-bnp]

-d:后面可以接秒数,就是这个界面更新的秒数,默认为5秒

-b:以批次的方式执行top,还有更多的参数可以使用通常会搭配数据流重定向来将批处理的结果输出成为文件。

-n:与-b搭配,意义是,需要进行几次top的输出结果

-p:制定某些个PID来进行查看监测而已。

 

在top执行过程中可以使用的按键命令:

?:显示在top当中可以输入的按键命令

P:以CPU的使用资源排序显示

M:以内存的使用资源排序显示

N:以PID来排序

T:由该进程使用的CPU时间累积排序

k:给予某个PID一个信号(signal)

r:给予某个PID重新制定一个nice值;

q:离开top软件

top -d 2 —>每2秒钟更新一次top

Processes: 283 total, 2 running, 4 stuck, 277 sleeping, 1395 threads                                             14:35:17 —>当前时间

Load Avg: 4.84, 3.73, 2.76  CPU usage: 7.26% user, 7.74% sys, 84.98% idle

SharedLibs: 113M resident, 17M data, 7828K linkedit. MemRegions: 60587 total, 2758M resident, 82M private, 1264M shared.

PhysMem: 8130M used (1972M wired), 60M unused.

VM: 891G vsize, 533M framework vsize, 1997661(0) swapins, 2167366(0) swapouts.

Networks: packets: 783425/644M in, 682988/136M out. Disks: 781094/24G read, 763289/28G written.

PID   COMMAND      %CPU  TIME     #TH   #WQ  #PORTS MEM    PURG   CMPRS  PGRP PPID STATE    BOOSTS    %CPU_ME

5096  java         0.1   00:03.29 20    0    77     109M   0B     0B     5020 5020 sleeping *0[1]     0.00000

5095  AddressBookS 0.0   00:00.04 2     0    49     2040K  0B     0B     5095 1    sleeping *1[1]     0.00000

5074  plugin-conta 0.0   00:00.56 22    0    162    26M    0B     0B     855  855  sleeping *0[28]    0.00000

5067  java         0.1   00:22.91 55    0    148    429M   0B     0B     5020 5020 sleeping *0[2]     0.00000

5042  java         0.0   00:05.09 23    0    84     112M   0B     0B     5020 5020 sleeping *0[2]     0.00000

5027  fsnotifier   0.0   00:00.03 3     0    30     336K   0B     412K   5020 5020 sleeping *0[1]     0.00000

5025  CVMCompiler  0.0   00:00.41 2     1    27     10M    0B     1452K  5025 1    sleeping *0[1]     0.00000

5021  ocspd        0.0   00:00.08 5     0    69     1780K  0B     416K   5021 1    sleeping *0[1]     0.00000

5020  idea         7.9   02:31.44 74    1    359-   699M+  0B     27M    5020 1    sleeping *0[64+]   0.07401

5005  top          2.9   00:15.70 1/1   0    30     2424K  0B     444K   5005 3635 running  *0[1]     0.00000

…….

 

top -b -n 2 > /tmp/top.txt —>将top的信息存到文件中

 

echo $$ —>查看bash PID

 

系统资源的查看

free:查看内存使用情况

free [-b|-k|-m|-g] [-t]

-b:直接输入free时,显示的单位是KB,可以使用b(bytes),m(MB),k(KB),及g(GB)来显示单位

-t:在输出的最终结果中显示物理内存与swap的总量

 

uname: 查看系统与内核相关信息

uname [-asrmpi]

-a:所有系统相关的信息,包括下面的数据都会被列出来

-s:系统内核名称

-r:内核的版本

-m:本系统的硬件名称,例如:i686

-p:CPU的类型,与-m类似,只是显示的是CPU的类型

-i:硬件的平台(ix86)

 

netstat -[atunlp]

-a:将目前系统上所有的连接、监听、socket数据都列出来

-t:列出tcp网络数据报的数据

-u:列出udp网络数据报的数据

-n:不列出进程的服务名称,以端口号来显示

-l:列出目前正在网络监听的服务

-p:列出该网络服务的进程PID

AnmydeMacBook-Pro:tmp root# netstat

Active Internet connections

Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)    

tcp4       0   1084  10.63.53.31.63488      58.87.82.241.https     ESTABLISHED

tcp4       0      0  10.63.53.31.63487      6.6.6.6.https          SYN_SENT   

tcp4       0      0  10.63.53.31.63486      218.76.94.196.http     ESTABLISHED

tcp4      31      0  10.63.53.31.63485      59.111.160.197.https   CLOSE_WAIT

tcp4      31      0  10.63.53.31.63484      59.111.160.197.https   CLOSE_WAIT

tcp4       0      0  10.63.53.31.63479      111.202.100.40.http    ESTABLISHED

 

AnmydeMacBook-Pro:tmp root# netstat -a | grep tcp  

tcp4       0      0  10.63.53.31.63418      223.167.82.172.http    ESTABLISHED

tcp4       0      0  10.63.53.31.63419      140.207.127.59.http    ESTABLISHED

tcp4       0      0  localhost.63251        localhost.63279        ESTABLISHED

tcp4       0      0  localhost.63279        localhost.63251        ESTABLISHED

tcp4       0      0  localhost.8005         *.*                    LISTEN    

tcp46      0      0  *.8009                 *.*                    LISTEN  

 

daemon相关文件以及某些重要的配置文件放置处

1)/etc/init.d/*:启动脚本放置处

2)/etc/sysconfig/*:各服务的初始化环境配置文件

3)/etc/xinetd.conf, /etc/xinetd.d/*:super daemon配置文件

4)/etc/*:各服务各自的配置文件

5)/var/lib/*:各服务的程序的PID记录处

 

日志文件的权限通常是设置为仅有root能够读取。

日志所在目录/var/log

syslog的配置文件:/etc/syslog.conf

 

Linux系统启动过程如下:

1)加载BIOS的硬件信息与进行自我测试,并依据设置取得第一个可启动的设备

2)读取并执行第一个启动设备内MBR(MasterBoot Record,主引导分区) 的boot loader(即是grub,spfdisk等程序)

3)依据boot loader的设置加载Kernel, Kernel会开始检测硬件与加载驱动程序

4)在硬件驱动成功后,Kernel会主动调用init进程,而init会去的run-level信息

5)init执行/etc/rc.d/rc.sysinit问价来准备软件执行的操作环境(如网络、时区等)

6)init执行run-level的各个服务的启动(script方式)

7)init执行/etc/rc.d/rc.local文件

8)init执行终端机模拟程序 mingetty来启动login进程,最后就等待用户登录。

 

rpm:软件管理程序

rpm -qa —>已安装的软件

rpm -q[licdR] 已安装的软件名称

rpm -qf 存在于系统上面的某个文件名

rpm -qp[licdR] 未安装的某个文件名称

Linux学习--根据鸟哥的Linux私房菜(基础学习篇 第三版)整理

利用yum进行查询、安装、升级与删除功能

查询:yum [list|info|search|provides|whatprovides]

安装/升级:yum [install|update]

删除功能:yum [remove]软件

 

完整备份的增量备份

#完整备份

dump -0u -f /backupdate/home.dump /home

#第一次进行增量备份

dump -1u -f /backupdate/home.dump.1 /home

 

tar命令进行完整备份,将不必要的/proc,/mnt,/tmp等目录不备份,其他数据则予以备份:

tar --exclude /proc --exclude /mnt --exclude /tmp -jcvp -f /backupdate/system.tar.bz2

 

完整备份的差异备份

tar -N ‘2018-08-29’ -jpcv -f /backupdate/home.tar.bz2 /home