马哥linux视频的学习笔记

history |tail -1 | cut -d'' -f2

计算命令:1)let 例;let C=$A+$B

2)C=$[$A+$B]

3)C=$(($A+$B))

4)expr命令 例:C=` expr $A + $B `


退出脚本;exit 例;exit 0


条件测试:

1)[空格 表达式 空格]

2)test 表达式

3)[[ 空格 表达式 空格]]

if grep 'bash' /etc/shadow

if后面为非零值为假


文件测试

-e file 测试文件是否存在

-f file        是否为普通文件

-d file       是否为目录

-r file    当前用户是否有读权限



$0表示当前命令



多分支if

if 判断1 ;then

语句1

elif 判断2; then

语句2

elif 判断3; then

语句3

else

语句4

fi








测试脚本有无语法错误

bash -n 脚本名称


单步执行脚本

bash -x 脚本名称


位置变量

shift 轮换参数内容




特殊变量:

$#:表示参数的个数

$?

$*:表示参数列表

$@:表示参数列表




sed数据流编辑器

sed对文件本身不处理

sed [选项] 'addresscommand'file...


address

1)1,100


2)/regularexpression/

例:/^root/


3)/pattern1/,/pattern2/

第一次被模式一匹配到的行开始到

第一次被模式二匹配到的行结束的

中间的所以行


4)linenumber

指定的行

$表示最后一行


5)startline,+n

从起始行开始的n行(一共n+1行)



command:

d:删除符合条件的行(只是不打印而已)

p:显示符合条件的行(符合的显示两次,不符合的显示一次)

a \string:在指定的行后面追加新行,内容为string

\n:可以用来换行

i \string:在指定的行前面追加新行,内容为string

r file:将指定的文件的内容添加到符合条件的行处

w file:将指定范围内的内容另存到指定文件中(追加的方式)

s/要查找的内容/要替换成的内容/   查找并替换(默认只替换每行中第一次匹配要被替换的内容)

               g:全局替换

      i:查找时忽略大小写


               &:引用匹配到模式的整个串

后向引用:

例:

sed 's#\(l..e\)#\1r#g' sed.txt

同一目的用&写

   sed 's#l..e#&r#g'   sed.txt



-n:静默模式,显示结果只和命令相关

-i:直接修改源文件(谨慎使用)

-e 命令1 -e 命令2....:可以同时进行命令1,2....

-f (把每个命令写进文件中)那个文件的路径 :也能同时处理多个命令

-r:使用拓展的正则表达式




for 变量 in 列表

do

循环体

done


如何生成列表

1)(1..10)

2) `seq 10`  等价于1)

seq a b c

a为起始数

b为步进长度

c为结束数


3)引用(``)命令




vim

vim +行号N 文件名:打开文件时直接在N上

vim +文件名:直接处在文件尾部

vim +/pattern 文件名:打开文件定位置


ctrl+f 上翻一屏

ctrl+b 下翻一屏

ctrl+d 下翻半屏

ctrl+u 上翻半屏


删除单个字符:x

n个字符:nx


d是删除命令

d0删除到行首

3dw删除三个单词

3dd删除3行(包含当前光标所在行)

dd删除当前行

末行模式下

/n 表示查找n

:1,9d表示删除第一到第九行

:.,9d删除当前行到第九行

+n表示向下n行


vim如何实现复制粘贴

复制yy

粘贴p

复制y的用法同d的用法

3yy复制三行



修改:先删除内容再自动转换成输入模式

c,c的用法同d命令


替换:r,只能替换单个字符

r+要替换成的字符


R:进入替换模式,用ESC退出

用于替换多个字符


撤销更改;u(最多撤销近50次操作)

3u撤销最近3次操作


ctrl+r撤销刚才的撤销操作


重复前一次的编辑操作:.



可视化模式:

v/V进入

V选中整行

选中后按d:删除

y:复制

p:粘贴



/a:向后查找a

?a:向前查找a

n找下一个,N找上一个



查找并替换

在末行模式下用s命令

%:表示全文


vim 跨文件执行

vim a b

在第一个文件操作后再末行模式下:next

到下一个文件进行操作

:prev回到上一个文件

:last切换到最后一个文件

:first回到第一个文件




分屏显示文件

ctrl+w 松开后再按s(水平分屏),v为(垂直分屏)

ctrl+w+向下的箭头 跳到下一个屏幕

:qa关闭所有窗口



分窗口多个文件

vim -o a b

水平分窗口显示a,b

vim -O 垂直分屏


将当前文件中部分内容另存了为一个文件

:add1,add2 w /新文件路径

