马哥Linux

shell:人机交换接口

内核功能:进程管理、内存管理、文件系统、网络功能、硬件驱动、安全机制

历史:

1、GE,BELL,MIT弄了一个Multics,汇编弄得

2、Ken制作了Space Travel,但这个游戏只能在Multics上运行,就自己整了一个Unics

3、Ken和他同时在B语言的基础上开发了C语言,用C重写了Unics

4、伯克利学生学习,加了些功能,出了BSD

5、BSD和BELL打官司

6、80年代,PC机到来,但是Unix不能在PC上运行

7、美国教授开发CP/M(贵)

8、微软成立,弄了个DOS,运行在PC上

9、微软弄了Windows

10、FreeBSD(运行在PC上),OpenBSD(安全),NetBSD(服务)

11、Andrew:Minix

12、Linus:Linux

13、80年代,GNU:GNU is Not Unix;GPL(宣言):General Public License;gcc:GUN C Complier;GNU/Linux

linux基本原则:

  • 1.由目的单一的小程序组成,组合小程序完成复杂任务
  • 2.一切皆文件
  • 3.尽量避免捕获用户接口
  • 4.配置文件保存为纯文本格式

#:管理员root

$:普通用户

命令格式:

命令 选项 参数

选项:短选项:-;长选项:--word

GUI:Gnome:C;KDE:C++;XFace

CLI:sh,bash,csh,zsh,ksh,tcsh

su:switch user

pwd:printing working directory

ls

文件类型:

  • -:普通文件(f)
  • d:目录文件
  • b:块设备文件(block)
  • c:字符设备文件(character)
  • l:符号链接文件(symbolic link file)
  • p:命令管道文件(pipe)
  • s:套接字文件(socket)

文件权限:9位,每3位一组,每一组:rwx(读,写,执行)例如:r--,文件智能被读

文件硬链接的次数

文件的属主(owner)

文件的数组(group)

文件大小(size),默认单位是字节

时间戳(timestamp):最近一次被修改的时间

 马哥Linux_第1张图片

  • 访问:access
  • 修改:modify,改变了文件的内容
  • 改变:change,metadata,元数据,改变了文件的属性

-l:长格式

-h:做单位转换

-a:显示以.开头的隐藏文件,.表示当前目录,..表示父目录

-A:显示隐藏文件,不显示.和..

-d:显示目录自身属性

 -i:index node,inode,文件号

-r:逆序显示

-R:递归显示

cd:

家目录,主目录,home directory

cd:回到家目录

cd ~:回到家目录

cd -:返回上一次目录

cd ~username:进入其他用户家目录

命令类型:

内置命令(shell内置)

外部命令:在文件系统的某个路径下有一个与命令名称相应的可执行文件

type:显示指定命令属于哪种类型

printenv:显示环境变量

hash:查看缓存

马哥Linux_第2张图片

date:时间管理

硬件时钟,系统时钟

获得命令的使用帮助:

内部命令:help command

马哥Linux_第3张图片

外部命令:command --help

马哥Linux_第4张图片

命令手册:manual

man command

man一般用来查看外部命令,使用man来查看内部命令时,报错。

man分章节

whatis command:查看一个命令在哪个章节

1.用户命令(/bin,/usr/bin,/usr/local/bin)

2.系统调用

3.库用户

4.特殊文件(设备文件)

5.文件格式(配置问价你的语法)

6.游戏

7.杂项

8.管理命令(/sbin,/user/sbin,/usr/local/sbin)

man:

  • NAME:命令名称

               <>:必选

               []:可选的

               ...:可以出现多次

               |:多选一

               {}:分组

  • SYNOPSIS:用法说明
  • DESCRIPTION:命令的详细说明,可能包括每一个选项的意义
  • OPTIONS:说明每一个选项的意义
  • FILES:此命令相关的配置文件
  • BUGS:出现bug向谁报告
  • EXAMPLES:使用实例
  • SEE ALSO:另外参照

翻屏:

  • 向后翻一屏:space
  • 向前翻一屏:b
  • 向后翻一行:enter
  • 向前翻一行:k

查找:

  • /keyword:向后
  • n:下一个
  • N:前一个
  • ?keyword:向前
  • n:下一个
  • N:前一个

q:退出

在线文档:

info command,用的比较少

马哥Linux_第5张图片

文档:/usr/share/doc

cal:calendar

练习:echo

1.echo是内部命令还是外部命令

2.其作用?

3.输出内容换行

printf

 根文件系统

/boot:系统启动相关的文件,如内核,initrd,以及grub(bootloader)

/dev:设备文件

  • 块设备:随机访问,数据块,磁盘
  • 字符设备:线性访问,键盘,鼠标,显示器
  • 设备号:主设备号(major),次设备号(minor)

/etc:配置文件,纯文本文件

/home:家目录,每一个用户的家目录通常默认为/home/username

