Linux第二部分笔记

1 Linux磁盘和文件系统管理

理解inode,要从文件储存说起。文件存储在硬盘上,硬盘的最小存储单位叫做“扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个扇区的读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个“块”(block)。这种由多个扇区组成的“块”,是文件存取的最小单位。“块”的大小,最常见的是4KB,即连续八个sector组成一个block。

文件数据都储存在“块”中,那么很显然,我们还必须找到一个地方储存文件的“元信息”,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。包括了

  • Size 文件的字节数
  • Uid 文件拥有者的User ID
  • Gid 文件的Group ID
  • Access 文件的读、写、执行权限
    文件的时间戳,共有三个:
  • Change 指inode上一次变动的时间
  • Modify 指文件内容上一次变动的时间
  • Access 指文件上一次打开的时间
  • Links 链接数,即有多少文件名指向这个inode,删除时要用到
  • Inode 文件数据block的位置
  • Blocks 块数
  • IO Blocks 块大小
  • Device 设备号码
    inode满了有可能磁盘未满导致无法存入
    inode的内容

inode包含文件的元信息,具体来说有以下内容:

Size 文件的字节数
Uid 文件拥有者的User ID
Gid 文件的Group ID
Access 文件的读、写、执行权限
文件的时间戳,共有三个:
Change 指inode上一次变动的时间
Modify 指文件内容上一次变动的时间
Access 指文件上一次打开的时间
Links 链接数,即有多少文件名指向这个inode
Inode 文件数据block的位置
Blocks 块数
IO Blocks 块大小
Device 设备号码
可以用stat命令,查看某个文件的inode信息:

2 文件系统的简单操作

df查看文件系统整体磁盘使用量
du查看文件系统磁盘使用量
硬连接:同一个文件的两个入口,可以用来备份,删除时把包括自身的硬链接都删除了,即硬链接数为0,只针对没有进程访问的静态文件
软连接:类似于windows的快捷方式,可以作为对外开放的一个路径的接口,即更新前后使用相同的软链接名

3 磁盘分区

我们在之前分区时除了主分区以外还剩下了一部分空间,利用这部分空间先添加一个扩展分区,然后利用fdisk规划这个扩展分区为多个逻辑分区。
分区步骤
主要步骤:gdisk分区,mkfs格式化,mount挂载,设置自动挂载,修改权限
在这里插入图片描述
挂载
在这里插入图片描述
利用nano或者vim修改/etc/fstab,实现自动挂载

4 压缩和打包