将add1到add2的内容新存为文件



将另外一个文件的内容填充在当前文件中

末行模式下

:r /要被添加的文件的路径



跟shell交互

:!command

回车回到vim





显示行号:

set nu

set nonu不显示




忽略大小写

:set ignorecase/set ic

不忽略

:set noignorecase


设定自动缩进

:set autoindent/set ai

取消前面加no



高亮搜索

:set hlsearch


语法着色

:syntax on


vim配置文件

/etc/vimrc

对所以人生效

如果只想对当前用户生效

vim ~/.vimrc



使用vimtutor学习vim:

shell>vimtutor



字符测试

-n

-z测试是否为空


组合测试条件

-a :与关系

例如:

if [ $# -gt 1 -a $# -le 3]

等价于

if [ $# -gt 1 ] && [ $# -le 3 ]


-o:或关系


!:非关系




文件查找:

locate:

在全系统模糊查找文件(非实时)

updatedb:手动生成文件数据库

locate:优势速度快


find

1)实时查找

2)精确查找

3)遍历指定目录中索引文件完成查找

4)支持许多查找标准

find 查找路径 查找标准 查找后的处理运作

查找路径:默认为当前目录

查找标准:默认为指定路径下的所有文件

处理运作:默认为显示到屏幕


find匹配标准

-name 'filename' 对文件名进行精确匹配

-iname 'filename'对文件名匹配时不区分大小写

-user USERNAME:根据文件的属主来查找

-group GROUPNAME:根据文件的属组来查找


-uid

-gid

-nouser 专门查找没有属主的文件

-nogroup


-type 根据文件类型来查找

      f:普通文件

      d

      c:字符设备

      b:块设备

      l:符合连接

      p:管道设备

      s:套接字文件


-size 根据文件大小来查找

      数字+单位

           [+|-]数字k

                    M

                    G

例如find -size 512M

默认单位为字节


组合条件

-a

-o

-not

例如

find -nouser -a -type d

注意shell括号要加斜线

\(\)



根据时间查找

-mtime(modify指内容)

-ctime(change)

-atime(access)

后面的数字是天数,可以用+|―


-mmin

-cmin

-amin

表示分钟



根据文件权限查找

-perm MODE

精确匹配

MODE可以是755。。。。


-perm -MODE

文件权限能完全包含此MODE就匹配,它的范围大于 -perm MODE



-perm /MODE

表示有任何一位匹配就可以了



运作

-print:显示

-ls :类似于ls -l

-ok command {} \;每一次操作都需要用户确认

-exec command {} \;不需要确认




XARGS命令

find里面的

find -exec

等于

find xargs command

xargs不要\;结尾

但是需要管道

find xx|xargs command





特殊权限

SUID:运行某程序时,相应进程的属主仍保持文件的属主

     chmod u+s file :如果file原来就有执行权限则suid 显示为s,否则显示为S


SGID:运行某程序时,相应进程的属组仍保持文件的属组

sticky:表示在一个公共目录,每个人都能创建文件,删除自己的文件,但不能删除别人的文件

chmod o+t DIR 添加sticky

chmod o-t DIR  删除sticky


000

001:只有stciky

..

111

例如

chmod 1755 /backup/test 有sticky



普通用户无法使用:chown


FACL:文件系统的访问列表

利用文件扩展保存额外的访问控制权限

setfacl

       -m:设定

       -x:取消设定

          u:UID perm

          g:GID:perm

例如:

setfacl -m u:user1:rw backup

setfacl -x u:user1 backup


getfacl

例如:

getfacl backup


给一个目录设定默认的访问控制列表

例如:

set -m du:user1:rx dir



几个命令

whoami

who显示登陆的用户有哪些

   -r 显示当前运行级别


sleep +n :休眠n秒


w:显示登陆用户信息以及该登陆用户正在执行的命令

w显示的信息是who的加强版


last:用于显示登陆/重启的历史(即用户显示/var/log/wtmp文件)

last -n 3:只显示最近三次的信息


lastb 用于显示/var/log/btmp文件,用于显示用户错误的登陆尝试

也支持-n选项


lastlog:显示每一个用户最近一次登陆信息

显示特定用户的

            -u username


basename:用户显示路径的基名

basename $0 取脚本本身的基名


mail:打开自己的邮箱系统

mail -s 指定标题

发给root邮件

cat qq |mail -s 'hi' root



hostname:显示当前主机的主机名

hostname xx将hostname 改为xx


生成随机数

RANDOM

0-32768

用法举例

echo $RANDOM


随机数生成器

/dev/random  熵池空了后自己不能生成随机数