/root:管理员的家目录

/lib:库文件

  • 静态库,.a;程序编译时把静态库包含进去,可以在其他机器上运行
  • 动态库,.so(shared object),在其他机器上运行需要有动态库
  • /lib/modules:内核模块文件

/media:挂载点目录,移动设备

/mnt:挂载点目录,额外的临时文件系统

/opt:可选目录,第三方程序的安装目录

/proc:伪文件系统,内核映射文件

/sys:伪文件系统,跟硬件设备相关的属性映射文件

/tmp:临时文件

/var:可变化的文件

/bin:可执行文件,用户命令

/sbin:管理命令

/usr:只读文件,shared,read-only

          /usr/bin

         /usr/sbin

         /usr/lib

        /usr/local:

               /usr/local/bin

               /usr/local/sbin

               /usr/local/lib

mkdir:创建空目录

-p:mkdir x/y/x -p,

-v:verbose,显示创建时候的详细信息

创建1/2/3/x,1/2/y

mkdir 1/2/{3/x,y} -pv

命令行展开:

马哥Linux_第6张图片

创建a_b,a_c,d_b,d_c

mkdir {a,d}_{b,c} -pv

touch创建文件:

touch:本来是修改文件的时间戳的,文件不存在的时候,会默认创建一个

马哥Linux_第7张图片

马哥Linux_第8张图片

touch -a改变访问时间--默认为当前时间

马哥Linux_第9张图片

touch -m改变修改时间--默认为当前时间

马哥Linux_第10张图片

文件的改变时间不能自己该。

touch -t改变修改时间---自己设定时间

马哥Linux_第11张图片

创建文件,可以使用文本编辑器

word不是文本编辑器

nano:功能少

删除文件:rm

-i:删除时给提示

-f:不提示,直接删除

-r:递归删目录

复制文件:cp

cp scr dest(目标只能有一个)

一个文件到一个文件/目录

将一个文件复制到一个文件,如果文件已存在,则会覆盖文件的内容

cp hy.txt hy.py

hy.txt的内容到hy.cp,hy.py文件名不变。

如果目标文件不存在,则会自动创建一个。

马哥Linux_第12张图片

多个文件到一个目录

cp file1 file 2 file3将file1和file2复制到目录file3下

复制目录

cp -r

-p 保留文件的mode,ownership,timestamps等属性;默认哪个用户复制的文件,文件就属于哪个用户。hy复制的root的文件,复制后的文件就属于hy的。

移动文件mv

mv src dest

移动文件夹不用加-r,和cp不同。

src和dest在同一个目录下,就是重命名。

install

马哥Linux_第13张图片

install src dest:复制文件,复制后的文件有执行权限

install -r directory:创建目录

马哥Linux_第14张图片

目录管理:

ls,cd,pwd,mkdir.rm,tree

文件管理:

touch,stat,file,cp,mv,mano

文本处理命令:

cat,more,less,head,tail,cut,sort,uniq,grep

查看文本:

cat、tac、more、less、head、tail

cat:连接并显示

  • -n:显示的时候加行号
  • -E:每行加一个结束符$

马哥Linux_第15张图片

tac:从后往前输出

马哥Linux_第16张图片

more:空格向后翻

less:光标上下滑动

head:查看文件的前n行,默认为10

tail:查看文件的后n行,默认为10

        -n

马哥Linux_第17张图片

马哥Linux_第18张图片

tail -f:查看文件尾部,不退出,等待显示后续追加至此文件的新内容。

测试的时候怎么tail -f没效果,换成tail -F有效果。

马哥Linux_第19张图片

文本处理:

cut,join(用的不多),sed,awk

cut:

          -d:指定字段分隔符,默认是空格,不能使tab键

          -f:指定要显示的字段

                    -f 1,3,显示第1和第3个字段

                    -f 1-3,显示1-3个字段

马哥Linux_第20张图片

马哥Linux_第21张图片

文本排序: sort

只影响显示次序,不影响源文件,默认按照ascii进行排序。

-n:数值排序

-r:降序

-t:指定字段分隔符

-k:以哪个字段为关键字进行排序

-u:排序后去掉重复行

-f:排序时忽略字符大小写
 

马哥Linux_第22张图片

马哥Linux_第23张图片

马哥Linux_第24张图片

uniq

uniq中,只把相邻的重复的行认为是一样的,行内容相同,不相邻时,不认为一样。

-d:只显示重复的行

-D:把所有重复的行都显示出来

-c:显示文件中行重复的次数

马哥Linux_第25张图片

文本统计wc(word count)

显示一个文本有多少话,多少个单词,多少个字节

-l:只显示行

-w:只显示单词数

-c:只显示字节数

-m:显示字符数

-L:显示最长的一行的字符数

马哥Linux_第26张图片

字符处理命令:tr---用于实现转换或删除字符

