• 观看《老男孩Linux课程day005》
  • 观看《老男孩Linux课程day006》
  • 观看《老男孩Linux课程day007》
  • 观看《老男孩Linux课程day008》

day005 vim和一些查看类的命令

  开始之前来一段开胃菜。

# 以树形结构显示目录所有内容
tree 目录
# ls只显示一层

vim的模式转换

  vim一共有4中模式:

    1、命令模式:进入vim默认的模式,可以按i进入编辑模式,或者输入其他命令;

    2、编辑模式:用于编辑、修改文件内容;

    3、底行模式:保存退出,搜索使用,一般输入:进入底行模式;

    4、可视化模块:用于批量编辑。

339dd533d18766ecfb68c467882e25a

vim快捷键

  首先我们创建测试文件,把etc的service文件和网卡的配置文件合并到一起。

cat /etc/services /etc/sysconfig/network-scripts/ifcfg-eth0 >>/tmp/vim.log
cd tmp
vim vim.log

  快捷键-快速移动光标类。

    移动到最后一行:G

    移动到第一行:gg;你

    移动到第100行:100gg

    光标移动到行首:^(shift+6);

    光标移动到行尾:$(shift+4);

  快捷键-复制粘贴类。

    复制当前行:yy

    剪切当前行:dd

    粘贴到当前行后:p

    重复粘贴100次:100p

  快捷键-其他功能类。

    撤销:u

    显示行号::set number;(另外一个在文件阶段的显示行号是cat -n

    取消显示行号::set nonu

    搜索:/要搜的内容

    继续向下搜索:n

    继续向上搜索:N

  快捷键-批量操作类。

    批量删除注释:先ctrl+v进入批量操作模式,然后选择要删除的区域,按d删除。

    批量增加注释:先ctrl+v进入批量模式,然后选择要增加的行,选完后按shift+i(注意是I)进入编辑模式,然后写入#,最后按esc等待。

服务器初步了解

  服务器分类:

服务器分类 特点
物理服务器 自己购买实体然后部署
公有云(俗称云服务器) 按需分配,按照要求选择配置,不需要自己物理部署
私有云(虚拟服务器) 自己准备物理设备,让云服务公司部署运维

深入了解Linux下的目录

/etc/下

/etc/文件 说明 应用
/etc/hostname 主机名配置文件 每个Linux的主机名配置都有讲究,特别在未来集群的时候
/etc/hosts 网络名和ip的对应关系 在网站中做访问使用
/etc/sysconfig/network-scripts/ifcfg-eth0 网卡配置文件 物理机要改,云服务器可以自动
/etc/rc.local 开机自启动的文件 把需要开机自启动的命令和服务放在这里
/etc/fstab 开机自动挂载的配置文件 配置磁盘挂载使用
/etc/motd 此文件中的内容会在用户登录之后显示出来 就是一个温馨提示
/etc/issue /etc/issue.net 这两个文件中的内容会在用户登录之前显示出来 只在本地登录的时候会显示,远程链接不会,并且出于安全考虑,最好不显示内容(清空用>即可:>/etc/issue
修改主机名

  以后主机名命名的要求:看到主机名就能知晓这个节点的作用

  一个系统主机记录表应包含:ip地址-内网、ip地址-公网、主机名、cpu、内存、硬盘、系统、服务等主要内容。

# 修改主机名
hostnamectl set-hostname 新的名字
# 改完之后重新登陆一下远程连接
# 查看主机名
hostname
网卡配置文件

  /etc/sysconfig    系统配置文件

  /etc/sysconfig/network-scripts/    网络配置文件

  /etc/sysconfig/network-scripts/ifcfg-eth0    网卡配置文件

  vim修改网卡配置文件:vim /etc/sysconfig/network-scripts/ifcfg-eth0

    -修改完成后要重启网络服务systemctl restart network

  图形化修改网卡配置文件nmtui

开机自启动

  在/etc/rc.local下是开机自动运行的命令,写好了之后要修改权限chmod 777 /etc/rc.local

/var/下

  variable经常变化的内容,比如日志,Linux经常异常的时候,我们要查看对应的日志。

  Linux有系统日志和服务日志两种。

/var/中经常变化的内容 说明 应用建议
/var/log/ 系统及服务的各种日志目录
/var/log/secure 用户登录情况日志 分析是否有恶意破解、登录
/var/log/messages 各种服务的日志 分析服务、异常

/proc/目录

  存放系统进程信息、Linux内核配置、系统信息等。

  这个是虚拟目录,放在内存中,不占用磁盘空间。

/proc/ 系统、进程信息、内核 说明 应用建议
/proc/cpuinfo cpu信息 监控cpu使用
/proc/meminfo 内存信息 监控内存使用
/proc/loadavg 系统负载信息,衡量系统繁忙程度
/proc/mounts 系统挂载信息

  查看cpu信息:cat /proc/cpuinfo或者lscpu,lscpu更好。

day006 Linux目录结构进阶和命令

日志查询4剑客

  查看日志不要使用cat或者vim!!!

  日志文件一般都很大,甚至可达几十G,用cat或者vim容易卡死。

  应该使用不会占用太多资源的查看命令,比如head/tailless/more

# 查看前5行
head -5 /etc/passwd
# 查看后5行
tail -5 /etc/passwd
# 查看某个文件末尾的实时更新(follow)
tail -f /etc/passwd

  一页一页地显示文件内容,并且可以搜索,用less

# 一页一页显示内容
less 文件名
# 显示行号
less -N 文件名
# 下一页(f或者空格)
f
# 上一页
b
# 最后一行
G
# 第一行
g
# 到第99行
99g
# 搜索(向下搜索是n,向上是N)
/
# 退出
q

  more也是一页一页显示,但是没有less那么多功能,而且more显示到最后一行就退出,more用的不多。

wc 统计

  word count/calcuate 统计文件中单词和行数。

wc 文件名
# 返回【行数】【单词数】【文件大小】【文件名】
wc -l 文件名
# 只返回行数

  结合使用命令,在日志中统计出现了多少次Failed password

  先用grep '目标字段' 文件名过滤,再用|(管道)传递给wc -l统计。

grep 'Failed password' /var/log/secure | wc -l

查询命令位置

  whichwhereis都能找到命令存储的位置,但是whereis显示的内容比较全面,一般使用which就可以了。

  主要用来查看命令存不存在,最多做一些修改配置。

# 查询命令的位置
whereis less
which less

文件比较命令

  未来在服务的配置中,我们需要对比新旧文件查看修改了哪些内容,此时用diff(轻量显示)、vimdiff(vim显示)来实现。

# 比较两个文件的不同
diff 文件1 文件2

  输出会显示第几行发生了改变,---上下分别是文件1和文件2这一行的内容。

# 比较两个文件的不同,并以vim的形式显示
vimdiff 文件1 文件2

  此时输出如下图所示:

524198c0cfb00b619f4b36acb18613c

排序去重组合

  未来工作中统计日志、分析日志和系统信息的必备命令:sort(排序)、unit(去重)。

sort

  sort的默认用法是按照位数进行排序,比如会认为2比111大。

# sort默认排序
sort 文件名

  如果想按照大小(默认升序),要加-n

# sort按照大小排序(默认升序,从小到大)
sort -n 文件名
# sort按照逆序排序
sort -r 文件名

  有些命令会显示多列,比如ll,此时想按照某一列排序,要加-k

# 按照第2列的大小对文件进行升序排序
sort -n -k2 文件名
# 按照第3列的大小对文件进行逆序排序
sort -nrk3 文件名
# 按照大小把某个目录中的文件升逆序排序(ll的输出中文件大小在第5列)
ll 目录 | sort -nrk5
# 按照大小查看某个目录中最大的10个文件
ll 目录 | sort -nrk5 | head

  但是有些时候每一列之间并不是按照空格区分的,有可能是,这时使用sort -t'' 指定分隔符。

# 以:为分隔符,对第3列进行排序
sort -t':' -nk3 文件名

  通过sort对多列排序。

# 先按照第2列排序,如果相同就按照第4列排序
sort -rn -k2 -k4 文件名
# 以.为分割符,仅对第三和第四列进行排序(限定第三列和第四列的范围为最小)(指定分隔符容易乱,推荐都这样排序)
sort -t'.' -rn -k3,3 -k4,4 文件名

uniq

  unique独一无二,可以去掉重复项。

# 去重并显示字段的重复次数
uniq -c 文件名

  但是uniq只是把相邻行的相同项合并了,如果跨行,则会显示两个!!!

  所以一般先sort一下,把相同的内容放在一起,在uniq统计。

# 去重并显示字段的重复次数
sort 文件名 | uniq -c
# 去重并显示字段的重复次数,再根据重复的次数逆序排序
sort 文件名 | uniq -c | sort -rn
# 去重并显示字段的重复次数,再根据重复的次数逆序排序,显示最多的5项
sort 文件名 | unic -c | sort -rn | head -5

日期组合

  在Linux中我们需要日常查看系统的时间,保证整个网站所有服务器的系统时间都一致。

  或者有时书写脚本也需要时间,比如给个时间戳,或者备份使用。

date

# 显示当前日期和时间
date
# 2024-10-06
date +%F
date +%Y-%m-%d
# 2024
date +%Y
# 202410
date +%Y%m
# 20241006
date +%Y%m%d
# 13:50:35
date +%T
date +%H:%M:%S
# 今天周几?
data +%w
# 1天之后
date -d '1day'
# 1天之前
date -d '-1day' +%F

ntpdate

  自动同步时间命令,要先yum一下。

# 自动同步时间
yum install -y ntpdate
ntpdate ntp1.aliyun.com

利用反引号创建带时间的文件名

  反引号可以让内部的命令先执行。

  反引号相当于$()。

# 创建一个带时间的日志文件
touch backup-`date +%F`.log

day007 Linux文件属性及打包压缩三剑客

Linux文件属性

  首先我们以一行命令开始。

ls -lhi

  返回结果如下所示:

013098b682c5ad209297fdcfb50a5ef

  1、134319022:index node索引节点,是Linux中文件的唯一id;

  2、-文件类型,-表示文件,d表示目录;

  3、rw-r--r--:文件权限;

  4、.:SELinux相关;

  5、1:硬链接数量;

  6、root root:所有者+所属用户组;

  7、10K:文件大小;

  8、Mar 28 10:28:文件最近修改时间;

  9、grep.txt:文件名。

inode与block

  inode:文件索引节点,根据inode可以找到文件。

  inode是一个数据结构,是一块小空间,存放文件的各种属性,包括大小、修改时间、权限和所有者等。

  inode还存放block的位置(指向文件位置的指针)。

  但是inode不存放文件名!!!也不存放文件数据。

  block是一个大空间,存放数据。

  每创建一个文件就至少占用一个inode。

  一个block是4k,如果文件大小为0,则不占用block;如果文件小于4k,这一个block无法共享;如果文件大于4k,则占用多个block。

# 查看block(文件大小)
df
# 查看inode
df -i
# 以k字节为单位显示
df -k
# 以human易读的方式显示文件大小
df -h
6bf1a3edc87c9c61bd1018a74ffb462

  用户访问文件的一般流程:

    1、访问oldboy.txt时,系统会根据inode号码找到他对应的inode空间;

    2、访问到inode空间时,确认用户然后确认权限;

    3、权限确认没问题就准许通过,然后根据指针访问block中的数据内容。

26a93d0b0b69e6432e7ee1b1cdd55bb

文件类型

Linux和Windows文件的拓展名

  Linux和Windows文件类型的区别:Windows下通过拓展名区分不同文件类型,如果拓展名修改则无法使用;Linux下拓展名仅仅用于展示,可以随意修改。

Linux常见拓展名 说明
.sh,.bash shell脚本
.conf,.cfg,.xml,.yaml,.yml 配置文件
.py python脚本
Linux文件类型
Linux常见文件类型 含义
文件 file
目录 dir
软连接(类似Window快捷方式)
字符设备 char
块设备 block
套接字 socket文件

  当ls -l看到一个文件类型为-(file)时,还可以细分为普通文件(text)、数据文件(data)和二进制文件三种。

file的分类 说明
text 普通文件、文本文件,可以直接查看、编辑、修改的文件,比如自己写的脚本
data 数据文件,需要用专用的命令查看,比如压缩包
二进制文件 大部分都是命令

  用file命令来查看-具体是哪一种。

# 查看-文件具体的类型
file 文件名

  三种返回如下所示:

51d4111a491b9a771a05469170e830b

软硬链接

  软链接:类似Windows快捷方式,本质是一个小数据结构,存放源文件的位置。

  硬链接:在同一分区里 不同的文件inode相同,则互为硬链接。

# 创建软连接
ln -s 源文件 软链接文件

  软链接也可以编辑,和硬链接效果一样,两者在使用上类似。

  如果源文件被删除、改名或者移走,软链接会红色闪烁。

   软链接用在升级服务上很好用,把要升级的服务用软链接先引导,下载好新服务后,只用把软连接删掉重建即可,可以避免了各种配置的麻烦。

  软连接可以方便我们访问,硬链接可以防止数据误删除。

# 创建硬链接
ln 源文件 硬链接文件

  tips:硬链接只能给文件创建,不能给目录创建,且不能跨分区。

文件和目录大小

# 查看文件大小
ll -h 文件名
# 查看目录大小
du -sh 文件名

  其中,du -s是不用选择所有子目录,只显示汇总;du -h是以人类可读的方式显示。

文件时间

Linux文件时间 说明
mtime modify 修改时间
atime access 访问时间
ctime change 文件属性变化时间
# 查看文件各种属性和时间
stat 文件名
281d6e8a8b45f66227d3d47f256409f

打包压缩

  压缩就是为了节省一点空间,用在备份的时候非常好用。

压缩命令 应用场景
tar 大部分使用tar即可,功能有打包和压缩
gzip 一般配合其他命令使用
zip 用于压缩成zip格式的压缩包,解压是unzip

tar

打包

  tar命令不加参数的话是打包,就是把文件放在一起。

压缩

  tar命令压缩的参数一般是tar zcvf 目标文件 源文件

# 把/etc/文件目录压缩到/tmp/etc.tar.gz中
tar zcvf /tmp/etc.tar.gz /etc/
# 把/etc/文件目录打包到/tmp/etc.tar中
tar cf /tmp/etc.tar /etc/

  tar参数的作用:

    v:verbose,显示过程;

    c:create,创建包;

    z:gzip,通过gzip压缩;

    f:file,指定压缩包,放在最后一位。

查看

  查看压缩包的时候只用指定查看的文件名就行,把c改为t

# 查看压缩包的内容
tar ztvf /tmp/etc.tar.gz
# 查看打包的内容,也可以查看压缩包
tar tf /tmp/etc.tar
解压

  解压压缩包把c改为x(extract-解压)。

# 解压文件到当前目录(默认解压到当前目录)
tar zxvf /tmp/etc.tar.gz
# 可以简写为
tar xf /tmp/etc.tar.gz
# 解压到指定目录,加-C参数
tar zxvf /tmp/etc.tar.gz -C /opt/

gzip和zip/unzip

gzip

  gzip没有tar zcvf常用,用到的时候再说。

# 创建gzip压缩包
gzip 文件名
# 解压
gzip -d 文件名
zip/unzip

  tar无法处理.zip格式的压缩包,此时用zip和unzip,zip是Linux和Windows共同支持的压缩格式。

  大部分只要会用unzip解压就行。

# 用zip压缩文件
zip 文件名
# 用zip压缩目录
zip -r 压缩文件名 要压缩的目录
# 解压zip格式
unzip 文件名

day008 Linux四剑客-grep-find

  四剑客都有谁?

  awk,sed,grepfind

grep

  grep过滤,在文件或管道中进行过滤查找,找到想要的内容。

  grep默认按行查找,会把匹配到的行给显示出来。

# grep的基本用法1,查找文件中特定内容
grep '要找的内容' /etc/passwd
# grep的基本用法2,查找叫crond的进程
ps -ef | grep 'crond'

  grep后面可以跟一些参数:

参数 说明
-n line number-显示行号
-v 排除,取反
-i ignore case-过滤时忽略大小写
# 找到passwd中root在第几行
grep -n 'root' /etc/passwd
# 过滤出secure文件中failed password的行,并且不区分大小写
grep -i 'failed passwd' /var/log/secure
# 排除/etc/passwd中nologin的行
grep -v 'nologin' /etc/passwd

find

find基础

  find用在精确或模糊查找,其参数可有以下选择:

find选项 说明
-type 文件类型,-f文件,-d目录
-name 文件名,用''引出来
-size 根据大小查找,+表示大于,-表示小于,eg:+10k-1M+5G
-mtime 根据修改时间查找文件,-7是7天内,+7是7天之前
-maxdepth 递归查找的层数
# 在etc下找名字为'hostname'的文件
find /etc/ -type f -name 'hostname'
# 在根下找ls命令的位置
find / -type f -name 'ls'
# 在/etc/下找到以.conf结尾的文件
find /etc/ -type f -name '*.conf'

  find还可以根据大小和修改时间进行查找。

# 查找大于1Mb的文件
find /etc/ -type f -size +1M
# 找出修改时间30天之前的文件
find /etc/ -type f -mtine +30

  综合练习:

# 找出/etc/中以.conf结尾的大于10kb的且修改时间是7天前的文件
find /etc/ -type f -name '*.conf' -size +10k -mtime +7

  find默认找所有层,如果只想找1层或者2层,要加上-maxdepth选项。

  注意:此时-maxdepth必须放在第一位!!!

# 只递归两层查找根目录下以.conf结尾的文件
find / -maxdepth 2 -type f -name '*.conf'

  查找的时候不区分大小写。

# 不区分大小写的查找
find / -type f -iname '*.conf'

find与其他命令结合

  首先准备文件环境:

mkdir -p /wang/find
touch /wang/find/xiaowang{01..10}.txt
cd /wang/find

  1、find+查看命令

# 利用反引号的方法
ls -lh `find /wang/find/ -type f -name '*.txt'`
# 利用管道
# 错误:
find /wang/find/ -type f -name '*.txt' | ls -lh
# 原因:我们使用ls的时候,要在一个文件目录内,这个文件目录就是ls'参数',可是管道默认前面传递过来的是'字符串'ls无法识别
# 修正:在管道符号后加入xargs,把字符串变为可识别的'参数'
# 正确:
find /wang/find/ -type f -name '*.txt' |xargs ls -lh

  2、find+打包压缩

find /wang/find/ -type f -name '*.txt' |xargs tar -zcvf find.tar.gz

  3、find+复制移动

# cp 源文件 目标文件
# 如果不加-t,Linux就默认/tmp/为源目录,而管道的内容为目标目录,这样就反了
# 所以在/tmp/前加上-t告诉Linux管道的内容是要复制的源文件,而/tmp/是要复制到的目录
find /wang/find/ -type f -name '*.txt' |xargs cp -t /tmp/