/dev/urandom 熵池空了后自己生成随机数




终端类型

console:控制台

pty:物理终端

tty:虚拟控制台(虚拟终端)

ttys:串行终端

pts/数字 :伪终端



case语句:每个分支;;结尾

case SWITCH in

value1)

       statement

       ....

;;


value2)

statement

        ....

;;

*)#相当于default

  statement

        ....

;;             

esac

例如:

case $1 in

[0-9])

     echo 'a' ;;

[a-z])

      echo'b';;

esac




磁盘管理:

根是自引用的


分区:是磁盘的逻辑边界

目录只是一个路径映射表


两个指向同一个inode的不同路径:叫做硬链接

1)硬链接只能对文件创建

2)不能跨文件系统,但是可以在不同的目录下

3)创建硬链接会增加文件被链接的次数


硬链接次数小于等于一时才能真正删除一个文件


符号链接(软链接)

1)可以应用于目录

2)可以跨文件系统

3)不会增加被链接文件的链接次数

4)其大小为指定的路径所包含的字符个数


创建链接

ln [-s -v]  源文件 目的文件

-s:为软链接

-v:显示过程

不带-s为硬链接



du 目录

查看所有文件的大小

du -s 目录

整个目录大小

du -h 目录

能够进行单位换算


df [option] [file]

显示分区情况

直接打df就能用的

df -i

看inode情况

df -p

不换行显示


设备文件(不占内存,因为没有大小)

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

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


/dev

那两个数字的意思

主设备号

      标识设备类型

次设备号

      标识同一种类型中不同设备

设备号存在inode当中


创建设备文件命令

mknod [opyion] name type [major|minor]

mknod -m MODE


查看当前系统有多少硬盘以及信息

fdisk -l


管理磁盘分区:

fdisk 

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

     n:创建新分区

        e:拓展分区

p:主分区


     d:删除一个分区

     w:保存退出

     q:不保存退出

     t:修改分区类型

        L:

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


高级格式化:mkfs


linux使用虚拟文件系统机制,虚拟文件系统是内核的模块


文件块大小只能是2的次方


内存空间分页面,页框大小一般是4K

bootloader在MBR里,MBR在512个字节大小的扇区里

创建文件系统时创建多少块组,这个数字保存在超级块中




超级块,GDT不能被损坏,所以需要备份多次

超级块中包含分区的全局信息

GDT:块组描述表,包含块组名,块组边界等信息



压缩、解压缩命令:只能压缩文件不能压缩目录

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

默认压缩后会删除源文件


gzip: .gz

bzip2: .bz2

xz: .xz


gzip +文件名/路径:能够实现压缩,可以添加多个文件

解压缩:

gunzip (等价于 gzip -d ):

       gunzip +文件名/路径 实现解压缩

解压完成后会删除原压缩文件


gzip -#:#取1-9,这是指定压缩比,默认压缩比为6


zcat:查看压缩文件



bzip2: .bz2

bzip2:比gzip有着更大的压缩比

也支持 -d

       -#

默认压缩时也会删除源文件

但是

 bzip2 -k 能够保留源文件


解压缩命令:

bunzip2

查看

bzcat


xz: .xz

压缩比更好,用法和gzip用户一样

解压缩

unxz

查看

xzcat/xzdec



zip:能够归档也能压缩(压缩后不删除源文件)

zip filename.zip file1 file2 ...


压缩时能够保持目录本身的结构

 

压缩总多文件的功能

archive:归档,归档本身不意味着压缩


例如