tr 'ab' 'AB':将小写a,b转换为大写A,B

tr 'a-z' 'A-Z':将小写转换为大写

tr -d:删除字符集中所有出现的字符,

例如:tr -d ‘ab’,把出现的a和b都删除。

马哥Linux_第27张图片

bash

GUI:Gnome,KDE,Xface

CLI:sh,csh,ksh,bash,tcsh,zsh

shell,子shell,在bash中打开bash

bash:

1.命令历史

2.管道,重定向

3.命令别名

4.命令行编辑

5.命令行展开

6.命令行通配

7.支持变量

8.支持编程

命令行编辑:

光标跳转:

Ctrl+a:调到命令行首

Ctrl+e:调到命令行尾

Ctrl+u:删除光标至命令行首的内容

Ctrl+k:删除光标至命令行尾的内容

Ctrl+<:光标左移一个单词

Ctrl+l:清屏

命令历史:

history

-c:清空命令历史

-d:删除某个历史 -d 500;-d 500 10删除500开始的10条命令

家目录下有一个.bash_history文件,保存的缓存命令

环境变量“

PATH:命令搜索路径

HISTSIZE:命令历史缓冲区大小

命令历史使用技巧

!n:使用第n条历史命令

!-n:执行命令历史中倒数第n条命令

!!:执行上一条命令

!strings:执行命令历史中最近一个以指定字符串开头的命令

!$:引用前一个命令的最后一个参数

Esc,  .:引用前一个命令的最后一个参数,先按下Esc,再按.,不要同时按

Alt+.:引用前一个命令的最后一个参数,同时按

马哥Linux_第28张图片

命令补全 :两下Tab键,显示所有可选命令

路径补全

命令别名

alias 命令别名='原命令名[options] [arguments]'

        alias cls = clear

在shell中定义的别名仅在当前shell生命周期中有效;别名的有效范围仅为当前shell进程;

如果要定义永久别名的话, 就要更改bash的配置文件

alias:显示当前定义的别名

unalias 命令别名:取消命令别名

有些命令别名是命令加选项,如果要使用原命令:\command

马哥Linux_第29张图片

马哥Linux_第30张图片

命令替换:$(command),`command`(和波浪线相同的那个反引号)

把命令中某个子命令替换为其执行结果的过程

创建某个文件,以当前的时间命令

bash中支持的引号:

``:命令替换

“”:弱应用,可以实现变量替换

'':强应用,不完成变量替换

文件名通配,globbing

通配符不是万能的

*:任意长度的任意字符

?:任意单个字符

[]:匹配指定范围内的任意单个字符,例如[0-9],[a-z],[a-zA-Z]

[:space:]:空白字符

[:punct:]:标点符号

[:lower:]:小写字母

[:upper:]:大写字母

[:alpha:]:大小写字母

[:digit:]:数字

[:alnum]:数字和大小写字母

^:匹配指定范围之外的任意单个字符

马哥Linux_第31张图片

用户及权限

权限:

r,w,x

文件:

r:可读,可以使用类此cat等命令查看文件内容

w:可写,可以编辑或删除此文件

x:可执行,可以命令提示符下当做命令提交给内核运行。

目录:

r:可以对此目录执行ls以列出内容的所有文件

w:可以在此目录创建文件

x:可以使用cd切换进此目录,也可以使用ls -l查看内部文件的详细信息;

rwx:

r--:只读,---无权限

马哥Linux_第32张图片

用户:UID,/etc/passwd

组:GID,/etc/group

三类用户:

u:属主

g:数组

o:其他用户,other

影子口令:

用户:etc/shadow,真正存储用户密码的地方

组:/etc/gshadow:真正存储组密码的地方

用户类别:

      管理员,UID=0

      普通用户,UID为1-65535

              系统用户:1-499,运行一些系统进程的,不能登录

              一般用户:500-60000

用户组类别:

        管理员组

        普通组:

                系统组

                一般组

用户组类别:

私有组:创建用户时,如果没有给用户指定所属的组,系统会自动为其创建一个与同户名同名的组

基本组:用户的默认组,用户创建文件时,文件默认所属的组

附加组,额外组:默认组以外的其他组

进程访问文件时,先看进程的发起着是不是有使用这个进程的群里,再看进程发起者有没有使用文件的权利,先判断用户是否一致,再判断用户是否属于文件的属组。

进程:tom,tom

对象:Jerry tom a.txt

tom :ls

root/bin/ls

/etc/passwd

account:用户名,登录名

password:加密后的密码,或密码占位符x

UID:

GID:基本组ID

comment:注释

Home Dir:家目录

shell:用户默认使用的shell

cat /etc/shells

马哥Linux_第33张图片

/etc/shadow

account:登录名

encrypted password:加密后密码

最近一次修改密码的日期

密码最短使用期限

密码最长使用期限

密码修改提示时间

密码过期时间