gzip命令:解压gzip -d 、
bzip2参数和gzip一致
打包tar命令:-zcvf是压缩命名参数,然后是压缩后的名字,最后是需要压缩的文件
在这里插入图片描述
解压:-zxvf是解压参数,然后是需要解压文件名,-C后面接需要的目录
在这里插入图片描述
仅备份比某个时刻还新的文件 tar -jcv -f /root/etc.newer.then.file1 --newer-mtime=“2020/11/18” /etc/*

4 vim

一些常用的:
不退出vim的前提使用命令command:!command
撤销:u
删除vim的缓存文件:rm .filename.swp 以.开头表示隐藏文件
复制n行:nyy;p是粘贴
n1到n2行间替换: n1,n2s/word1(regexp)/word2(regexp)/gc
打开一个新的vim窗口sp filename
切换窗口:ctrl+w然后上下键
自动补全:ctrl+p查看可以选择的,ctrl+n选择哪一个

5 shell

之前的版本有sh,K shell,和我们linux现在用得最多的Bash
变量的赋值使用变量名=值的方式,特殊的一些情况

  • 在PATH后追加:PATH=$PATH:/home/tzq/bin
  • 对其他变量的引用:var2=$var1
  • 在复制语句中,双引号直接的$var是有效的,单引号是无效的在这里插入图片描述
    环境变量:
    利用env查看环境变量:
  • PATH:决定了shell将到哪些目录中寻找命令或程序
  • HOME:当前用户主目录
  • MAIL:是指当前用户的邮件存放目录。
  • SHELL:是指当前用户用的是哪种Shell。
  • HISTSIZE:是指保存历史命令记录的条数。
  • LOGNAME:是指当前用户的登录名。
  • HOSTNAME:是指主机名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来取得的。
  • LANG/LANGUGE:是和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。
  • PS1:是基本提示符,对于root用户是#,对于普通用户是$。PS2:是附属提示符,默认是“>”。
    set命令可以查看所有的变量
    expert命令将自定义变量转换成环境变量,注意,自定义变量只局限里当前这个shell(PID),这里自定义变量=局部变量,环境变量=全局变量
    declare命令可以声明变量类型,常用的如下:在这里插入图片描述

STDIN是标准输入,默认从键盘读取信息;

STDOUT是标准输出,默认将输出结果输出至终端;1>或者1>>file可以写到文件之中

STDERR是标准错误,默认将输出结果输出至终端。同理2>或者2>>file可以写到文件之中,写入同一个文件的话使用2>&1
& 表示任务在后台执行,如要在后台运行redis-server,则有 redis-server &

&& 表示前一条命令执行成功时,才执行后一条命令 ,如 echo '1‘ && echo ‘2’

| 表示管道,上一条命令的输出,作为下一条命令参数,如 echo ‘yes’ | wc -l,只能接受前一个命令的stdout

|| 表示上一条命令执行失败后,才执行下一条命令,如 cat nofile || echo “fail”

6 正则表达式

正则表达式字符合集

字符说明
\将下一个字符标记为特殊字符、文本、反问引用或八进制转义字符。如\n换行等。
^匹配输入字符串开始的位置。
$匹配输入字符串结尾的位置。
*零次或多次匹配前面的字符或子表达式,如zo*匹配"z“和”zoo“。
+一次或多次匹配前面的字符或子表达式,如zo+匹配"zo”和“zoo”,但“z”不匹配。
?零次或一次匹配前面的字符或子表达式,如do(es)?匹配“do”或“does”。
{n}n为非负整数,正好匹配n次。
{n,}至少匹配n次。
{n,m}匹配至少n次,至多m次。
?当?紧随其他限定符(*,+,?,{n},{n,},{n,m}后时,匹配是“非贪心的”,即匹配尽可能短。
.匹配除"\n"外的任何单个字符。
x|y匹配x或y。
[xyz]字符集,匹配xyz中的任一字符。
[^xyz]反向字符集,匹配未包含的任何字符。
[a-z]字符范围,匹配a到z字母。
[^a-z]反向范围字符,匹配非a到z的字母。

sed 主要分两种,n1,n2分别表示开始的行号,然后接操作类型[acdips] 接内容
例如

  • sed ‘n1,n2d’
  • sed ‘n1,n2awhat you want insert’
  • sed ‘n1,n2c what you want’
    或者是在替换中使用正则表达式sed ‘s/regular expression/what you want/g’

awk配合print,例如:
awk ‘print $1 “\t” $3’ 意思是输出第一列,水平tab,第三列
还可以配合单列进行逻辑运算:
awk ‘NR==1{ print “%10s %10s %10s %10s %10s\n” ,$1,$2,$3,$4,“total” }
NR>2 { total= $2+$3+$4 print “%10s %10d %10d %10d %10.2f” ,$1,$2,$3,$4,total}’
意思是在第一行输出1,2,3,4列,加上字符串“total”,在第二行以后,计算total=2+3+4,然后逐列输出,格式化即:
awk ‘condition1 {operation} condition2 {operation}’

7 shell脚本

变量 var = $(operation) 例如:sum=$((1+2))
测试命令 test -(参数) 对象,对象可以说文件名,是整数,是字符串,例如:test - e /filename,test -r /filename, test n1 -eq n2
判断符号[ ]组成一个条件,注意其中的空格:[ “HOME” == “$MALL” ]
shell默认参数,即输入时以空格为分界输入的参数,分别用 $1到 $n进行引用, $n表示个数
特殊字符

$0当前脚本的文件名
$n传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$#传递给脚本或函数的参数个数。
$*传递给脚本或函数的所有参数。
$@传递给脚本或函数的所有参数。
$?上个命令的退出状态,或函数的返回值。
$$当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。

条件判断:例如

if  [ a == b ] then  
echo ${a}  
elif [ b==c ] exit 0
else echo ${b} 
fi  

Case语句

case ${a} in 
  1)
  echo -n "1"
  ;;
  2)
  echo -n "2"
  ;;
  *)
  exit 0
  ;;
esac

程序段

function print(){
	echo -n "hello world"
}
print 

循环:

sum = 0
while [ i != 100]
do 
	sum = $((sum+i))
done 

until [ i == 100 ]
do 
	sum = $((a+b))
done 

for i in ${seq 1 100}
do
	sum = $((sum+i))
done

for((i=1;i<=100;i=i+1))
do 
	s = $((s+i))
done


常用命令:
指定输出年月日时分秒:date +%Y_%m_%d\%H:%M:%S
查看cpu信息:cat /proc/cpuinfo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值