zip test.zip /etc/test/*

解压缩

unzip test.zip



只归档不压缩

tar

    -c 创建归档文件

    -f + 归档后的文件名.tar 操作的归档文件

    -x:展开归档,展开后.tar不删除

    --xattrs:表示在归档时保留文件的拓展属性信息

    -t:不展开归档查看文件

 

     -zcf:归档并调用gzip压缩

     -zxf:调用gzip解压缩并展开归档


     -jcf:调用bzip2

     -jtf:调用bzip2压缩,并查看文件

     -jxf:


     -Jcf:调用xz

     -Jxf:

甚至上面的指令可以不要-z,-j,-J因为tar可以根据文件后缀

选择压缩工具


例如:

tar -tf test.zip



cpio和tar的功能一样只是跟古老



read -p "..."

“”为提示信息

-t #后面为等候时间单位秒

例如:

read -t 5 A B

[-z $A]&& A=100

-z这里表示A超过延时时间没有值,我们手动赋值100



while循环:适用于循环次数未知的场景

while 条件 ; do

   statement

    ....

   done


例子:

#!/bin/bash

declare -i I=1

declare -i SUM=0


while [ $I -le 100 ] ; do

     let SUM+=$I

     let I++

done



echo的特殊用法

echo -e "\033[1mHello\033[0m,world."

echo -e "\033[33mHello\033[0m,world."


两位的3引导颜色,个位调整颜色

4引导背景符


例如:

echo -e "\033[1;37;41mHello\033[0m,world"



RAID:独立冗余磁盘阵列

文件在磁盘上以扇区存储

    在文件系统级别上以datablock存储


RAID :0为条带

      性能提示:读,写

      冗余(容错)能力无

               


       1为镜像

       写性能降,读性能提升

       有冗余能力


       2

       3

       4:用校验码



       5:轮流存校验码

       读写性能提升

       有冗余能力

       

       jbod:将多块盘连接成一块盘




madam::能将任何块设备做成RAID




until循环

until condition; do

statement 

....

done



for 变量 in 列表; do

循环体

done



还有一种类似C语言的写法

for (((      ));do

循环体


done



查看n次是否在线

ping -c 数字n IP号

     -W timeout




AWK:报告生成工具

awk 'pattern{action}' file

action: 

        print

例如:

awk '{print  $1,$3}'

$0表示一行的所有字段

$NF表示最后一个字段


awk - F:指定输入分割符


while,until,for

break:提前退出循环

continue:提前进入下一轮循环



制造死循环;while :;do


done



while read LINE ;do

循环体里可以对LINE进行处理

done < /文件 路径




脚本编写之函数

1)定义函数

function functionname{

command


}


或者

functionname(){

command


}

 

函数调用:直接在调用处写函数名就可以了

函数自定义执行状态返回值:

return n

n为0-255



接受参数的函数

函数名 参数1 参数2

$1  参数1 

$2  参数2



if `command`里面相当于 echo command



进程优先级:越小越高

0-99系统安排

100-139:自己调整 

nice值(-20到19),nice值越小,优先级越高


查看当前进程;

ps:process state

   a:查看和终端相关的进程

   x:查看和终端无关的进程

   u:看谁开启终端


   -e:显示所有进程

ps  -o 参数1, 参数2

例如: ps -o ni,pri



pstree:显示进程树


pgrep:以grep的风格显示匹配的进程,只显示进程号

pgrp -u bash


pidof 找进程的id号


top

       M:根据驻留内存大小进行排序

       P:根据cpu使用百分比进行排序

       T:根据累计时间进行排序


       l:是否显示平均负载和启动时间

       t:是否显示进行和cpu状态相关信息

       m:是否显示内存相关信息


       c:是否显示完整的命令行信息

       q:退出top

       k:终止某个进程



    -d:指定刷新时间

    -b:批处理模式 

    -n +n:批处理模式下,只显示几屏








vmstat:系统状态查看命令


free


kill:终止进程

kill pid

kill %作业号

killal command


pkill和pgrep类似


bg:让后台的停止作业继续运行

bg [作业号]


jobs:查看后台所有作业

作业号不同于进程号

+:命令将默认操作的作业

-:+结束后操作的作业


fg:将后台作业调回前台




进程状态:

D:不可中断的睡眠

S:可中断的睡眠

R:运行或就绪

T:停止

Z:僵尸


<:高优先级进程

N:低优先级进程

+:前台进程组中的进程

l:多线程进程

s:会话进程首进程



进程间通信(IPC)

共享内存

信号

semaphore(旗语)



重要的信号;

1 SIGHUP:让一个进程不用重启就可读其配置文件,并让新的配置信息生效

2 SIGINT  中断一个进程

9  SIGKILL 杀死一个进程

15 SIGTERM 终止一个进程,默认信号


指定一个信号:

信号号码:kill -l

信号名称;kill -SIGKILL

信号名称缩写:kill -KILL


调整nice值

调整已经启动的进程的:

renice NI PID


在启动时指定nice值

nice -n NI COMMAND



前台命令送到后台

ctrl+z:把正在前台的作业送往后台

command &:让命令在后台执行



sudo:某个用户能够以另外哪一个用户的身份通过哪些主机来执行什么命令

sudo 命令的绝对路径 

sudo后会要输入密码(当前使用者的密码),并在第一次输入密码后保存5分钟

sudo -k 关闭保存密码5分钟这一特性

sudo -l 列出当前用户可以使用的所有sudo类的命令


sudoers文件里添加信息:

who which_host=(run as who)  [tag]command



对称加密:用相同密钥,传输速度快


单向加密算法:提取特征码,保证数据的完整性


协商生成算法:密钥交换算法(密钥随时替换)


非对称加密算法:(公钥加密算法)

密钥队:

      公钥:p(公开的)

      私钥:s

发送方用自己的私钥加密数据,可以实现身份验证

发送方用对方的公钥加密数据可以保证数据的机密性



awk:报告生成器

    awk [options] 'script' file1 file2

    awk [options] 'pattern  {action}' file1 file2


    例如: awk '{print $1}' test.txt

           awk 'BEGIN{OFS=":"}{print $1,$2,$3,$4}' test.txt

      插入:awk 'BEGIN{OFS=":"}{print $1,"hello",$2}' test.txt


 


awk变量

FS:field separator 默认是空白字符,读取文本时所使用的字段分割符

RS:record separator 默认是换行符,输入文本信息所使用的换行符

OFS:output field separator

ORS:output row separator


awk -F:输入分割符号:

等价于awk '{FS=":"}'


NR:the number of input  records,awk命令所处理的记录数,如果有多个文件,这个数目会吧处理的多个文件中统一计数(一起计数)

NF:number of field:当前记录的field个数

FNR:与NR不同的是,FNR用于记录正处理的行是当前这一文件中被总共处理的行数(各自计数)

ARGV:数组,保存命令行本身这个字符串,如awk'{print $0}' a.txt  b.txt这个命令中,ARGV[0]保存awk,ARGV[1]保存a.txt

ARGC:awk命令的参数的个数

FILENAME:awk命令所处理的文件的名称

ENVIRON:当前shell环境变量及其值的关联数组


变量赋值

awk -v 变量名=“  ”

或者

awk ''BEGIN{var="variable testing";print var}'


printf用法

例子:

awk -F: '{printf "%-15s %i\n",$1,$3}'/etc/passwd



awk支持的pattern

1.正则表达式,格式为/regular expression/

2.表达式,其值为非0或者为非空字符时满足条件,如:$1==" ",$1~“模式”

3.指定的匹配范围,格式为pat1,pat2,pat1和pat2为模式

4.BEGIN/END:特殊模式,仅在awk命令执行前运行一次或者结束前运行一次

5.Empty(空模式):匹配任意输入行


例子:

打印表头:

awk -F: 'BEGIN{print "Username ID  Shell"}{printf "%-10s%-10s%-20s\n",$1,$3,$7}' /etc/passwd






常见的action:

1.expression

2.control statements

3.compound statements

4.input statements

5.output statements


控制语句:

1.if-else

语法:if (condition) {then-body}else {[else-body]}

例子:

awk -F: '{if ($1=="root") print $1, "admin"; else print $1,"common user"}' /etc/passwd

awk -F: '{if ($1=="root") printf"%-15s: %s\n",$1,"admin";else printf "%-15s: %s\n",$1,"common user"}'/etc/passwd

awk -F: -v sum=0 '{if ($3>=500)sum++}END{print sum}' /etc/passwd


2.while

语法:while (condition){statement1;statement2;...}

awk -F: '{i=1;while(i<=3){print $i,i++}}' /etc/passwd


3.do-while

语法:do{statement1,statement2,...}while(condition)

awk -F: '{i=1;do{print $i;i+++}while(i<=3)}' /etc/passwd


4.for

语法:for (variable assignment;condition;iteration process) {statement1,statement2,...}

awk -F: '{for(i=1;i<=3;i++)print $i}' /etc/passwd


for循环还可以用来遍历数组元素;

语法:for(i in array){statement1,statement2,...}

awk -F: 'NF!~/^$/{bash{NF}++}END{for (A in bash){printf "%15s:%i\n",A,bash[A]}}' /etc/passwd



5.case

语法:switch (expression) {case VALUE or /正则表达式/ :statement1,statement2,...default:statement1,...}



6.break 和continue

常用于循环或者case语句中


7.next

提前结束对本行文本的处理,并接着处理下一行:例如,下面的命令将显示其ID为奇数的用户

awk -F: '{if($3%2==0) next;print $1,$3}' /etc/passwd


数组

for (var in array){statement1,...}



例子:

netstat -ant |awk '/^tcp/{++s[$NF]}END{for(a in S)print a,S[a]}'

每出现一被/^tcp/模式匹配到的行,数组是S[$NF]就加一,NF为当前匹配到的行的最后一个字段,此处用其值作为数组S的元素索引


awk '{counts[$1]++};END{for(url in counts)print counts[url],url}' /var/log/httpd/access_log

用户与上一个例子相同,用于统计某日志文件中IP地址的访问量




先放上来呗,我再慢慢改。。。。。。















你可能感兴趣的:(linux,history)