账号过期时间

保留字段

 

单向加密,散列加密,也叫指纹加密:提取数据特征码,用作数据校验

1.雪崩效应,初始条件的微小改变引起结果的巨大变化,原始数据微笑改变,hash值变化很大

2.定长输出

MD5:Message Digest,128位定长输出

SHA1:Secure Hash Algorithm,160位定长输出

uderadd:添加用户

这时/etc/passwd下会增加一个用户

给用户设置密码

查看/etc/shadow和/etc/group下变化

关于useadd的信息查看/etc/default/useradd

马哥Linux_第34张图片

useradd [options] username

-u UID

-g GID(基本组),可以用组名,也可以用组ID,组必须得事先存在

-G GID,...(附加组)

-c ”comment“,指定注释

-d /path/to/directory,指定家目录

-s SHELL,指定默认shell

-m 自动创建家目录,如果不加-m,将不会创建;

-k选项,只能和-m选项何在一起用,-k指定创建家目录时,要复制到家目录中的文件和目录;当使用-m而不使用-k时,会把/etc/skel下的文件复制到创建的家目录

-M:不创建同名组,即使在/etc/login.defs中设置的(CREATE_HOME)为yes,但是我在这个文件里面根本就没有发现CREATE_HOME。

创建用户后使用sh时只有一个提示符$,使用bash,用户名和机器名就出来了

马哥Linux_第35张图片

查看/etc/skel文件

 

新创建的家目录里面其实是自动包含了这些文件的

创建系统用户,默认是不创建系统用户家目录的,但是可以使用-m创建家目录

关于/etc/group文件

马哥Linux_第36张图片

组名:密码:GID:有哪些用户把这个组当成附加组。

添加组groupadd groupname

环境变量:

PATH

HISTSIZE

SHELL:保存当前用户使用的shell

userdel:删除用户,默认不删除用户家目录

userdel [option] username

-r:删除用户的同时同时删除家目录

删除用户后,/etc/passwd和/etc/shadow中用户的账户信息都会被删除

马哥Linux_第37张图片

id:查看用户的账号属性信息

id [options] [username]

-u:uid

-g:gid

-G:用户所属于的所有组Id

 -n:显示名字,不显示id

马哥Linux_第38张图片

finger :查看用户账号信息

finger username

马哥Linux_第39张图片

修改用户账号属性:

usermod

usermod 和useradd用法几乎一样

-u:修改uid

-g:修改GID,GID得事先存在

-a -G:为用户在原有GID的基础上追加新的附加组;不使用-a选项会覆盖此前的附加组。

-c:修改注释信息

-d -m:指定新的家目录,-m表示把原来家目录中的文件移动到新的家目录中

-s:改shell

-l:该用户的登录名,login

-L:锁定账号

-U:解锁账号

-r:添加一个系统用户

马哥Linux_第40张图片

 chsh:change shell,更改用户的默认shell

马哥Linux_第41张图片

 chfn:finger中修改注释信息

马哥Linux_第42张图片

密码管理:

passwd [username]

-l:lock,锁定用户账户

-u:解锁

-d:删除用户密码

-n:密码最少使用时间

-x:密码最长使用时间

马哥Linux_第43张图片

pwck:检查用户账号完整性

马哥Linux_第44张图片

 组管理:

创建组:groupadd

groupadd

-g:指定GID

-r:添加系统组

groupmod

-g :GID

-n:groupname

groupdel

gpasswd:为组设定密码

newgrp groupname:临时进入一个新组 ,exit返回到原来的组

马哥Linux_第45张图片 chage:更改用户密码过期时间

-d:最近一次的修改时间

-E:过期时间

-I:非活动时间

-m:最短使用期限

-M:最长使用期限

-w:警告时间

权限管理

chown:改变文件属主(管理员才有权限)

chown username file,...

-R:修改目录及其内部文件的属主

--reference=/path/to/somefile file,...把file的权限改为跟somefile的一样。

马哥Linux_第46张图片

chown改变目录的属主,默认目录里面的属主不变

马哥Linux_第47张图片

使用-R

马哥Linux_第48张图片

--reference选项

chgrp:改变文件属组

chgrp groupname file,...

-R:和chown一样,更改目录和目录中文件的属组

--reference=/path/to/somefile file,...同时改属主属组

马哥Linux_第49张图片

马哥Linux_第50张图片

 同时改变属主属组

chown username:groupname file,...

chown username.groupname file,...

马哥Linux_第51张图片

chown --reference同时改属主属组

马哥Linux_第52张图片

chown -R username:groupname directory

马哥Linux_第53张图片

只改属组

chown :groupname file,...

马哥Linux_第54张图片

 chmod:修改文件的权限

修改三类用户的权限

chmod MODE file,...

         例如chmod 750 a.txt

         注意:只写75表示075;只写5表示005

-R:更改目录及目录中所有文件

