linux 文件目录管理
常见目录
/dev 抽象硬件 例如u盘 硬盘
/lib 存放系统库文件 iso 文件
/bin 存放可执行二进制文件
/sbin 存放可执行二进制文件
/var 经常变化文件 例如 /var/log 日志文件
/home 普通用户目录
/root 特权用户目录
/etc 配置文件目录
/boot 内核启动文件
/usr 安装程序
/mnt 文件挂载目录 例如光驱、u盘
/opt 存放大型软件目录
常见重要配置文件
网卡配置文件:
/etc/sysconfig/network-scripts/ifcfg-ens33
域名解析:
/etc/resolv.conf
常用的域名解析服务
谷歌:8.8.8.8/4
阿里:223.5.5.5 223.6.6.6
腾讯:119.29.29.29
主机名文件:
/etc/hostname
域名ip解析配置文件
/etc/hosts
开机启动显示:
/etc/motd
查看版本系统信息
/etc/os-release 查看系统版本
/proc/version 查看linux内核
硬件信息:
/proc
日志信息:
/var/log
核心命令
1.ls命令
ls -a 查看所有文件,包括隐藏文件
ls -l 查看详细信息
ls -h 以人类可读形式展示
ls --full-time 以完整时间格式输出
ls -tl --full-time 根据最后修改时间排序
ls -d 显示文件夹本身信息,不显示内部信息
ls -r 逆序排列
ls -S 针对文件大小排序(默认从大到小)
ls -i 显示文件node信息
2.mkdir
创建多个文件夹 mkdir {aim,optp,lim}
创建递归文件夹 mkdir -p ./alex/chao/xchao/
创建100个文件夹 mkdir chaoge{1..100}
3.touch
创建普通文件 touch test.txt
创建多个普通文件 touch {1..10}.txt
更改文件修改时间 touch -t 10240606 备注10月24日6点零6分
4.cp
复制普通文件 cp a.txt b.txt
复制保留文件名 cp a.txt ./opt/
复制不保留文件名 cp a.txt ./opt/c.txt
复制文件夹以及内容 cp -r ./data ./mnb/
复制文件且不改变其属性(时间) cp -p
复制软链接 cp -d
覆盖前提示 cp -i
cp -a 递归复制文件即文件夹并保持原有属性
cp -p 复制不改变权限属性
5.cut
字符截取
cut -c 4 alex.txt 切割出这个文件每行的第四个字符
cut -c 4-7 alex.txt 切割出这个文件每行的第四到个字符
cut -c 4,7 alex.txt 切割出这个文件每行的第四和个字符
自定义分割:
冒号分隔的password 内容的第七列 cut -d ":" -f 7 password
6.sort
针对数字进行排序 sort -n test.txt 小-大
sort -nr test.txt 大-小
去重排序 sort -u text.txt
指定分割排序 sort -n -t "." -k 4 ip.txt 根据ip点分割的第四个段进行小-大排序
7.uniq
连续重复去重 uniq text.txt
结合sort 使用 sort -n text.txt | uniq
统计出现次数 sort -n text.txt | uniq -c
只显示出现一次的行 sort -n text.txt | uniq -u
只显示出现多次的行 sort -n text.txt | uniq -d
8.wc
统计文件行数 wc -l text.txt
统计单词数量 wc -w text.txt
统计字符数量 wc -m
输出最长行的字符数 wc -L text.txt
9.tr
替换标准输入大小写 echo "name" | tr "[a-z]" "[A-Z]"
删除字母a echo "my name is guo" | tr -d 'a'
文件当作标准输入进行替换 tr "a" "A" < text.txt
删除多个重复字符 echo "myyy nameee iss ggguo" | tr -s 'yesg'
10.find
根据名字全盘搜索 find / -name "*.txt"
find /opt -name "*.txt"
指定目录层级 find /opt -maxdepth 1 -name "*.txt"
指定文件类型 find /opt -type -d -name "*.txt" 找文件夹
find /opt -type -f -name "*.txt" 找文件
删除 find /opt -type -f -name "*.txt" -delete
两天以内被访问的时间 find ./ atime -2
两天前被访问的时间 find ./ atime 2
超过两天被访问的时间 find ./ atime +2
反向查找 find ./ maxdepth 1 ! -type d 找非文件夹文件
大小查找 find ./ -type f -size +200M 超过200M的文件
后续动作ok find ./ -type f -size +200M -ok rm {} \; 删除超过200M的文件
11.stat
访问时间 atime
修改时间 mtime
变化时间 ctime
12.xargs
多行变单行 xargs < text.txt
限制行数 xargs -n 2 < text.txt 每行两个数
指定分隔符号 echo "hello,ni,hao" | xargs -d "," 逗号分隔内容
echo "hello,ni,hao" | xargs -d "," -n 2 逗号分隔,每行两个元素
{}代替前面内容 find ./ -name "*.txt" | xargs -i mv {} /opt/
13.文件属性
ls -lh 查看
- 普通文本
d 文件夹
b 块设备文件
c 字符设备文件
l 软链接文件
file 查看
file text.txt
file opt
14.whereis
定位指令位置的二进制程序,源代码、man手册
whereis python
15.which
查找path环境变量的文件
which python
whereis更侧重于查找文件的所有可能位置,适用于需要全面了解文件分布情况的场景。
which主要用于确定可执行命令的位置,常用于脚本编写或检查命令是否可执行等情况
16.tar
压缩、解压
解压文件 tar -zxf 压缩包 解压位置
压缩文件 tar -zcf 压缩打包文件名 需要打包的文件
17.gzip
压缩文件 gzip ./*.txt
列出压缩文件内容 gzip -l text.txt.gz
gzip不能直接压缩文件夹,需要文件夹压缩成tar
解压gzip:
gzip -d 压缩包
18.zip
压缩文件:
zip all.zip ./*
解压缩:
uzip all.zip
19.rm
删除目录、文件
rm -r 递归删除目录文件
rm -rf 强制删除
rm -i 交互模式
\rm 取消别名,调用原始命令
20.mv
将文件目录移动到目标路径
mv 文件/目录 目标路径
21.head
head text.txt #默认查看前10行
head -n 文件名 #查看前n行
22.tail
tail text.txt #默认查看后10行
tail -n 文件名 #查看后n行
tail -f text.txt # 实时查看最后内容
linux权限
1.用户管理
root 用户 uid 0-999
普通用户 uid 1000以后
用户配置文件 /etc/passwd 用户加密密码 /etc/shadow
新用户需要的基础环境变量文件 /etc/skel
创建用户:
useradd 用户名 #创建普通用户,创建同名用户组
passwd 用户名 #修改用户密码
id 用户名 #用户信息查看
grep -w test /etc/group 查找test在组文件里
创建用户组:
groupadd 组名 #创建用户组
usermod/useradd -c 用户名 修改用户账号备注文字
-d 修改登陆目录
-e 修改账号有效期限
-g 修改所属群组
-G 修改所属附加群组
-l 修改用户账号名称
-L 锁定账号使密码无效
-U 接触账号锁定
-u 修改用户id
-s 登陆后使用的shell
删除用户:
userdel -rf 用户名
查看当前登录用户
whoami 查看当前登录用户
w 查看登录用户
who 查看登录用户
last 查看用户登录详细信息
lastlog 查看用户登录详细信息
2.用户切换
su - 用户 #普通用户切换
sudo 配置提权:
超级管理员 vi /etc/sudoers ,配置文件加入提权用户保存,切换到提权用户,执行sudo 命令即可
user1 all=(all) /bin/rm #user 1 可以在任何主机登录执行rm命令
sudo -l #查看自己的sudo权限
sudo rm -rf # 以允许的特权模式 执行删除
目前为止为避免配置复杂,一般采用命令别名的方式,对用户,命令进行分组
3.文件权限
r 可读 4
w 可写 2
x 可执行 1
u g o a 用户 用户组 其他 所有
赋权:
chmod u+x test.sh 当前用户添加可执行权限
chmod 750 test.sh 当前用户添加可执行权限
chmod 0 test.sh 当前用户取消所有权限
赋权用户/组:
chown 用户:用户组 文件/夹 #修改文件属组
chown -R 用户:用户组 文件/夹 #递归修改文件属组
umask文件掩码:
默认linux 创建文件权限最大 666 文件夹 777
实际:
root 创建文件 644 文件夹755
普通用户 创建文件 664 文件夹 775
默认配置文件:/etc/profile
root(022) 和普通用户(002)的掩码值不一致 ,
chattr 更改文件特殊属性:
+a:加特殊权限 chattr +a test.txt # 增加写入数据权限,只能写入,不能删除
-a 移除特殊权限 chattr -a test.txt #
+i 文件不可被修改,删除
-i
echo "hello" >> test.txt
查看特殊权限 lsattr test.txt
通配符
* 匹配0/多个任意字符
?匹配任意1个有且只有一个字符
[] 匹配括号中任意一个字符
[!] 不匹配括号中任意一个字符
[^] 不匹配括号中任意一个字符
[[:upper:]] 所有大写字母
[[:lower:]] 所有小写字母
find / -maxdepth 3 -type f -name "l*?[a-z]" #找出根目录深度3,且所有以l开头,且以小写字母结尾,中间出现任意一个字符的文本
特殊符号
单引号 '' 强引用 所见即所得
双引号 "" 弱引用 识别变量、转义字符
反引号 `` 引用命令结果 等同于 $()
touch `date + %T`.txt #创建时间命令txt文本
echo `date` 输出date命令结果
重定向符号
标准输入 stdin 0 配合< 或 <<
标准输出 stdout 1 配合> 或者>>
标准错误输出 stderr 2 配合> 或者>>
标准输入重定向 0< 或<
追加输入重定向 0<< 或<<
标准输出重定向 1> 或>
标准输出追加重定向 1>> 或>>
标准错误输出重定向 2 >
标准错书追加输出重定向 2 >>
ls /tmp > /dev/null 2>&1 #把命令正确或者错误的信息都输入黑洞文件
特殊符号
分号 ; 分割、注释
管道符 | 传递到下一个命令
$ 变量
\ 转义
{} 生成序列 、引用变量
逻辑符号
&& 前面成功执行后面的 ls /home && cd /home
|| 前面失败执行后面的 ls /ttt || cd /home
! 取反 ls [!a-z] 列出不包含a-z任意字符的文件
!! history 模式执行 上一次执行的命令
Linux三剑客
正则表达式
grep 文本匹配过滤
sed 文本编辑、替换、删除
awk 文本处理语言,输出、统计、判断
基本正则表达式
^ 开头
$ 结尾
^$ 空行
. 有且只有一个字符
\ 转义字符
* 匹配出现0次或者多次
.* 匹配所有内容 除了空行
^.* 任意多个字符开头
.*$ 任意多个字符结尾
[abc] 匹配任意内部一个字符
[^abc] 匹配除内部字符以外的,
扩展正则表达式
+ 匹配前一个字符一次或者多次
[:/]+ 匹配括号内的:或者\ 一次或者多次
?匹配前一个字符1次或0次
| 或者
()分组过滤
a{n,m} 匹配a最少n次,最多m 次
a{n,} 匹配a最少n次
a{n} 匹配a n次
a{,m} 匹配a最多m次
1.grep
匹配普通字符 grep "root" pwd.txt
-i 不区分大小写
-n 显示内容行号
-v 取反
-o 只显示匹配内容
grep "^$" pwd.txt -v 取出不含空行的数据
grep "^$\|^#" test_grep.txt -n -v 取出不含空行和#开头的行数据 # \| 转义
grep -i "^h" test_grep.txt 找出文件中h开头的行数据
grep "[a-z]" pwd.txt #匹配包含a-z的所有内容
grep "[^0-5]" pwd.txt 取出不包含0-5的文本内容
grep -E "l+" pwd.txt 取出包含1个l 或者多个l的内容
grep -E "g(oo|lo)d" pwd.txt 取出包含good 或者glod的内容
2.sed
选项参数:
-n 取消sed默认输出
-i 直接修改结果写入文件,否则更改内存数据
-e 多次编辑
-r 支持扩展正则
内置命令符:
a 指定行后对文本追加
d 删除匹配行
i 指定行前插入一行或多行文本
p 打印配置内容
s/正则/替换内容/g
匹配范围:
空地址 全文匹配
单地址 指定某一行
/pattern/ 被模式匹配到的每一行
范围之间 10,20 10到20行 10,+5 第十行向下五行
步长 1~2 即1 3 5 7 9 2~2 即2 4 6 8 10
sed "2,3p" pwd.txt -n 输出pwd文件第二行到第三行数据
sed "2,+3p" pwd.txt -n 输出pwd文件第二行向下三行数据
sed "/linux/p" pwd.txt -n 输出含有linux的内容
sed "/linux/d" pwd.txt 删除含有linux 内容的行(修改内存数据)
sed "/linux/d" pwd.txt -i 删除含有linux 内容的行(修改源文件)
sed "5,$d" pwd.txt 删除第五行到最后的数据
sed "s/My/I/g" pwd.txt 将全局文件My替换成I
sed "1s/My/I/" pwd.txt 将第一行 My替换成I
sed -e "s/my/i/g" -e "s/1785269/110/g" pwd.txt 多个条件替换
sed "2a my Linux is good." pwd.txt -i 第二行后添加内容 my linux is good
sed "2i my Linux is good." pwd.txt -i 第二行前添加内容 my linux is good
ip addr show ens33 | sed "3p" -n | sed "s/^.*inet//" | sed "s/\/24.*$//" #提取ip段
3.awk
适用于格式化数据,有编程语言特性,默认空格分隔符
awk option pattren {action} file
-F 指定分隔符(等同于 -v FS)
-v OFS 修改默认分隔符
RS 设置换行符 一般是回车
ORS 设置结尾值
NR 行数(处理单文件)
FNR 各个文件行数(处理多文件)
$0 完整输出
$1 第一列
NF 字段数
awk ‘{print $NF}’ tets.txt 打印最后一列
awk '{print $1,$3}' text.txt 打印第一列 第三列内容
awk 'NR==5 {print $0}' text.txt #打印出第五行的数据
awk 'NR==5,NR==6 {print $0}' text.txt #打印出第五到六行的数据
awk '{print $1,$(NF-1),$(NF-2)}' text.txt
ip addr show ens33 | awk 'NR==3{print $2}' #取出ip体验新版本
awk -F ':' '{print $1,$NF}' pwd.txt 输出pwd文件冒号分隔的第一列 最后一列数据
awk -v FS=':' '{print $1,$NF}' pwd.txt 输出pwd文件冒号分隔的第一列 最后一列数据
awk -F ':' -v OFS='***' '{print $1,$NF}' pwd.txt 输出pwd文件冒号分隔的第一列 最后一列数据,以***分割
awk -v RS=' ' '{print NR,$1}' pwd.txt 第一列出现空格即换行
awk -v RS=' ' '{print NR,$1}' test_grep.txt
1 hello
2
3 nihao
4 name
5 is
6 guojia
[root@bogon test]# cat test_grep.txt
hello nihao
you name is guojia
haha
#此处省略几万个字
byebye2
lalalla
woshibaihuadexiaohuajia
lala
fish
OFS用法:
[root@bogon test]# awk -F ':' -v OFS="***" '{print $1,$NF}' chaoge5.txt
root***/bin/bash
bin***/sbin/nologin
daemon***/sbin/nologin
adm***/sbin/nologin
lp***/sbin/nologin
FNR 用法:
[root@bogon test]# awk '{print FNR,$1}' chaoge5.txt test_grep.txt
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
1 hello
2 you
3
4
5 haha
awk 格式化打印:
print 打印换行
printf 不换行,需要指定格式
[root@bogon test]# awk '{printf "第一列:%s\t 第二列 %s\n",$1,$2}' test_awk.txt
第一列:hello 第二列 everyone
第一列:nice 第二列 to
第一列:i 第二列 am
第一列:what 第二列 is
第一列:no 第二列
第一列:jim 第二列 see
第一列:yes 第二列 give%s指代后面的参数 \t补全 \n换行
awk模式pattern:
BEGIN模式
END模式
awk 'BEGIN{print ”开始处理了“}{print $0}END{print "处理完毕了"}' pwd.txt
grep练习:
1.从/etc/passwd 找出root开头的行
grep "^root" /etc/passwd
2.从/etc/passwd 找出以root开头或者test开头的行
grep "^root\|^test\>" /etc/passwd 或者 grep -E "^(root|test)\>" /etc/passwd
注意”必须加定位锚点符号>。不然会匹配到test2 test3
3.过滤出bin开头的行,显示行号
grep -n "^bin" /etc/passwd
4.过滤掉bin开头的行,显示行号
grep -n -v "^bin" /etc/passwd
5.统计test出现次数
grep -c "test" /etc/passwd
6.匹配次数显示
grep -m 2 "test" /etc/passwd #只匹配连词test内容
7.列出包含匹配项的文件名--多文件时
grep -l "test" /etc/passwd /room/test/chaoge5.txt
8.找出/etc/passwd文件中的两位数或三位数
grep -E "\<[0-9]{2,3}\>" /etc/passwd
< > 精准匹配两位 三位数 不然会模糊匹配
9.找到文件中至少 个空白字符开头,后面是非空字符的行
grep "^[[:space:]].*" text.txt 或者 grep -E "^[[:space:]]+[^[:space:]]" text.txt
10.找出以i开头的行,不区分大小写
grep -i "^i" text.txt 或者grep -E "^(i|I)" text.txt 或者 grep "^{iI}" text.txt
11.找出shell结尾和用户名相同的行
grep -E "^([^:]+\>).*\1" /etc/passwd
sed练习
1.将首次出现的root 替换为test
sed '0,/root/s//test/p' chaoge5.txt -n #全文替换
sed 's/root/test/p' chaoge5.txt -n #每行第一个root替换成test
2.替换前10行bin开头改为c
sed -n '1,10s/^bin/c/p' text.txt
3.替换前10行bin开头改为c 且m开头替换M
sed -n -e '1,10s/^bin/c/p' -e 's/m/M/pg' text.txt
4.删除第四行后的数据
sed '4,$d' pwd.txt
5.删除root 开头的行 到ftp开头的行
sed '/^root/,/^ftp/d' text.txt
6.文件空格开头的行添加注释符
sed -e 's/^[[:space:]]/#/g' -e 's/^$/#/g' text.txt
awk练习
1.打印出档期那系统所有普通用户的的用户和家目录
awk -F ":" "$3>1000{print $1 $(NF-1)}" /ETC/PASSWD
2.文件前五行添加#
awk "NR<6{print "#" $0}" text.txt
3.取出某个特定列
awk -F "[ :]" "{print $1,$2}" text.txt #取出以空格或冒号分割的第二列 第三列
Linux 定时任务
检查cron服务软件包 rpm -qa |grep cron
检查cron服务状态 service cron status
邮件端口 25 定时任务出发或发送邮件
mailx 服务
mailx -s "主题" 收件人 #发送邮件
mailx -s "主题" 收件人 < text.txt # 标准输入发送邮件
cron 服务
配置文件 /etc/crontab
crontab -l 查看定时任务
crontab -e 编辑定时任务
crontab -i 交互式删除定时任务
crontab -r 删除定时任务,移除/var/spool/cron/username 文件
有的电脑没有mail 服务,当初最小化安装,需要自己下载 yum install mailx
* * * * *
分 时 日 月 周
3 10 * * * 每天的10点3分
0-10 10 * * * 每天的10点到10点10分 每分钟执行 0-10即0,1,2,3,4,5,6,7,8,9,10
3 4,5,6 * * * 每天4点3分 五点3分 6点3分 执行
*/5 * * * * 每五分钟执行
程序包管理
源代码格式 tar.gz
rpm格式 .rpm
rpm命令
rpm -ivh 安装软件的命令格式
rpm -Uvh 升级软件格式
rpm -e 卸载软件命令格式
rpm -qa 查询安装的软件
rpm -ql 查询软件信息
解决依赖问题
yum 红帽系列
apt-get deb 包管理
zypper suse的rpm包管理
yum list 显示yum可下载安装的软件列表
yum repolist 显示yum仓库
源代码编译安装
* 可以自定义安装路径
* 可以控制版本
开发工具: gcc make等
开发组件: yum groupinstall "Development Tools"
yum groupinstall "Server Platform Development"
编译安装步骤:
1.执行configure文件
./configure --prefix=/data/nginx/
2.执行make命令
make
3.执行make install
make install
磁盘管理
硬盘最小单位-扇区 512byte = 0.5kB
linux系统最小单位block-8个相邻扇区组成 = 8*0.5kb=4kb
windows 分区
电脑自带的分区工具-属性-管理-磁盘管理
linux 分区
通过fdisk分区(小于2T)
通过 parted 分区(大于2T 且磁盘为GPT格式)
sd[a-p] 代表硬盘(scsi/sata)
/dev/sda 第一块硬盘
sda1
/dev/sdb 第二块硬盘
fdisk分区步骤:
1.fdisk /dev/sdb
2. 输入n 新建分区
选择p :新建主分区
选择e :扩展分区
根据提示操作即可(上面的截图)
最后需要w 写入(上面的截图)
3.查看分区情况
fdisk -l
centos5或者之前,删除文件后仍占据磁盘空间,磁盘表没更新,需要重启分区表,避免重启电脑:partprobe /dev/sda
信息盘分区后可以执行partx命令,改制linux内核,新磁盘分区情况:partx -a /dev/sdb
parted分区步骤
1.更改磁盘类型GPT
进入编辑 parted /dev/sdb
根据提示,执行 mklabel gpt
注意:GPT分区没有扩展分区,只有主分区 逻辑分区
2.创建主分区
mkpart primary 0 500
3.创建逻辑分区
mkpart logical 501 10000
格式化文件系统
mkfs 针对磁盘区分进行格式化文件系统
fsck命令,修复文件系统命令,默认读取/etc/fstab开机挂在文件
查看文件系统属性: centos7以前-dump2fs命令,打印文件系统信息,适用于ext2,ext3,ext4
centos7以后-默认使用xfs文件系统,xfs_info打印文件系统信息
自动检查文件系统正常与否: tune2fs命令
列出所有设备及文件系统信息:lsblk命令 lsblk -f (列出分区格式化文件系统)
1.给分区进行格式化
mkfs.ext4 /dev/sdb1 #将sdb1 分区格式为ext4 文件系统
mkfs.xfs /dev/sdb1 #将sdb1 分区格式为xfs文件系统
2.关闭文件系统自检
tune2fs -c -1 /dev/sdb1
文件系统挂载
mount 命令能将指定的文件系统挂载到指定的目录上,挂载点为linux系统的一个已存在文件夹
mount -l 显示系统所有挂在的设备信息
-t 指定设备的文件系统,若不指定,自动选择挂载的文件系统类型
-o 添加挂载的功能选项 (async异步读写 sync 同步 atime noatime)
-r read 挂载后的设备只读
-w 读写参数 -o rw权限,允许挂载后读写操作
mount 挂载设备 挂载点
mount /dev/sdb1 /mnt #将sdb1 挂载到mnt文件夹
mount -o ro /dev/sdb1 /mnt #将sdb1 以只读形式 挂载到mnt文件夹
mount -o noexec /dev/sdb1 /mnt #将sdb1 挂载到mnt文件夹,不执行可执行文件
df -hT 查看磁盘使用情况
umount /mnt #取消挂载
开机自动挂载:
/etc/fstab 存放静态文件,系统开机启动时读取
/dev/sdb5 /mnt xfs defaults 0 0
swap交换分区创建
实际物理内存不足,会从内存中取出未使用的部分,放入交换分区,提供给程序使用
centos7: 内存小于2G 分配和内存大小的swap分区
内存大于2G 分配2G swap分区
1.设置分区
fdisk /dev/sdc #进入分区设置
输入n(新建分区) 输入p(新建主分区)输入起始扇区,容量大小 输入t (更改分区) 选择分区1 输入82(更改为swap 分区) 输入p (打印) 输入w (写入磁盘)
2.针对磁盘分区格式化
mkswap /dev/sdc1
3.开启对应的交换空间
swapon /dev/sdc1 #开启swap
swapoff /dev/sdc1 #开启swap
free -m #查看交换空间
临时释放缓存:
释放catch命令:echo 1 > /proc/sys/vm/drop_caches = sysctl -w vm.drop_catch=1
清除目录缓存和inodes: echo 2> /proc/sys/vm/drop_catch = sysctl -w vm.drop_catch=2
清除内存页的缓存:echo 3 > /proc/sys/vm/drop_catch = sysctl -w vm.drop_catch=3
清除文件系统缓存:
sync 命令,清空僵尸进程,将内存缓存区数据写入磁盘
移动硬盘常见文件系统
fat 16 fat32 单个文件不能超过2G
NTFS 文件系统,支持文件加密,采用日志加密,详细加载读写操作,支持数据恢复,突破磁盘大小限制
EXFAT 文件系统 单个文件超过16G 能在win、linux、mac中同时识别
Linux 文件系统
ext2
ext3 centos5
ext4 centos6
xfs centos 7
网络共享文件系统
nfs 网络文件系统
smb 服务消息块
集群文件系统
gfs 存储海量数据准备
ocfs 数据库研发平台定制
分布式文件系统
ceph 存储的可靠性和扩展性
交换文件系统
swap
常见命令:
1.df命令(文件系统)
df -h 显示kb mb大小
df -i 显示inode数量
2.du命令(磁盘)
du -a 显示所有文件的大小
du -h 显示出所有目录的磁盘使用量
du -h * 显示出个文件与子目录的信息
RAID技术
raid 即磁盘冗余阵列,将多块独立磁盘组成磁盘组,容量更大,安全性更高,将数据切割多个区段存储在不同的物理硬盘上,分散读写提高整体性能,数据同步在不同磁盘,做到冗余备份。
raid技术特性
1.保障数据安全性,提升硬盘读写效率,增加磁盘成本
raid技术分类
raid0: 数据依次写入物理硬盘,写入速度翻倍,数据分开存储
适用于追求性能,安全要求不高
raid1: 将两块以上硬盘绑定,数据同时写入多块硬盘,个别硬盘损坏也没事
降低了磁盘利用率
raid3: 3块以上硬盘组成,遵循磁盘异或运算,
存储异或磁盘不能损坏
磁盘异或运算:
磁盘1 0101
磁盘2 1011
异或运算 1110 # 对比相同为0 不同为1
raid 5 :校验码均匀返给每块磁盘,能够反推
不能损坏2块即以上
raid 10: raid 0 + raid 1 组合
通过raid 0 实现读写速度,raid 1 实现了数据备份
数据冗余性能: raid1 raid 10 raid 5 raid 0 #好-坏
数据读写性能 : raid 0 raid 10 raid 5 raid 1
成本:raid 0 raid 10 raid 1 raid 5
软硬raid实现
硬raid :直接通过购买raid卡,按照说明配置
软raid :软件命令,有cpu 控制硬盘驱动器,进行数据转换,计算
硬raid兼容性、稳定性都优于软raid
搭建raid 10
1.虚拟机新建四块硬盘
2.检查磁盘信息
cat /dev/sd* 或 fdisk -l
3.mdadm 命令 创建raid 10
mdadm -Cv /dev/md0 -a yes -n 4 -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sde
-C 表示创建
-v 表示显示创建过程
/dev.md0 表示raid阵列名字
-a yes 自动创建阵列设备文件
-n 4 表示使用四块硬盘创建阵列
-l 10 表示raid级别
最后是4块硬盘名字
4.针对磁盘阵列进行格式化
mkfs.xfs /dev/md0
5.针对分区进行文件夹挂载
mount /dev/md0 /newPro
6.检查挂在情况
mount -l
7.还可以使用df 命令插卡挂载
df -hT
8.检查磁盘阵列情况
mdadm -D /dev/md0
9.写入数据,检查
10.磁盘阵列分区加入开机自启
/etc/fstab加入:
/dev/md0 /mnt xfs defaults 0 0
raid 10 故障修复
raid 10 某块发生故障
1.检查磁盘
fdisk -l
2.模拟挂掉一块硬盘
mdadm /dev/md0 -f /dev/sdd
3.检查raid 10状态
mdadm -D
4.复制,修改文件,检查文件状态
df -h 是否有正常累加
挨个检查,看那块磁盘损坏
5.购买新的磁盘,重新加入阵列
* 取消挂载(注意开启自启挂载)
* 重新添加新的硬盘加入 mdadm /dev/md0 -a /dev/sdd
6.检查磁盘阵列组信息
7.等待修复完毕
raid 10 重启
1.生成raid 配置文件
echo DEVICE /dev/sd[b-e] > /etc/mdadm.conf
2.扫描磁盘磁盘阵列信息到配置文件
mdadm -Ds >> /etc/mdadm.conf
3.取消raid 10 挂载
umount /mnt
4.停止磁盘阵列
mdadm -S /dev/md0
5.检查阵列信息
应该看不到阵列信息
6.启动阵列
mdadm -A /dev/md0
raid 10 卸载
1. 卸载挂在中设备
umount /mnt
2.停止raid服务
mdadm -S /dev/md0
3.卸载raid10所有磁盘信息
mdadm --misc --zero-superblock /dev/sdb
mdadm --misc --zero-superblock /dev/sdc
mdadm --misc --zero-superblock /dev/sdd
mdadm --misc --zero-superblock /dev/sde
4.删除raid 配置文件
rm /etc/mdadm.conf
5.清除开机自动挂载文件
raid 备份盘
1.创建一个raid 5
mdadm -Cv/dev/md0 -n3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde
-x 1 指定一个备份盘
2.检查raid阵列组信息
mdadm -D /dev/md0
3.针对阵列组进行格式化文件系统
mkfs.xfs -f /dev/md0
4.挂载raid
mount /dev/md0 /mnt
5.检查挂载情况以及数据写入
mount -l
df -hT
6.写入数据检查raid
7.见证备份磁盘工作,删掉一块硬盘,检查
mdadm /dev/md0 -f /dev/sdb
mdadm -D /dev/md0
8.检查备份磁盘加入阵列组
raid扩容
局限: raid 配置磁盘阵列,容量限定,后期扩容麻烦
不同磁盘分区独立,没有联系
合并分区需要重新格式化磁盘分区,备份数据
LVM 逻辑卷管理:动态管理磁盘分区扩容
LVM 实际案例:
挑选 /dev/sdb /dev/sdc 两块硬盘,添加至卷组
1.创建pv
pvcreate /dev/sdb /dev/sdc
2.创建卷组
vgcreate chaogevg1 /dev/sdb /dev/sdc
3.分别查看pv vg
pvs pvscan
vgs vgscan
4.尝试扩容,缩小vg卷组
pvcreate /dev/sde #创建物理卷
vgextend chaogevg1 /dev/sde #新物理元加入vg 卷组
5.显示卷组信息
vgdisplay
6.缩小卷组大小,提出sde
vgreduce chaogevg1 /dev/sde
7.删除sde物理卷
pvremove /dev/sde
8.使用此时的卷组创建逻辑卷
lvcreate -n lv1 -l +500M chaogevg1
9.检查lv 信息
lvdisplay
10.格式化逻辑卷文件系统
mkfs.xfs /dev/chaogevg1/lv1
11.向lv1逻辑卷中,进行挂载以及数据写入
mount /dev/chaogevg1/lv1 /chaoge
挂载信息写入文件/etc/fstab
mount -a 读取挂载文件信息
12.向磁盘写入数据
13.针对lv逻辑卷扩容,只要卷组中容量足够,就可以对lv逻辑卷扩容
* umount /chaoge/
* lvextent -L +10G /dev/chaogevg1/lv1
* 挂载 mount /dev/chaogevg1/lv1 /chaoge
14.调整xfs文件系统大小
xfs_grows /dev/chaogevg1/lv1
df -hT
15.不想用lvm,删除逻辑卷
* 卸载lv umount /chaoge/
* lvremove /dev/chaogevg1/lv1
* 删除卷组 vgremove chaogevg1
* 删除pv pvremove /dev/sdb /dev/sdc
* 检查所有lv 信息 pvs lvs vgs
进程管理
进程:linux系统的一个任务资源单位
线程:进程中的一个执行单元,是 CPU 调度和分派的基本单位
基本命令
1.ps
查询进程信息,和kill 搭配使用
ps -ef #列出linux所有详细的进程信息
ps -ef |grep vim #列出linux 关于vim的进程信息
ps aux # a 显示当前终端所有进程 u 以用户为主显示 x 显示所有进程
ps -u #指定查看某个用户进程
ps -eH #显示父进程,子进程目录结构信息
pgrep nginx #查询nginx 进程是否存在
2.kill
kill -l 列出所有的中止信息
l 的参数: 1 SIGHUP 挂起进程 终端掉线,用户突然推出
2 SIGINT 中断信号,一般常用ctrl + c 发送
3 SIGQUIT 退出信号 一般用ctrl +\ 发出
9 SIGKILL 强制中断信号
15 SIGTERM kill默认使用
20 SIGTSTP 暂停进程 常用ctrl +z 发出
kill pid
kill -9 pid
kill -0 pid # 判断pid是否存在,通过$? 取值
killall vim # 杀死所有vim进程
pkill vim #通过进程名杀死多个进程,直接杀死父进程 子进程
3.top
实时监控系统的处理器状态
输入z 切换颜色
输入M cpu 使用排序
输入1 linux 逻辑cpu个数
top -c 显示进程命令的绝对路径
top -d 2 设置top刷新时间
top -n 3 设置top刷新次数
top -p pid 查看指定进程 动态信息
4.nohup
将程序以忽略挂起的形式在后台运行,输出结果不打印在终端,输出结果将输出在nohup.out文件中
nohup 执行命令 #即使关闭终端,后台同样执行
nohup ping www.baidu.com
nohup 执行命令 & 后台执行不输出,不影响后面执行命令
5.linux 系统运行级别
0 关机
1 单用户
2 多用户模式 无网络模式
3 完全多用户 有网络
4 用户自定义级别
5 图形化界面
6 重启机器
init 命令
init 6 #重启机器
6.glances
1.安装基本工具
yum install glances -y
yum install python python-pip python-devel gcc -y
2.安装模块
pip install bottle
3.使用glances运行一个web网站,加盟空数据网站
glances -w
Linux网络
ISO七层模型
1.物理层
2.数据链路层 物理链路层 以二进制数据在物理媒介传播 ISO@2100
3.网络层 网络 为数据包选择路由 IP ICMP BGP OSPF
4.传输层 传输 提供端对端接口 tcp udp
5.会话层
6.表示层
7应用层 接近用户的应用层 提供文件传输、邮件、数据加密 HTTP SNMP FTP
NFS DNS
基础命令
1.ifconfig
配置网卡信息 查看显示网络接口 临时性配置ip地址 网络 子网掩码
安装 yum install net-tools
配置文件 /etc/sysconfig/network-scripts/ifconfig-ens33
查看网络地址信息 ifconfig 、 ifconfig ens33
开启/关闭网卡 ifconfig 设备名 up/down
修改设置ip : ifconfig ens33:0 192.168.1.109 netmask 255.255.255.0 up
修改mac地址:ifconfig ens33 hw ether 新mac地址
永久修改ip : /etc/sysconfig/network-scripts/ifconfig-ens33
2.route
添加网关信息 route add default gw 192.168.1.2
删除路由信息 route del default
查看路由信息 route -n
3.ip
查看显示网络设备信息 ip addr show
指定网络设备显示信息 ip link show dev ens33
开启/关闭网络设备 ip link set ens33 up/down
修改mac地址 ip link set ens33 address 新mac
ip添加 ip address add 新ip dev ens33
ip删除 ip address del 新ip dev ens33
查看路由信息 ip route
查看arp 缓存 ip neighbour
4.netstat
显示网络连接情况 路由表信息 端口状态
netstat -an #-a 显示所有套接字信息 -n 显示数字地址信息
netstat -tnulp # -t tcp -u udp -n 不进行dns解析 -l 只显示监听中的 -p 显示所属的进程名信息
netstat -tnulp |grep 80
netstat -rn 查看路由信息
netstat -i 显示所有网络接口的列表情况
netstat -tunlp |grep 3306 监听数据库是否运行
127.0.0.1 回环地址 本机硬件访问
0.0.0.0 绑定机器所有网卡信息(多ip情况)
注意:
centos 7 之后有一个ss工具,类似netstat
ss -an 显示所有套接字连接
ss -tunlp
5.ping
检测主机网络状态 ping ip/域名
6.telnet
用于监测远程主机是否打开某端口: telnet 主机ip 22
7.ssh
ssh 用户名@ip地址
ssh 用户名@ip地址 -p 端口 #端口远程连接
ssh 用户名@ip地址 命令 远程执行命令
8.wget
下载指定资源文件
wget 资源地址 #下载一个资源
wget -O /tmp/new.jpg 资源地址 #下载资源并且改名
wget --limit-rate=1k 资源地址 #限制文件下载资源
wget -c 资源地址 #支持断点续传资源下载
wget -b 资源地址 #后台运行下载资源
wget --user-agent="" 资源地址 #伪装请求客户端下载
wget -q -T 3 -t 1 --spider www.pythonav.cn #检测网站存活,利用$?