--reference=

马哥Linux_第55张图片

修改某类用户或某些类用户权限

chmod 用户类型=MODE file,...

这里MODE为rwx,不是数组7等。rwx没有的地方可以省略或者用-代替

马哥Linux_第56张图片

 马哥Linux_第57张图片

修改某类用户某位或某些位权限

u,g,o,a

chmod 用户类型+|- MODE file,...

马哥Linux_第58张图片

马哥Linux_第59张图片

手动添加用户hive,基本组为hive,(5000),附加组为hd

1.修改/etc/group文件

sudo vim /etc/group

马哥Linux_第60张图片

2.修改 etc/passwd文件

sudo vim /etc/passwd

3.修改/etc/shadow文件

sudo vim /etc/shadow

4. 将/etc/skel下的文件复制到 /home/hive

5.设置hive目录及其内部文件的属主数组均为hive

马哥Linux_第61张图片

6.设置组用户和其他用户的权限为0

马哥Linux_第62张图片

7.为hive设置密码

马哥Linux_第63张图片

 创建一个文件默认权限:

umask:遮罩码

文件:666-umask

目录:777-umask

管理员:umask为022

普通用户:umask为002

马哥Linux_第64张图片

普通用户创建一个文件的权限为664,创建一个目录的权限为775

马哥Linux_第65张图片

管理员创建一个文件的权限为644,创建一个目录的权限为755

马哥Linux_第66张图片

设置用户的umask:umask xxx

文件默认不能具有执行权限,如果算得的结果中有执行权限,则将其权限加1:

umask 023

文件:666-023=643 ,自动加1为644

目录:777-023=754

马哥Linux_第67张图片

设置umask为027让其他用户没有任何权限

马哥Linux_第68张图片

 站在用户登录的角度来说,shell的类型:

登录式shell

       正常通常某终端登录

       su -username

       su -l username

非登录式shell:

        su username

       图形终端下打开命令窗口

       自动执行的shell脚本

bash的配置文件

全局配置

        /etc/profile,/etc/profile.d/*.sh,/etc/bashrc

个人配置

        ~/.bash_profile,~/.bashrc

profile类的文件:

        设定环境变量

        运行命令或脚本(登录)

bashrc类的文件:

       设定本地变量

       定义命令别名

登录式shell如何读取配置文件?

/etc/profile-->/etc/profile.d/*.sh-->~/.profile-->~/.bashrc--~/etc/bashrc

非登录式shell如何读取配置文件?

~/.bashrc-->/etc/bashrc-->/etc/profile.d/*.sh

例如:给hive用户设置一个命令别名:alias clr ='clear'

编辑hive用户的~/.bashrc文件

马哥Linux_第69张图片

 退出hive用户再次进入hive用户时生效。

例如:修改/etc/profile文件,让用户登录时显示一句话

添加

这里世界su -hive不会显示这段话。

系统设定

默认输出设备:标准输出:STDOUT,1

默认输入设备:标准输入:STDIN,0

标准错误输出:STDERR,2

标准输入:键盘

标准输出:显示器

I/O重定向:

输出

>:覆盖输出

马哥Linux_第70张图片

>>:追加输出

马哥Linux_第71张图片

set -C:禁止对已存在文件使用覆盖重定向

           强制覆盖输出,则使用>|

马哥Linux_第72张图片

sec+C:关闭上述功能

马哥Linux_第73张图片

2>:重定向错误输出

2>>:追加错误输出

如果输入的时候没有错误,就不重定向,直接输出

&>:重定向正确输出或错误输出到同一个文件

马哥Linux_第74张图片

马哥Linux_第75张图片

输入重定向

<:

马哥Linux_第76张图片

<<:Here Document,生成文档

结束符可以随便起,一般为END或者EOF

马哥Linux_第77张图片

管道 :前一个命令的输出,作为后一个命令的输入

命令1|命令2|命令3|...

tee

将数据输出一份并保存一个到文件

注意:这个hello world是tee输出的不是echo输出的。

只显示文本的行数,不显示任何附加信息

练习:

取出/etc/passwd文件的第6行

使用管道,先用head取前6行,再用tail取最后一行

取出/etc/passwd文件中倒数第9个用户的用户名和shell,显示到屏幕上并保存到/tmp/users中。

显示/etc目录下所有以pa开头的文件,并统计其个数:

不使用文本编辑器,将alias cls=clear一行内容添加至当前用户的.bashrc文件中 :

~:用户主目录

 文本查找grep,egrep,fgrep

grep:根据模式去搜索文本,并将符合模式的文本行显示出来

Pattern:文本字符和正则表达式的元字符组合而成匹配条件

 grep [OPTIONS] PATTERN [FILE...]

-i:忽略大小写

--color:匹配到的内容加颜色

-v:反向,显示没有被匹配到的行

-o:只显示被模式匹配到的字符串

正则表达式:REGEXP:regular expression

元字符:

.:匹配任意单个字符

匹配次数(贪婪模式):

*:匹配其前面的字符任意次

.*:任意长度的任意字符

a,b,ab,aab,acb,adb,amnb

a*b:b,ab,aab,acb,adb,amnb

a.*b:ab,aab,acb,adb,amnb

马哥Linux_第78张图片

马哥Linux_第79张图片

\?:匹配其前面的字符1次或0次;?前面的字符可有可无的意思

a?b

马哥Linux_第80张图片

\{m,n\}:匹配其前面的字符至少m次,至多n次

\{1,\}:前面字符至少出现一次,多了不限

\{0,3\}:前面的字符至多出现三次,最少可以出现0次。

\{2\}:出现2次

马哥Linux_第81张图片

位置锚定:

^:锚定行首,此字符后面的任意内容必须出现在行首

$:锚定行尾,此字符前面的任意内容必须出现在行尾

^$:空白行

\<或\b:锚定词首,其后面的任意字符必须作为单词首部出现

\>或\b:锚定词尾,其前面的任意字符必须作为单词尾部出现

例如\

马哥Linux_第82张图片

 

 建立一个文本,测试\<,\>;文本内容如下

马哥Linux_第83张图片

[]:匹配指定范围内的任意单个字符

[^]:匹配指定范围外的任意单个字符

[:digit:],[:lower:],[upper]

分组:

\(\)

\(ab\)*:ab作为一个整体,可以出现0次或任意次

\1:引用第1个左括号以及与之对应的右括号所包括的所有内容

\2:

\3:

马哥Linux_第84张图片

正则表达式:

Basic REGEXP:基本

Extended REGEXP:扩展

grep:使用基本正则表达式定义的模式来过滤文本的命令

-E:使用扩展正则表达式

-A #:除了显示匹配到的行外,还显示改行后面的几行;#表示一个数字

-B #:除了显示匹配到的行外,还显示该行前面的几行

-C #:.....................................,还显示前面和后面的几行

马哥Linux_第85张图片

马哥Linux_第86张图片

 扩展正则表达式:

字符匹配:

.

[]

[^]

次数匹配:

*

?

+:匹配其前面的字符至少一次

{m,n},不需要\

位置锚定:

^

$

\<

\>

分组:

()

\1,\2,\3,...

或者

a|b:or

例:C|cat,意思是C或者cat,不是Cat或者cat

grep -E = egrep

fgrep:不支持正则表达式,fast grep

shell编程

静态语言:编译型语言,事先转换成可执行格式

动态语言:解释型语言,on the fly,边解释边执行,PHP、SHELL、Python、perl

shell面向过程,弱类型编程语言

变量类型:

     字符

     数值:

             整型

             浮点型

逻辑运算:与,或,非,异或

bash变量类型:

        环境变量

        本地变量(局部变量)

        位置变量

        特殊变量

引用变量:${变量},括号一般可以省略

单引号,强引用,不做变量替换

双引号,若引用,做变量替换

马哥Linux_第87张图片

本地变量:

set varname = value:作用域为整个bash进程

局部变量:

local varname = value:作用域为当前代码段

环境变量:

作用域为当前shell进程及其子进程

export varname = value,导出

varname = value,export varname

脚本在执行时会启动一个子shell进程:

命令行中启动的脚本会继承当前shell环境变量;

系统自动执行的脚本(非命令行启动)就需要自我定义需要个环境变量

马哥Linux_第88张图片

 位置变量:

$1,$2,...

特殊变量:

$?:上一个命令的执行状态返回值

程序执行,可能有两类返回值

     程序执行结果

     程序状态返回代码(0-255)

     0:正确执行

     1-255:错误执行,1,2,127系统预留

马哥Linux_第89张图片

 判断有没有某个用户

 /dev/null:软件设备,bit bucket,数据黑洞

撤销变量:

unset varname

马哥Linux_第90张图片

查看当前shell中变量

set

查看当前shell中环境变量:

printenv

env

export

shell中默认数据类型都是字符串:

马哥Linux_第91张图片

 脚本:命令的堆砌,按实际需要结合命令流程控制机制实现的源程序

shebang:魔数

#!/bin/bash

#注释行,不执行

马哥Linux_第92张图片

Ubuntu中新建一个文本,内容是英文的话,文件类型是ACCII文本,如果有汉字的话,文件类型是Unicode文本。

马哥Linux_第93张图片

bash如何实现条件判断?

条件测试类型:

        整数测试

        字符测试

        文件测试

条件测试的表达式:

[ expression ]

[[ expression ]]

test expression

整数比较:

-eq:测试两个整数是否相等:比如 $A -eq $B

马哥Linux_第94张图片

-ne:测试两个整数是否不等:不等为真,相等为假

-gt:测试一个数是否大于另外一个数:大于为真,否则为假

-lt:测试一个数是否小于另外一个数

-ge:大于或等于

-le:小于或等于

命令间的逻辑关系:短路操作

逻辑与:&&

逻辑或:||

如果用户user6不存在,就添加用户user6

! id user6 && useradd user6

id user6 || useradd user6

条件判断,控制结构:

单分支if语句

if 判断条件;then

   statement1

   statement2

   ...

fi

双分支的if语句:

if 判断条件;then

statement1...

else

statement2...

fi

马哥Linux_第95张图片

磁盘管理

设备文件:

b:按块问单位,随机访问的设备,硬盘

c:按字符为单位,线性设备,键盘

/dev

主设备号(major number)

标识设备类型

次设备号(minor number)

表示同一种类型中不同设备

mknod:创建设备文件

 mknod [OPTION]... NAME TYPE [MAJOR MINOR]

-m  MODE

马哥Linux_第96张图片

硬盘设备的设备文件名:

IDE,ATA:hd

SATA:sd

SCSI:sd

USB:sd

       a,b,c来区别同一种类型下的不同设备

IDE:

      第一个IDE口:主、从

                       /dev/hda,/dev/hdb

     第二个IDE口:主、从

                      /dev/hdc,/dev/hdd

sda,sdb,sdc,...

hda:

      hda1:第一个主分区

     hda2:

     hda3:

     hda4:

     hda5:第一个逻辑分区

查看当前系统识别了几块硬盘:

fdisk -l [/dev/to/some_device_file]

管理磁盘分区:

fdisk /dev/sda

   p:显示当前硬件的分区,包括没保存的改动

   n :创建新分区

       e:扩展分区

       p:主分区

   d:删除一个分区

   w:保存退出

   q:不保存退出

   t:修改分区类型

      -L

   l:显示所支持的所有类型

马哥Linux_第97张图片

马哥Linux_第98张图片

马哥Linux_第99张图片

 Linux支持的文件系统

FAT32:vfat

NTFS:默认不支持

ISO9660

ext2

ext3

ext4

xfs

reiserfs

jfs

nfs

ocfs2

gfs2

VFS:Virtual FileSystem

每一个分区都可以使用不用的文件系统,使用VFS屏蔽差异

 

进程管理:

网络管理:

IP、NETMASK、GATEWAY、HOSTNAME、DNS1,DNS2,DNS3

当DNS1找不到的时候,使用DNS2,例如DNS1掉线了,并不是DNS1找不到域名的时候用DNS2。

Linux

lo:本地换回

以太网网卡:ethX

pppX:

ifconfig :显示开启的网卡

  -a:显示所有信息

马哥Linux_第100张图片

查看某一个网卡信息

马哥Linux_第101张图片

修改ip地址

ifconfig ensX IP/MASK [up]:配置的地址立即生效,但重启网络服务或主机,都失效

关系网卡:ifconfig ensX down

马哥Linux_第102张图片

马哥Linux_第103张图片

重启ens33后,地址又变回去了

马哥Linux_第104张图片

网络服务:

网关:

route:查看路由表

add:添加

        -host:主机路由

        -net:网络路由

                -net  0.0.0.0默认路由

route add -net | -host DEST gw NEXTHOP

route add default gw NEXTHOP

马哥Linux_第105张图片

马哥Linux_第106张图片

U表示开启,G表示网关

 

del:删除

        -host

       -net

route del -net DEST

route del -net 0.0.0.0:删除默认路由

route del default

route -n:以数字方式显示各主机或端口等相关信息

route命令所做出的改动重启网络服务或主机后失效。

马哥Linux_第107张图片

 网络配置文件:

 

网络接口配置文件

/etc/network/interfaces

DNS服务器指定方法只有一种:

/etc/resolv.conf

nameserver DNS1

nameserver DNS2

马哥Linux_第108张图片

指定本地解析:

/etc/hosts

马哥Linux_第109张图片

DNS-->/etc/hosts-->DNS

配置主机名:

hostname HOSTNAME(立即生效,但不是永久有效,重启主机失效)

/etc/hostname

马哥Linux_第110张图片

重启网络服务

/etc/init.d/networking restart

马哥Linux_第111张图片

iproute2

      ip

            link:配置网络接口属性

            addr:协议地址

            route:路由

     link

          show

                  ip -s link show :-s显示统计数据

          set

                ip link  set  Dev {up|down},开启或禁用网卡

马哥Linux_第112张图片

 进程管理:

systemd进程号为1

其他进程都是systemd的子进程,或子子进程。。。

ls /proc,每一个目录对应一个进程

马哥Linux_第113张图片

ps:process stat

      SysV风格:

      BSD风格:

     a:显示所有与终端相关的进程

     u:

     x:显示所有与终端无关的进程

马哥Linux_第114张图片

 VSZ:虚拟内存集,RSS:常驻内存集,TTY:和哪个终端相关联,?表示和终端无关;[]括起来的表示内核线程

进程状态:

D:不可终端的睡眠

R:运行或就绪

S:可终端的睡眠

T:停止

Z:僵尸

<:高优先级进程

N:低优先级进程

+:前台进程组中的进程;前台:命令行输入的进程,和终端相关;进程组:进程集合

l:多线程进程

s:回话进程

进程的分类:

跟终端相关的进程

跟终端无关的进程

 

ps -elF

     -ef

     -eF

 

vim编辑器

vi:visual interface

vim:VI improved

vim模式:

编辑模式(命令模式)

输入模式

末行模式

模式转换:

编辑-->输入:

        i:在当前光标所在字符的前面,转为输入模式

       a:在当前光标所在字符的后面,转为输入模式

       o:在当前光标所在行的下方,新建一行,转为输入模式

       I:在当前光标所在行的行首,转换为输入模式

      A:在当前光标所在行的行尾,转换为输入模式

      O:在当前光标所在行的上面一行,转为输入模式

输入-->编辑:

       ESC键

编辑-->末行

末行-->编辑:

       ESC

马哥Linux_第115张图片

1.打开文件

vim +行号 finename:打开文件时直接处在那一行

vim + filename:打开文件后直接定位到最后一行

vim +/PATTERN:打开文件,定位到第一次被PATTERN匹配到的行首

2.关闭文件

1.末行模式关闭文件

:q 退出,

:wq  保存并退出

:q! 不保存退出

:w 保存

:w! 强行保存

:wq ----> :x

2.编辑模式下退出

ZZ:保存并退出

3.移动光标(编辑模式)

1.逐字符移动:

h:向左移动

l:右

j:xia

k:上

#h:移动#个字符

2.按单词移动

w:移至下一个单词的词首

e:跳到当前或下一个单词的词尾

b:跳至当前或前一个单词的词首

#w:一次跳#个单词

3.行内跳转:

0:绝对行首

^:行首的第一个费空白字符

$:绝对行尾

4.行间跳转

#G:直接跳转至第#行

G:最后一行

末行模式下:直接给出行号回车即可

四、翻屏

Ctrl+f:向下翻屏

Ctrl+b:向上返屏

Ctrl+d:向下翻半屏

Ctrl+u:向上翻半屏

五、删除单个字符

x:删除光标所在处的三个字符

#x:删除光标所在处及向后的共#个字符

六、删除命令:d

d命令跟跳转命令组合使用

#d跳转符:

#dw

#de

#db

dd:删除当前光标所在行

#dd:删除包括当前光标所在行之内的#行

末行模式下

:startaddr,endaddrd

:10,20d

.:表示当前行

$:最后一行

+#:向下的#行           :.,$-2d从当前光标所在行已知删除到倒数第二行

7.粘贴命令 p

p:如果删除或复制的为整行内容,则粘贴至光标所在行的下方;如果为非整行,则粘贴至光标所在字符的后面

P:如果删除或复制的为整行内容,则粘贴至光标所在行的上方;如果为非整行,则粘贴至光标所在字符的前面

8.复制命令 y

用法同d命令

9.修改:先删除内容,再转换为输入模式

c:用法同d命令

10.替换:r

R:替换模式

11.撤销编辑

u:撤销前一次的编辑操作,可以连续使用u

#u:直接撤销最近的#次操作,3u

撤销最近一次撤销操作:Ctrl +r

12.重复前一次编辑操作

.

13可视化模式

v:按字符选取

V:按行选取

14.查找

/PATTERN

?PATTERN

       n

      N

15.查找并替换

在末行模式下使用s命令

addr1,addr2@PATTERN@strings@gi

.,$-1s/he/HE/g

压缩格式:gz,bz2,xz,zip,Z

压缩算法:算法不同,压缩比也会不同

compress(很少使用):filename.Z  

uncompress:

 

只能压缩文件,不能压缩目录

gzip:.gz

        gzip filename:压缩完成后会删除源文件

        -d:解压缩

        -#:1-9,指定压缩比,默认是6

gunzip:解压缩

        gunzip filename.gz:解压缩完成后会删除源文件

zcat:zcat .gz,不解压的情况下,查看文本文件内容

bzip2:.bz2

          比gzip有着更大压缩比的压缩工具,使用格式近似

          bzip2 filename:压缩完成后会删除源文件

         -d:解压缩

         -#:1-9,指定压缩比,默认是6

          -k:压缩时保留源文件

         bunzip2:解压缩

         bzcat:不解压查看

xz:.xz

         xz filename:压缩完成后会删除源文件

         -d:解压缩

         -#:1-9,指定压缩比,默认是6

          -k:压缩时保留源文件

         unxz:解压缩

        xzdec:解压缩

         xzcat:不解压查看

你可能感兴趣的:(Linux基础知识)