admin管理员组

文章数量:1597206

cnetos7目录结构

查看命令tree
目 录 说 明

/处于linux系统树形结构的最顶端,它是linux文件系统的入口,所有的目录、文件、设备都在 / 之下
/binbin是Binary的缩写。常用的二进制命令目录。比如 ls、cp、mkdir、cut等;和/usr/bin类似,一些用户级gnu工具
/boot存放的系统启动相关的文件,例如:kernel.grub(引导装载程序)
/devdev是Device的缩写。设备文件目录,比如声卡、磁盘……在Linux中一切都被看做文件。终端设备、磁盘等等都被看做文件 设备文件: /dev/sda,/dev/sda1,/dev/tty1,/dev/tty2,/dev/pts/1, /dev/zero, /dev/null, /dev/cdrom
/etc常用系统及二进制安装包配置文件默认路径和服务器启动命令目录 passwd 用户信息文shadow 用户密码文件 group 存储用户组信息fstab 系统开机启动自动挂载分区列表hosts 设定用户自己的IP与主机名对应的信息
/home普通用户的家目录默认存放目录
/lib库文件存放目录,函数库目录
/lost+found文件系统。若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查)用来放置零散文件(没有名称的文件) 当系统非法关机后,这里就会存放一些文件。在centos6版本下,每个分区的挂载点下会有些目录
/mnt /media一般用来临时挂载存储设备的挂载目录,比如有cdrom、U盘等目录在CENTOS7中会挂载到/run下面
/opt表示的是可选择的意思,有些软件包也会被安装在这里
/proc操作系统运行时,进程(正在运行中的程序)信息及内核信息(比如cpu、硬盘分区、内存信息等)存放在这里。/proc目录是伪装的文件系统proc的挂载目录,proc并不是真正的文件系统。因此,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。也就是说,这个目录的内容不在硬盘上而是在内存里 查看咱们的CPU信息cat /proc/cpuinfo |
/sys系统目录,存放硬件信息的相关文件
/run运行目录,存放的是系统运行时的数据,比如进程的PID文件
/srv服务目录,存放的是我们本地服务的相关文件
/sbin大多数涉及系统管理的命令都存放在该目录中,它是超级权限用户root的可执行命令存放地,普通用户无权限执行这个目录下的命令,凡是目录sbin中包含的命令都是root权限才能执行的
/tmp该目录用于存放临时文件,有时用户运行程序的时候,会产生一些临时文件。/tmp就是用来存放临时文件的。/var/tmp目录和该目录的作用是相似的,不能存放重要数据,它的权限比较特殊 [root@~]# ls –ld /tmp drwxrwxrwt 10 root root 12288 Oct 3 20:45 /tmp/ 粘滞位(sticky bit)目录的sticky位表示这个目录里的文件只能被owner和root删除
/var系统运行和软件运行时产生的日志信息,该目录的内容是经常变动的,存放的是一些变化的文件。比如/var下有/var/log目录用来存放系统日志的目录,还有mail、/var/spool/cron
/usr存放应用程序和文件,
/usr/bin普通用户使用的应用程序
/usr/sbin管理员使用的应用程序
/usr/lib库文件Glibc(32位)
/usr/lib64库文件Glibc
/lib /lib64都在/usr/目录下 这个目录里存放着系统最基本的动态链接共享库,包含许多被/bin/和/sbin/中的程序使用的库文件,目录/usr/lib/中含有更多用于用户程序的库文件。作用类似于windows里的DLL文件,几乎所有的应用程序都需要用到这些共享库
注:lib***.a是静态库 lib***.so是动态库静态库在编译时被加载到二进制文件中动态库在运行时加载到进程的内存空间中简单的说:这些库是为了让你的程序能够正常编译运行的其实类似于WIN中.dll文件,几乎所有的应用程序都需要用到这些共享库

绝对路径和相对路径
路径:在我们平时使用计算机时要找到需要的文件就必须知道文件的位置,而表示文件的位置的方式就是路径
绝对路径:在Linux中,绝对路径是从”/”开始的,比如**/usr、/etc/passwd**。如果一个路径是从根(/)开始的,它一定是绝对路径.
相对路径:相对路径是以 . 开始的,
[root@ etc]# pwd #判断用户当前所处的位置
绝对路径: 从/开始的路径 /home/mk
相对路径: 相对于当前目录开始,a.txt ./a.txt …/miao/b.txt 当前目录在/etc

**[root@63 etc]# ll passwd 
-rw-r--r-- 1 root root 2116 1116 14:57 passwd
[root@63 etc]# ll /etc/passwd
-rw-r--r-- 1 root root 2116 1116 14:57 /etc/passwd**

系统命令

临时设置别名
alias vimens33='vim /etc/sysconfig/network-scripts/ifcfg-ens33' #别名命令可用alias/type查看别名
unalias vimens33 #删除别名
设置永久别名
vim /root/.bashrc #当前root用户生效
source /root/.bashrc #重新载入 等同 . /root/.bashrc #在当前bash环境下读取并执行FileName中的命令
vim /etc/bashrc #全局修改
. /etc/bashrc #加载配置文件

基本查看命令

历史命令之history
命令:history
4个快速查找Linux历史命令的技巧:
方法1: 光标上下键
方法2: ctrl+r -》输入某条命令的关键字-》找出来对应的命令,按右光标键
方法3: !数字 //执行历史命令中第N条命令
方法4:!字符串 //搜索历史命令中最近一个以xxxx字符开头的命令,例如!vim

ls -al 以列表方式显示目录下的所有文件,别名:ll -a
ls -d 目录名 #只查看目录
-S 以文件的大小进行排序
cat #查看文件内容不可编辑
less #查看文件内容,可滚动查看 搜索 按 /
ll -thr #t 按时间排序 r表示倒序
ll -Sh #表示按大小排序
file #查看文件类型。
du -sh /etc 看某个目录大小
wc -l 文档名 查看文档行数
sort 排序命令#处理大量数据时会用到的命令
默认按数字 字母规则进行排序从小到大
sort 123.txt #从小到大 数字靠前
sort -n 123.txt #从小到大 字母靠前
sort -r 123.txt #倒序查看从大到小
sort -M #按月份

 sort -M file3

April
February
January
March
例4:组合使用
-t 指定一个用来区分键位置字符
-k 后面跟数字,指定按第几列进行排序
-r 反序排序(升序变成降序进行排序)
-n 按照字符串的数值顺序比较,暗含-b

sort -n -t ":" -k3 -r /etc/passwd | more #按: 做分隔符,以第3列,也就是用户UID,来从大到小排序

free -h #查看内存使用信息 -m表示以M方式,-G以G方式
分区查看
du -h filename #查看文件大小
du -h /etc/ #查看文件夹大小
du -ah /etc/ #查看etc下的所有目录和文件大小
lsblk -fpm #查看所有磁盘和分区信息
-f #列出系统名称,uuid
-m #列出权限
-p #列出完整设备名
blkid #列出设备的uuid等参数类型
gdisk (gpt格式使用分区软件) fdisk (mbr分区使用软件)
快速查看分区表 gdisk -l /dev/sda


Linux下快捷键
都是用Ctrl+下面的单词, ^表示Ctrl
^C
终止前台运行的程序 , 如:ping g 后,想停止按下Ctrl+C
^D
退出 等价exit
^L
清屏与clear功能一样
^R
搜索历史命令,可以利用好关键词
!$ 引用上一个命令的最后一个参数(直接输入,会执行最后一个命令),等价于
!! #执行最后一个命令
cat /etc/hosts
!vim 执行最后一个vim开头的命令
vim !$ #相当于执行: vim /etc/hosts

查看硬件(bios)时间

 hwclock

查看系统时间日期

date "+%Y%m%d %H:%M:%S "

%F 完整日期格式,等价于 %Y-%m-%d 例如 “+%F %T” 列出日期时间
%T 完整时间,等价于%H:%y:%S
%y 年份最后两位数位 (00-99)
%Y 年份
%m month (01…12) 月
%d 按月计的日期(例如:01)
%M minute (00…59) 分
%H 小时(00-23)
%S 秒(00-60)
%A 星期几
date -d "+1 months" +%F #+1显示月 date -d “- 1 day” +%A 昨天星期几
2018-12-02

tree #查看目录结构
centos7默认没安装安装,安装命令

 rpm -ivh /media/Packages/tree-1.6.0-10.el7.x86_64.rpm

time 作用:一般用来测量一个命令的运行时间

time ls -l /etc/

real	0m0.056s
user	0m0.016s
sys	0m0.040s

说明:
real:实际使用时间
user:用户状态使用的时间
sys:内核状态使用的时间

cat #简单查看文件

cat -n service.log |grep 12345 #带行号输出筛选日志

more #以分页形式查看内容。
cut -d: -f1 /etc/passwd #查看系统用户

-d #指定分割符
-f #选定行数

less +文件名
说明:linux中more与less的区别
more:不支持后退,但几乎不需要加参数,空格键是向下翻页,Enter键是向下翻一行,在不需要后退的情况下比较方便
less:支持前后翻滚,既可以向上翻页(pageup按键),也可以向下翻页(pagedown按键)。,空格键是向下翻页,Enter键是向下翻一行
head #用于显示文件的开头的内容。在默认情况下,head命令显示文件的头10行内容
head -8 #显示8行

tail 作用: 用于显示文件中的尾部内容。默认在屏幕上显示指定文件的末尾10行
语法:tail (选项)文件名
参数:
-n 显示文件尾部多少行的内容(n为数字)
-f 动态显示数据(不关闭),常用来查看日志

df -h #列出已挂载分区信息。

lsblk -fmp #查看所有磁盘和分区信息
-f #列出文件系统名称
-m #列出权限
-p #列出完整设备名
stat /etc/passwd #查看文件的属性

文件:"/etc/passwd"
大小:2116 块:8 IO 块:4096 普通文件
设备:803h/2051d	Inode:9401663 硬链接:1
权限:(0644/-rw-r–r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问(atime):2017-11-16 14:57:39.923177258 +0800
最近更改(mtime):2017-11-16 14:57:39.397177256 +0800
最近改动(ctime):2017-11-16 14:57:39.409177256 +0800

二 ,查看进程和端口
查进程有两个命令:

ps -ef | grep sshd 

ps aux |grep sshd 

查看端口信息
netstat -luntp |grep 22 #查看22端口
lsof -i:22 #查看端口的详细信息(最小化安装没有软件)


查看系统性能
cat /proc/cpuinfo |grep "model name" && cat /proc/cpuinfo |grep "physical id" 查看cpu型号,核心数

model name	: Intel(R) Core(TM) i5-9400 CPU @ 2.90GHz
physical id	: 0

uname -a # 查看内核/操作系统/CPU信息的linux系统信息命令

Linux Centos7-2.server 3.10.0-957.27.2.el7.x86_64 #1 SMP Mon Jul 29 17:46:05 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

env # 查看环境变量资源

du -sh # 查看指定目录的大小
grep MemTotal /proc/meminfo # 查看内存总量
grep MemFree /proc/meminfo # 查看空闲内存量
uptime # 查看系统运行时间、用户数、负载
cat /proc/loadavg # 查看系统负载磁盘和分区
mount | column -t # 查看挂接的分区状态
fdisk -l # 查看所有分区
swapon -s # 查看所有交换分区
iptables -L # 查看防火墙设置
route -n # 查看路由表
netstat -lntp # 查看所有监听端口
netstat -antp # 查看所有已经建立的连接
netstat -s # 查看网络统计信息进程
ps -ef # 查看所有进程
top # 实时显示进程状态用户
w # 查看活动用户
id # 查看指定用户信息
last # 查看用户登录日志
cut -d: -f1 /etc/passwd # 查看系统所有用户
cut -d: -f1 /etc/group # 查看系统所有组
crontab -l # 查看当前用户的计划任务服务
chkconfig –list # 列出所有系统服务
systemctl list-unit-files #列出所有系统服务(7系统)
rpm -qa # 查看所有安装的软件包
cat /proc/cpuinfo :查看CPU相关参数的linux系统命令
cat /proc/partitions :查看linux硬盘和分区信息的系统信息命令
cat /proc/meminfo :查看linux系统内存信息的linux系统命令
cat /proc/version :查看版本,类似uname -r
cat /proc/ioports :查看设备io端口
cat /proc/interrupts :查看中断
cat /proc/pci :查看pci设备的信息
cat /proc/swaps :查看所有swap分区的信息

文件系统管理

切换目录: cd
创建/修改/移动/删除: touch mkdir mv vi rm cp
touch #创建文件touch {1..3}.txt 。【-d】修改文件修改时间(ctime,atime同时更改) 不加参数修改为目前时间。
vim 创建文件,修改文件
echo abc>>123.txt # 重定向创建一个文件> 覆盖 >>追加。
echo具体语法如下:
Linux echo命令不能显示文件中的内容。
语 法:echo [-ne][字符串]或 echo [–help][–version]
补充说明:echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开, 并在最后加上换行号。
参 数:
-n 不要在最后自动换行
-e 若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:
\a 发出警告声;
\b 删除前一个字符;
\c 最后不加上换行符号;
\f 换行但光标仍旧停留在原来的位置;
\n 换行,且光标移至行首;
\r 光标移至行首,但不换行;
\t 插入tab;
\v 与\f相同;
\ 插入\字符;
\nnn 插入nnn(八进制)所代表的ASCII字符;

echo -e "1\n2\n3\n">123.txt #换行输入123要加-e""号。

mkdir 参数 文件夹名称 -P表示递归创建。
mv #移动,重命名文件文件夹
rm #可以删除一个目录中的一个或多个文件或目录,对于链接文件,只是删除整个链接文件,而原文件保持不变.
选项:

-f 强制删除,没有提示
-r 删除目录

rm -rf  (慎用,一定要在删除以前确定一下所在目录,防止误删除重要数据)    
cp  源文件/目录   目录文件/目录

选项:-R/r:递归处理,将指定目录下的所有文件与子目录一并处理
例子:
cp /etc/passwd /opt/ #复制文件
cp -r /boot/grub /opt/ #包含复制目录
cp -f #不提示覆盖等信息
cp -a #保留源文件属性
系统7个运行级别
运行级别
centos6下Linux运行级别0-6的各自含义

0:关机模式
1:单用户模式 ,用于破解root密码
2:无网络,支持的多用户模式
3:有网络支持的多用户模式(一般叫字符界面,工作中最长使用的模式)
4:保留,未使用
5:有网络支持,支持图形界面,支持的多用户模式(图形界面)
6:重新引导系统,及重启

可以在不同级别下,设置服务是否随系统启动运行。在centOS7上运行级别的含义已经和之前不同了,已由.target来代替运行级别,我们可以称target为目标态,我们可以通过target定制更符合我们工作运行环境。

设置默认的运行界别
centos7不再使用/etc/inittab文件进行默认的启动级别配置,而使用比sysvinit的运行级更为自由的target替代。
第3运行级用multi-user.target替代。
第5运行级用graphical.target替代。

设置默认第三启动级别
systemctl set-default multi-user.target
设置默认第五启动级别
systemctl set-default graphical.target
systemctl get-default #查看当前启动级别
[root@ ~]#runlevel
3 5 #表示从3级别切换到了5级别


磁盘分区管理

blkid #查看分区的UUID信息
lsblk -afpm #查看所有磁盘设备。列出UUID等信息
fdisk (MBR)设备路径名 #分区工具
fdisk -l #查看所有磁盘信息
gdisk(GPT)设备路径名
命令(输入 m 获取帮助):n #创建一个新的分区
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p #代表创建一个主分区
ast 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+1G #指定分区大小
命令(输入 m 获取帮助):p #打印分区表
命令(输入 m 获取帮助):w #保存
mkfs.xfs 格式化分区位xfs文件系统,-f 表示强制执行
p #查看分区信息
d #删除分区
q #退出
t #改变分区表类型
l #显示分区表类型
w #保持分区表并退出
q #不保存退出
对在用的分区,要重新系统(reboot)建议重启更新分区信息到系统内核中,或执行 partx -a /dev/sdb

mkfs.xfs /dev/sdb1 #格式化分区为xfs文件系统。
mkfs.ext4 /dev/sdb1 #格式化分区为ext4文件系统。
mount /dev/sdb1 /sdb1 #挂载文件系统分区。
umonut /dev/sdb1 #卸载文件分区,可以指定设备,也可以指定挂载目录
df -Th #查看已挂载的分区情况。
df -ih #查看已用inode的使用情况
vim /etc/fstab #开启自动挂载文件,实现永久挂载建议用UID方式

/dev/sdb1     /sdb1  xfs     defaults  0     0
要挂载的分区设备 挂载点 文件系统类型 挂载选项 是否备份 是否检测

mount -a #自动挂载/etc/fstab中没有挂载上的文件

实战练习增加swap分区大小。
free -mh #查看内存使用情况。
mkswap /dev/sdb3 #格式化为swap系统
swapon /dev/sdb3 #开启swap设备 ,相当于挂载。
swapon -s #查看swap内存设备
free -mh #查看swap内存已增加成功

vim /etc/fstab #打开fstab永久添加
UUID swap swap defaults 0 0

文件系统的结构
Linux文件系统由三部分组成 : 文件名,inode,block
stat 123.txt #查看文件详细信息inode, ls -i 也可以查看inode
inode包含文件的元信息,具体来说有以下内容:

 文件的字节数
  * 文件拥有者的User ID
  * 文件的Group ID
  * 文件的读、写、执行权限
  * 文件的时间戳,共有三个:ctime指inode属性上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
  * 链接数,即有多少文件名指向这个inode
  * 文件数据block的位置

inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。
df -ih #查看已用inode的使用情况

block 是真正存储数据的地方。

  • block是 文件系统 中最小的存储单位
  • 扇区 是 磁盘 中最小的存储单位

在linux下中叫:block,在windows中叫:簇 cu 、由扇区组成。

stat /etc/passwd |grep IO #查看block块大小。

文件的硬链接和软链接

  • 【硬连接】:硬连接指通过索引节点号来进行连接。inode是可以对应多个文件名的
    在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。
  • 【软连接】:另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息

ln test.txt test.ln &mesp;#创建一个硬链接,不能跨分区,不能针对目录
ll -i #查看inode是一样,说明物理储存是到同一个block中
ln -s test.txt test.link #创建软链接。相当于快捷键。
ll test.link #查看软链接(L)浅蓝色,如果源文件被删除,变成红色状态

inode的特殊作用
由于inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象。

  • 1.有时,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点,就能起到删除文件的作用。
  • 2.移动文件或重命名文件,只是改变文件名,不影响inode号码。
  • 3.打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无法从inode号码得知文件名。

为什么每次修改完服务器配置文件后,都需要重新加载一下配置文件?
因为vim每次修改完后,Inode号都会变。
inode分区完后,可以增加吗? 不可以。


实战:修复服务器文件系统
实战场景:公司服务器突然断电后,再次启动后,报如下错误。

解决方法:
输入root 密码
fsck -f -y /dev/sda1 #把引导分区文件系统修复一下 慎用,给领导说一声
fsck -f -y /dev/sda3 #把根分区文件系统修复一下 慎用,给领导说一声
reboot 重启
fsck参数:
-y 对所有问题都回答 “yes”
-f 即使文件系统标记为 clean 也强制进行检查


xfsdump 备份分区命令

df -Th #查看是否是独立文件系统。
xfsdump -l 等级(L小写)的备份级别有以下两种,默认为0(即完全备份)
0 级别代表: 完全备份
1 到9级别代表: 增量备份

完全备份:每次都把指定的备份目录完整的复制一遍,不管目录下的文件有没有变化;
增量备份:每次将之前(第一次、第二次、直到前一次)做过备份之后有变化的文件进行备份;
差异备份:每次都将第一次完整备份以来有变化的文件进行备份。

1、备份整个分区。 (这个功能就像是虚拟机的快照,服务器被黑后,进行快速恢复)
xfsdump -f 备份存放位置 要备份路径或设备文件
注意:备份的路径这里不能写成/sdb1/。 可以是/dev/sdb1 或/sdb1

2、 指定备份时免交互操作,方便后期做定时备份
-L :xfsdump 纪录每次备份的 session 标头,这里可以填写针对此文件系统的简易说明
-M :xfsdump 可以纪录储存媒体的标头,这里可以填写此媒体的简易说明

 xfsdump -l 0 -f /opt/xfsdump_sdb1 /dev/sdb1 -L backup_sdb1_0 -M backup_all

xfsdump -I #查看备份记录

xfsdump -l 1 -f /opt/xfsdump_sdb1_1 /dev/sdb1 -L backup_sdb1_1 -M backup_1 #增量备份

参数:-s 文件路径 只对指定的文件进行备份,-s指定时,路径写的是相对路径(-s可以是文件或目录) 文件目录前后不能有 / 和分区之间需要有空格

xfsdump -f /opt/dump_grub2 -s  grub2/grub.cfg  /boot -L dump_grub2 -M boot-sda1

使用 xfsdump 时,请注意下面下面的几个限制:

  • 1、xfsdump 不支持没有挂载的文件系统备份!所以只能备份已挂载的!
  • 2、xfsdump 必须使用 root 的权限才能操作 (涉及文件系统的关系)
  • 3、xfsdump 只能备份 XFS 文件系统
  • 4、xfsdump 备份下来的数据 (档案或储存媒体) 只能让 xfsrestore 解析
  • 5、xfsdump 是透过文件系统的 UUID 来分辨各个备份档的,因此不能备份两个具有相同 UUID 的文件系统

xfsrestore -f /opt/dump_grub2 /opt/grub2 #恢复备份命令(不能指定设备)
xfsrestore -f /opt/dupm_grub2 -s grub2/grub.cfg /opt/grub2 #恢复指定的文件或目录


文件处理

VIM使用篇

首次进入文件(默认) ——————命令模式
按下 a i o A I O (出现insert) ———编辑模式(返回按Esc)
输入号————————————进入命令行模式(指令模式)
按v进入(可视模式)
i 当前字符之前插入 (光标前)
I 行首插入 (行首
a 当前字符之后插入 (光标后)
A 行尾插入(行尾)
o下一行插入 (另起一行)
O上一行插入(上一行插入)
x 向后删除一个字符 等同于delete
X 向前删除一个字符
u 撤销一步 每按一次就撤销一次
r 替换
v进入可视模式 (字符选择)
V进入可视行模式(行选择)
ctrl+v进入可视快模式(块选择) (可以用来选择复制,按p粘贴)
ctrl+s在linux下是锁定屏幕显示的意思,这时整个界面被锁定,不能进行正常输入。使用ctrl+q来解除锁定,

在命令模式下做的操作:
光标定位
hjkl 左下上右
0home键表示切换到行首, $end键表示切换到行尾
gg 快速定位到文档的首行 , G定位到未行
3gg 或者 3G 快速定位到第3行
/string(字符串) -----找到或定位你要找的单词或内容,如果相符内容比较多,我们可以通过N、n来进行向上向下查找,并且vi会对查找到的内容进行高亮显示。
取消用 :noh
/^d ----^意思表示以什么开头 ,,查找以字母d开头的内容
/t$ -----$意思表示以什么结尾,,查找以字母t结尾的内容

对文本进行编辑
删除、复制、粘贴、撤销
y 复制(以字符为单位) :表示对单个字符进行复制,如果要复制整行,用yy(以行为单位)
复制N行: Nyy ,比如: 2yy ,表示复制2行
dd(删除,以行为单位,删除当前光标所在行)
删除N行: Ndd ,比如: 2dd ,表示删除2行
dG 从单前行删除到末尾
P粘贴
剪切: dd
x 删除光标所在位置的字符
X 删除光标前字符
D 从光标处删除到行尾
u 撤销操作
ctrl+r 还原撤销过的操作。
r 替换,或者说用来修改一个字符

总结:vim如何进入其它模式
a A o O i I 都是可以进行插入,编辑模式
进入命令行模式
v 进入可视模式
ctrl+v 进入可视块模式
V 进入可视行模式
R 擦除、改写,进入替换模式
你进入以上模式后,想要退出 ,按esc

扩展:插入模式中的操作
ctrl+p可以进行补全操作,所需要的内容必须是在当前打开的文件内存在的,它只针对当前文件
V模式(列)
进入v模式 移动光标选择区域、
编程的时候需要进行多行注释:
1)、ctrl+v 进入列编辑模式
2)、向下或向上移动光标,把需要注释、编辑的行的开头选中起来
4)、然后按大写的I
5)、再插入注释符或者你需要插入的符号,比如"#"
6)、再按Esc,就会全部注释或添加了

删除:再按ctrl+v 进入列编辑模式;向下或向上移动光标 ;选中注释部分,然后按d, 就会删除注释符号。

5.1.4 命令行模式操作
:w 保存 save
:w! 强制保存
:q 没有进行任何修改,退出 quit
:q! 修改了,不保存,强制退出
:wq 保存并退出
:wq! 强制保存并退出
:x 保存退出
例: wq! 强制保存并退出
无权限编辑
ll /etc/shadow
----------. 1 root root 1179 9月 19 12:57 /etc/shadow
vim /etc/shadow

调用外部文件或命令
假设:我想要写入我的网卡MAC地址,我要查看一下,当前在vim编辑文档,照着写。这样好麻烦。
在命令行模式下操作:
:!ifconfig 调用系统命令

!+命令

读取其他文件。(把其他文件中的内容追加到当前文档中)

:r /etc/hosts

文本替换

格式 : 范围(其中 %所有内容) s分隔符 旧的内容 分隔符 新的内容 分割符(g表示从行首到行尾)  (分隔符可以自定义)

默认是每一行的第一个符合要求的词 (/g全部)
:1,3 s/bin/tihuang 替换第1到3行中出现的第一个bin进行替换为tihuang
:1,3 s/bin/tihuang/g 替换第1到3行中查找到所有的bin进行替换为tihuang
:3 s/xue/aaaaa #只把第3行中内容替换了
:% s/do/tihuang/g #将文本中所有的do替换成xuegod
:% s/do/tihuang/gi #将文本中所有的do替换成xuegod, 并且忽略do的大小写
:% s@/etc/a@/etc/b@g #将文本中所有的/etc/a替换成/etc/b
:%s/^#/ /g #删除所有#开头的行
自定义vim使用环境
临时设置
:set nu 设置行号
:set nonu 取消设置行号
:noh 取消高亮显示
永久设置环境
vim /etc/vimrc 设置后会影响到系统所有的用户
~/.vimrc #在用户的家目录下,创建一个.vimrc。这样只影响到某一个用户,没有自己建一个
例:

cat  /root/.vimrc  

set nu

vim -o /etc/passwd /etc/hosts # 以上下的形式打开两个文档
vim -O /etc/passwd /etc/hosts #以左右的形式打开两个文档
ctrl+ww 在两文档之间进行切换编辑。大写O左右分屏,小写的o上下分屏


解决windows和linux 互传文档乱码
通过iconv命令转码
-f, --from-code=名称 原始文本编码
-t, --to-code=输出编码
-o, --output=FILE 输出文件名

iconv -f gb2312  -t utf8 文档名  -o 输入文档名 #转换编码
cat aa.test 

windows和linux处理回车方法不同
rpm -ivh /mnt/Packages/dos2unix-6.0.3-7.el7.x86_64.rpm

注: 在centos7上,unix2dos这个命令已经被集成到dos2unix-6.0.3-7.el7.x86_64.rpm包中。在centos6下需要安装unix2dos.xxx.rpm。

dos2unix 这个命令是把windows下的回车转成linux类型。


文件系统

Linux文件系统由三部分组成:文件名,inode,block
windows也由这三部分组成。
a.txt ———————>inode ———————> block
文件名 ——存放文件元数据信息 ——— 真正存放数据

避免误删除的文件内容被覆盖。 如何避免?
卸载需要恢复文件的分区或以只读的方式挂载
ext4文件系统上删除文件,可以恢复: extundelete ,ext3恢复使用:ext3grep


文件压缩打包命令
tar 命令
用法:tar [OPTION...] [FILE]...
参数:

-c create创建文件
-x -extract [ˈekstrækt] 提取 解压还原文件
-v --verbose显示执行详细过程
-f --file指定备份文件
-t --list 列出压缩包中包括哪些文件,不解包,查看包中的内容
-C (大写)–directory 指定解压位置

tar -cvf test.tar a b c #压缩目录下的a,b,c 文件
[root@localhost test]# tar -cvf /opt/grub2.tar /boot/grub2
tar: 从成员名中删除开头的“/
注意:在使用绝对路径名归档文件时,将默认从文件名中删除该路径中前面的 / 符号。这样解压时,会直接解压到当前目录。 如果不移除/压缩时,当解包时,直接按绝对路径来释放,会覆盖原系统中此路径的文件。
查看命令
tar -tvf test.tar #查看包内的文件,不解包
解包命令
tar -xvf test.tar -C /opt/test #解包命令 ,-C表示指定解压路径,默认当前路径

压缩命令

tar 归档+压缩:
语法:tar czvf newfile.tar.gz SOURCE
常用参数:

**-z**, --gzip   以**gzip**方式压缩  展名: **tar.gz** 常用		
**-j** :        以**bz2**方式压缩的 扩展名:**tar.bz2** 常用
**-J** :        以**xz** 方式压缩   扩展名:**tar.xz** 压缩最高,速度最慢
gzip压缩速度最快;
bzip2压缩生成的文件比gzip小,但使用不如gzip广;
xz压缩工具相对较新,但是会提供最佳的压缩率

tar -czvf beifen.tar.gz /etc #利用gzip压缩打包
tar -cjvf beifen.tar.bz2 #利用bz2压缩打包
tar -cJvf beifen.tar.xz #利用xz 压缩打包 查看-t 解压-x
zip压缩软件命令
zip alljpg.zip ./*.jpg #压缩命令
unzip alljpg.zip -d /opt/jpg #解压命令

用户管理

Linux用户三种角色
超级用户: root 拥有对系统的最高的管理权限 ID=0
普通用户:系统用户 UID**:1-999**(centos7版本) 1-499(centos6版本)
本地用户 UID:1000+ 500+
UID:即每个用户的身份标示,类似于每个人的身份证号码.
虚拟用户:伪用户 一般不会用来登录系统的,它主要是用于维持某个服务的正常运行.如:ftp,apache

用户配置文件 /etc/passwd
用户组文件 /etc/group
用户对应的密码信息 /etc/shadow
查看用户相关命令:
id 用户和组的信息 id username
whoami #查看当前有效用户名
who #显示目前登入系统的用户信息。
w # w命令用于显示已经登陆系统的用户列表
users #用于显示当前登录系统的所有用户的用户列表

useradd  -u “UID” -g "+初始组" -G "附加组" -M -s 登陆的shell/sbin/bash” username

-d: -d 用户主目录路径, 可以指定用户家目录
-M: 不创建用户的主目录
-g:设置用户初始组的名称或数字ID;该组必须是存在的;如果没有设置该选项,useradd会根据/etc/login.defs文件中的USERGROUPS_ENAB环境变量进行设置。默认USERGROUPS_ENAB yes 会用和用户名相同的名字创建群组,GID 等于 UID.
-G:用户要加入的附加组列表;使用逗号分隔多个组,不要添加空格;如果不设置,用户仅仅加入初始组。(一个用户只允许有一个主组,可以有多个附属组)
-s:用户默认登录shell的路径;启动过程结束后,默认启动的登录shell在此处设定;请确保使用的shell已经安装,默认是 Bash。有时候需要禁止某些用户执行登录动作,例如用来执行系统服务的用户。将shell设置成 /sbin/nologin 就可以禁止用户登录。

id username #查看组名
[root@localhost ~]# id testuser
uid=520(testuser) gid=1000(aiwen) 组=1000(aiwen),0(root)
useradd username #创建用户
userdel -r username #删除用户
选项:-r 删除的时候,会同时删除用户的家目录和/var/mail下的目录
head -3 /etc/shadow #查看密码文件

echo 123456 | passwd --stdin zhangsan #不交互
echo 123456 | passwd --stdin lisi
echo aiwen:123456|chpasswd #设置密码不交互
两个密码一样,shawod里的密码值不一样。密码值有三部分组成,第一部分是表示使用哪种哈希算法;第二部分是用于加密哈希的salt;第三部分是已加密的哈希
哈希算法:$1表示MD5 ; $6 表示SHA-512 ; $5 SHA-256

控制添加用户规则文件的两个文件:/etc/default/useradd 和 /etc/login.defs

 egrep -v "^$|^#" /etc/login.defs   #不要空格行和#开头行

cat /etc/default/useradd 文件中的内容如下:

GROUP=100   #表示可以创建普通组 。 users组ID为100 。如果没有这一条,或者你把users这个组删除了,当你再创建用户时,将提示:useradd: group '100' does not exist  (组不存在)
HOME=/home   #哪个目录作为用户主目录存放目录。如果你不想让用户家目录在/home下,可以修改这个地方。
INACTIVE=-1  #是否启用帐号过期。passwd文件中第7栏。即:密码过期后是否会失效的设定值 。INACTIVE:无效。-1表示启用
EXPIRE=     #帐号终止日期 shadow中第8栏。账号失效的日期 就是 shadow 内的第八字段,你可以直接设定账号在哪个日期后就直接失效,而不理会密码的问题。 通常不会设定此项目,但如果是付费的会员制系统,或许这个字段可以设定!
SHELL=/bin/bash  #默认shell使用哪个
SKEL=/etc/skel  #模板目录
CREATE_MAIL_SPOOL=yes  #是否创建邮箱文件
chage -d 0 username

-m:密码可更改的最小天数。为0时代表任何时候都可以更改密码
-M:密码保持有效的最大天数
-W:用户密码到期前,提前收到警告信息的天数
-E:帐号到期的日期。过了这天,此帐号将不可用
-d:上一次更改的日期,为0表示强制在下次登录时更新密码

互动: 两个用户的UID可以一样吗?可以 修改文件没有什么不可以
vim /etc/passwd # 改 mk uid为0

mk:x :0:0:mk:/home/mk:/bin/bash

usermod 修改用户属性
语法:usermod 【参数】用户名 ,修改用户参数
常用参数:
-u UID
-d 宿主目录 + -m 移动文件到新目录
-g 起始组 #只能有一个
-G 附加组 #可以有多个
-s 登录shell
-L 锁定


软件安装卸载

rpm包管理
rpm包的获取方式:

  • 1、Centos系统镜像光盘
  • 2、网站rpmfind
  • 3、比如安装mysql、nginx软件,我们可以去它的官方网站下载:http://www.mysql
ls /mnt/Packages/zsh-5.0.2-31.el7.x86_64.rpm  
zsh-5.0.2-31.el7.x86_64.rpm

软件名**-主版本号.次版本号.修订—次数,系统版本,**系统位数64位**

RPM分为查询-q、安装-i、更新-U、验证-V、卸载-e等操作
命令格式:rpm [参数] 软件包
参数:

    -i是install的意思, 安装软件包
	-v  显示附加信息,提供更多详细信息
	-V  校验,对已经安装的软件进行校验
	-h  --hash  安装时输出####标记

互动:rpm使用时,什么情况下使用软件包全名,什么时候使用软件包名?
全名:在安装和更新升级时候使用

包名:对已经安装过的软件包进行操作时,比如查找已经安装的某个包,卸载包等 ,使用包名。它默认是去目录/var/lib/rpm下面进行搜索 当一个 rpm 包安装到系统上之后,安装信息通常会保存在本
地的 /var/lib/rpm/目录下。

rpm -ivh /mnt/Packages/zsh-5.0.2-31.el7.x86_64.rpm 安装zsh,shell
cat /etc/shells

/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
**/bin/zsh**

rpm查询功能
用法:rpm -q(query) 常与下面参数组合使用

-a(all)  查询所有已安装的软件包
-f(file)系统文件名(查询系统文件所属哪个软件包),反向查询
-i  显示已经安装的rpm软件包信息,后面直接跟包名
-l(list)  查询软件包中文件安装的位置
-p  查询未安装软件包的相关信息,后面要跟软件的命名
-R 查询软件包的依赖性

rpm -q zsh #查询软件包是否安装
zsh-5.0.2-31.el7.x86_64
rpm -qa | grep zsh #qa查询已安装的全部软件
zsh-5.0.2-31.el7.x86_64
which find
/usr/bin/find
rpm -qf /usr/bin/find #查询命令属于哪个包
findutils-4.5.11-6.el7.x86_64
rpm -qi zsh #查询已安装包的详细信息或作用
rpm -qpi /mnt/Packages/php-mysql-5.4.16-46.el7.x86_64.rpm #查询未安装的软件包 +P

查看软件包内容是否被修改

rpm -V 包名 #查看软件包内容是否被修改
rpm -Vf 已安装的包名
which ls
alias ls=‘ls --color=auto’
/usr/bin/ls
rpm -Vf /usr/bin/ls
出现下面的字符代表某测试的失败:

5 — MD5 校验和是否改变,你也看成文件内容是否改变
S — 文件长度,大小是否改变
L — 符号链接,文件路径是否改变
T — 文件修改日期是否改变
D — 设备
U — 用户,文件的属主
G — 用户组
M — 模式 (包含许可和文件类型)
? — 不可读文件
再后面的c 文件名,它表示的是文件类型
c 配置文件
d 普通文件
g 不该出现的文件,意思就是这个文件不该被这个包所包含
l 授权文件(license file)
r 描述文件

查看系统中所有的rpm包及安装的文件有没有被黑客修改
rpm -Va > rpm_check.txt

检验时参考了 /var/lib/rpm 目录下的rpm数据库信息


rpm包卸载和升级
rpm -e 软件名 #卸载软件
rpm -e --nodeps 软件名 #卸载软件忽然依赖,建议用yum 去卸载软件。
rpm -Uvh 软件名 #更新升级软件,因为更新软件可能需要解决一些依赖包,所有建议用yum update 包 来升级。

解决rpm依赖关系:
rpm -ivh /mnt/Packages/mariadb-server-5.5.56-2.el7.x86_64.rpm
警告:/mnt/Packages/mariadb-server-5.5.56-2.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
错误:依赖检测失败:

**mariadb(x86-64) = 1:5.5.56-2.el7** 被 mariadb-server-1:5.5.56-2.el7.x86_64 需要
**perl-DBD-MySQL** 被 mariadb-server-1:5.5.56-2.el7.x86_64 需要

解决:
rpm -ivh /mnt/Packages/mariadb-5.5.56-2.el7.x86_64.rpm
rpm -ivh /mnt/Packages/perl-DBD-MySQL-4.023-5.el7.x86_64.rpm
rpm -ivh /mnt/Packages/mariadb-server-5.5.56-2.el7.x86_64.rpm

YUM的使用
yum(全称为 Yellow dog Updater, Modified)是一个前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记 YUM:解决依赖关系问题,自动下载软件包,它是基于C/S架构(client ftp\file\http)
2、配置yum源文件:
vim /etc/yum.repos.d/centos7-local.repo #必须以.repo结尾,插入以下内容
[centos7] #名称必须唯一
name=CentOS7 #标识
baseurl=file:///mnt #路径 (ftp:// http:// file://
enable=1 #是否启用yum源 0标识禁用
gpgcheck=0 #是否使用公钥验证yum包的正确性
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #指定进行rpm校验的公钥文件地址
Centos 7 配置网络yum源

 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun/repo/Centos-7.repo

#wget 下载文件 ,-O 将wget下载的文件,保存到指定的位置,保存时可以重新起一个名字,或者直接写一个要保存的路径,这样还用原来的文件名。
vim /etc/yum.repos.d/CentOS-Base.repo
找到这一条:baseurl=http://mirrors.aliyun/centos/$releasever/os/$basearch/
注:$releasever等于系统的版本的值

[root@localhost yum.repos.d]# cat /etc/centos-release

CentOS Linux release 7.6.1810 (Core) 

如果不能用可能是版本对不上,到阿里云网址查看最新版本号然后替换yum源里面的系统版本号

 sed -i  's/$releasever/7.6.1810/g' /etc/yum.repos.d/CentOS-Base.repo

yum clean all #清空yum缓存 重新加载
yum list #查看列表

yum源的使用
yum install -y httpd #安装软件包 ,-y 直接安装无互动
yum -y update #升级软件包,改变软件设置和系统设置,系统版本内核都升级,不加任何包表示整个系统升级
yum -y upgrade #升级软件包,不改变软件设置和系统设置,系统版本升级,内核不改变
yum info 软件名称 #查询软件包信息 如rpm -qi
yum provides ls #查看命令属于哪个包 如 rpm -qf /usr/bin/ls ,也可以查看命令是哪个包安装
yum -y remove httpd #卸载软件
yum search http #按关键字搜索软件包
yum安装开发工具软件包组

yum grouplist #查看有哪些软件包组

语法:yum groupinstall GROUPNAME
yum grouplist #显示中文,如果想变成英文,则执行以一下命令
[root@bogon Packages]# echo $LANG

zh_CN.UTF-8     

[root@bogon Packages]#LANG=en_US.UTF-8

yum grouplist

yum grouplist #显示包列表
yum -y groupinstall '包名中英文都可以' #安装组包

实战tar源码包管理-srpm源码包安装方法
8.3.1 源码安装nginx
1. 编译环境如gcc和 gcc-c++编译器,make
2. 准备软件 : nginx-1.12.2.tar.gz
部署Nginx

 yum -y install gcc gcc-c++ make zlib-devel pcre pcre-devel openssl-devel

pcre: 支持正则表达式,地址重写rewrite
开始安装
源码编译3把斧:./configuremakemake install
rz #从windos上传软件包,sz,从linux下载
[root@xuegod63 ~]# tar xzvf nginx-1.12.2.tar.gz
[root@xuegod63 ~]# cd nginx-1.12.2
[root@xuegod63 ~]#./configure --prefix=/usr/local/nginx
[root@xuegod63 ~]# make -j 4
[root@xuegod63 ~]# make install

详解源码安装3把斧
./configure
a. 指定安装路径,例如 --prefix=/usr/local/nginx
b. 启用或禁用某项功能, 例如 --enable-ssl, --disable-filter --with-http_ssl_module
c. 和其它软件关联,例如--with-pcre
d. 检查安装环境,例如是否有编译器gcc,是否满足软件的依赖需求

最终生成:Makefile
make -j 4 #按Makefile文件编译,可以使用-j 4指定4核心CPU编译,提升速度
make install #按Makefile定义的文件路径安装
make clean //清除上次的make命令所产生的object和Makefile文件。使用场景:当需要重新执行configure时,需要执行make clean
安装时出错 看提示需要依赖库进行安装可使用yum 搜索安装

总结,软件安装方法特点:

  • rpm+yum:方便,软件版本低。稳定性好、管理方便。性能稍差。
  • 源码编译安装:麻烦,软件版本新,可以定制。稳定性稍差、管理稍差。性能好
  • 源码编译安装:主要是安装LAMP或LNMP 架构时,我们会用

安装.src.rpm源码包的方法(了解)
srpm: Source RPM 的意思,也就是这个 RPM 档案里面含有原始码( Source Code )。
[root@xuegod63 ~]# rpmbuild --rebuild lrzsz-0.12.20-27.1.el6.src.rpm #根据将src.rpm中源码文件编译成可执行的二进制文件。
若顺利执行成功则会在root用户家目录下生成一个:/root/rpmbuild目录。
在/root/rpmbuild/RPMS/x86_64/目录下生成lrzsz-0.12.20-27.1.el7.centos.x86_64.rpm这个rpm文件。
rpm -ivh rpmbuild/RPMS/x86_64/lrzsz-0.12.20-27.1.el7.centos.x86_64.rpm #安装


文件的查看和重定向
LINUX下一切皆文件
文件又可分为:普通文件、目录文件、链接文件、设备文件
LINUX系统使用文件来描述各种硬件设备资源,如:/dev/sda /dev/sdb /dev/sr0
文件描述符:是内核为了高效管理已被打开的文件所创建的索引,用于指向被打开的文件,所有执行I/O操作的系统调用都通过文件描述符;文件描述符是一个简单的非负整数,用以标明每一个被进程所打开的文件,程序刚刚启动的时候,第一个打开的文件是0,第二个是1,依此类推。也可以理解为是一个文件的身份ID

STDIN 标准输入    默认的设备是键盘      文件编号为:0  
STDOUT 标准输出  默认的设备是显示器     文件编号为:1  ,也可以重定向到文件
STDERR 标准错误   默认的设备是显示器    文件编号为:2  ,也可以重定向到文件

ll /proc/进程id号/fd  #查看一个进程打开了哪些文件。

一个进程启动时,都会打开 3 个文件:标准输入、标准输出和标准出错处理。这3 个文件分别对应文件描述符为 0、1和2也就是宏替换 STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO。

重定向和管道命令-tee
重定向:将命令正常输出的结果输出到文件中,而不是正常显示在屏幕上。
重定向输出使用> >> 操作符号
ll /proc/cpuinfo > cpu.txt  #写入到cpu.txt文件中,没有自动创建
ll /proc/meminfo >> cpu.txt   #追加到cpu.txt中。
grep root < /etc/passwd   #输入重定向,将passwd输入给grep命令处理
mysql -uroot -p123456 < user.sql   #将user.sql导入MySQL数据库中
<<EOF #EOF本意是 End Of File,表明到了文件末尾。”EOF“通常与”<<“结合使用,“<<EOF“表示后续的输入作为子命令或子shell的输入,直到遇到”EOF“,再次返回到主调shell,可将其理解为分界符(delimiter)。既然是分界符,那么形式自然不是固定的,这里可以将”EOF“可以进行自定义,但是前后的”EOF“必须成对出现且不能和shell命令冲突。

cat >123.txt << EOF 


在脚本中我们可以通过重定向输入来打印消息菜单

在使用的时候需要在”<< “右边跟一对终止符。终止符是可以自定义


错误重定向符号:2> ; 标准输入: 1< 或简写 < ; 标准输出: 0> 或 >

ls cuowuxx 2>123.txt  #错误信息输出到123.txt

ls /proc/meminfo xxxx > correct.txt 2>error.txt 

cat correct.txt error.txt 
/proc/meminfo

ls: 无法访问xxxx: 没有那个文件或目录

1>&2 ; 2>&1   #&表示等同于的意思 ,把错误和正确信息有输入到文件中 &>a.txt 错误正确一起输出

ls /etc/passwd xxxxxx >a.txt  2>&1 
ls /etc/passwd XXXXXXX &>b.txt
ls: cannot access xxx: No such file or directory
/etc/passwd

shell脚本中的 >/dev/null 2>&1 #把正确输入信息和错误信息都丢弃不显示。

cat /etc/passwd > /dev/null 2>&1 

null黑洞和zero空文件
把/dev/null看作"黑洞",所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到. 然而 /dev/null对命令行和脚本都非常的有用。
echo xxxx >/dev/null #把信息丢到null文件中,会被删除信息。

zero 文件
dd if=/dev/zero of=1.txt bs=1M count=50   #建立一个50Md的文件

dd if=输入路径 of=输出文件名称 bs=大小 count= 输入次数

管道 | 的使用

  • 1、管道命令只处理前一个命令正确输出,不处理错误输出
  • 2、管道右边的命令,必须能够接收标准输入的数据流命令才行
  • 3、管道符可以把两条命令连起来,它可以链接多个命令使用

ps -aux |grep vim
ls aa.txt |xargs rm -rf {} \; #交给xargs处理,一般用于删除文件。重命名移动不推荐

tee命令 :读取标准输入的数据,并将其内容输出成文件。

df -h | tee diskinfo.txt   #将命令输出结果输出并输入到文件中保存
df -h | tee -a diskifno.txt   #将命令输出结果内容追加到文件。

which-whereis-locate-grep-find查找命令

which   查看可执行文件的位置
whereis  查看可执行文件的位置及相关文件
locate   配合数据库缓存,快速查看文件位置 (最小化安装没有安装命令)
grep   过滤匹配,它是一个文件搜索工具
find  查找相关文件

which ls  #查看命令位置
whereis ls   #查看命令位置和相关文件

locate 它搜索的是一个数据库/var/lib/mlocate/mlocate.db,这个数据库中存有本地所有的文件信息;这个数据库是Linux自动创建并每天自动更新维护。相关的配置信息在/etc/updatedb.conf,查看定时任务信息在/etc/cron.daily/mlocate
locate *ems33  #查找结尾是ems33的文件。该命令和find / -name *ems33一样,find 命令实时查找,locate 通过缓存查找。
updatedb  #手动更新locate缓存。
locate "*.back" |xargs -i ls -l {} #查找到的结果用 | xargs -i 传递给{} 。

grep 作用:数据过滤,它能够使用正则表达式来搜索文本,并把结果打印出来

-v 取反,排除
-i 忽略大小写
^# 以#开头
#$ 以#结尾
^$ 空行
-n 对过滤的内容加上行号(对应的行号)
| 或者的意思(一般加转义符)
ps -aux | grep sshd | grep -v grep #筛选sshd字段,并排除grep字段
grep ^aiwen /etc/passwd #查看passwd已aiwen开头的字段。
grep bash$ /etc/passwd #查看passwd 已bash结尾的字段。
grep -i aiwen /etc/passwd #忽略大小写筛选aiwen字段。
grep -n "aiwen\|root" /etc/passwd #查找文中包含aiwen和root的字段加上对应的行号输出
egrep "aiwen|root" /etc/passwd #egrep是grep的加强版无需转义符

find 命令
find 搜索路径 选项参数 输出 #搜索路径默认当前。
选项参数
-name 按照文件名查找文件。 “名称”
-perm 按照文件权限来查找文件。666 {1,4,3}777 等 - 表示不低于如 -777
-user 按照文件属主来查找文件
-group 按照文件所属的组来查找文件
-mtime -n / +n 按照文件的更改时间来查找文件,

- n	表示文件更改时间距现在n天以内
+ n	表示文件更改时间距现在n天以前

-type 查找某一类型的文件

b - 块设备文件
d - 目录
c - 字符设备文件
p - 管道文件
l- 符号链接文件
f - 普通文件

-size n 查找符合指定的文件大小的文件
-exec 对匹配的文件执行该参数所给出的其他linux命令, 相应命令的形式为’ 命令 {} ;,注意{ }和 \;之间的空格,{}代表查到的内容
-maxdepth 1 #只查找目录第一层的文件和目录
find . -name "123.txt" #查找当前目录下名为123.txt的文件 文件夹,名称一样不能复制到同意目录下(文件和文件夹不能同名)
find / -perm 777 #查看系统中权限是777的文件和文件夹
find / -perm -777   #查看系统中不低于777权限的文件和文件夹。
find / -type f -perm -777 #找出系统中不低于777权限的文件。
find / -user aiwen #查看系统中属于aiwen的文件
find / -group aiwen #查看系统中输入aiwen组的文件
find /root/ -mtime -1  #查看root目录下一天之内修改过的文件。
find . -name “*.txt” -exec ls -l {} \;  #找出当前目录下的txt文件,并查看交给{}查看详细信息 ,{}参数前后要有空格。
find . -name "*.txt" -exec mv {} /opt/test/ \;   #找出当前目录下所有txt文件并移动到/opt/test下

find . -name "*.back" |xargs -i cp {} /opt  #xargs -i 接收find 的传递。与 -exec类似
正则条件
-a and 并且
-o or 或者
+ 超过
- 低于

find /etc/ -size +20k -a -size -50k  #查看etc下的大于20k并小于50k的文件
find /bin/ -maxdepth 1 -perm 755   #查看bin下的1层(1层表示当前目录下)目录深度下权限位755的文件。


命令结果的判断
; && || #三个特殊符号

#不考虑命令的相关性,连续执行,不保证前面执行成功。

&&   #逻辑与 , 判断前面是否执行成功,成功才会执行后面命令,执行正确($? = 0),然后执行命令2

|| #逻辑或,执行成功后面就不执行,不成功执行后面的命令,执行正确($? 不等于 0),然后执行命令2

ll /etc/passwd ; ll /opt/passwd #同时查看/etp/passwd和/opt/passwd
cd /opt/test && touch 123.txt  #进入/opt/test并创建123.txt,如果不存在则失败。
cd /opt/test || mkdir /opt/test #前面执行成功后面不执行,不成功执行后面命令。

  cd /opt/back || mkdir /opt/back && touch /opt/back/back.tar && ls /opt/back

计划任务

计划任务-at-cron-计划任务使用方法
计划任务的作用:是做一些周期性的任务,在生产中的主要用来定期备份数据
crond:这个守护进程是为了周期性执行任务或处理等待事件而存在
任务调度分两种:系统任务调度,用户任务调度
计划任务的安排方式分两种:
一种是定时性的,也就是例行。就是每隔一定的周期就要重复来做这个事情(crontab)
一种是突发性的,只执行一次的任务(at)

启动crond服务
systemctl start crond #启动服务
systemctl enable crond #设置开机启动

at计划任务的使用
systemctl start atd #开启atd服务
systemctl status atd #查看atd运行状态
systemctl is-enabled atd #查看开启是否自动运行

centos6 查看是否开机启动命令
chkconfig --list | grep atd #此命令在centos7上不能执行

at 20:46 #创建at任务注意:如果是上午时间,后面加上am,比如at 9:20am

>mkdir /opt/attest 

>touch /opt/attest.txt

ctrl +d  

at 23:00 < a.txt #方法二 ,命令通过文件导入
at -l #查看at计划任务
atq #查看at计划任务
at -c 5 #-c 打印任务的内容到标准输出, 查看5号计划任务具体内容
ls /var/spool/at/ #查看at在系统中文件。
tail /var/spool/at/a000* #查看at计划命令
at计划任务的特殊写法
at 20:00 2018-10-1 #在某天
at now +10min #在 10分钟后执行
at 17:00 tomorrow # 明天下午5点执行
at 6:00 pm +3 days #在3天以后的下午6点执行

删除at任务
atrm 5 #5表示任务编号,atq查看

crontab定时任务的使用
系统执行的工作:系统周期性所要执行的工作,如更新whatis数据库 updatedb数据库,日志定期切割,收集系统状态信息,/tmp定期清理
crontab的参数:用户级别
crontab -e -u username #指定hr用户的cron服务
crontab -l #列出当前用户下的cron服务的详细内容
crontab -u username -l #列出指定用户mk下的cron服务的详细内容
crontab -r #删除cron服务
crontab -e #编辑cron服务

格式:分钟 小时 几号 月份 星期几 命令

*代表取值范围内的数字(任意/每)
/指定时间的间隔频率*/10 0-23/2
-代表从某个数字到某个数字8-17
分开几个离散的数字6,10-13,20

每天凌晨2点11分开始备份数据
crontab -e #当前用户创建任务。
11 2 * * * tar -zcvf /opt/grub2.tar.gz /boot/gurb2
corntab -l #查看当前用户的cron计划任务
crontab -u dk -e #在dk用户下创建计划任务。
crontab -u dk -l #查看dk用户的cron计划任务。

所有用户的计划任务,都会在 /var/spool/cron/ 下产生对应的文件
后期可以使用这一招排查,黑客是否在你的机器中安装了定时任务

系统级别的计划任务
vim /etc/crontab #查看系统计划任务文件,可以直接在/etc/crontab中添加计划任务

SHELL=/bin/bash    #指定操作系统使用哪个shell
PATH=/sbin:/bin:/usr/sbin:/usr/bin     #系统执行命令的搜索路径
MAILTO=root   #将执行任务的信息通过邮件发送给xx用户

使用crontab命令的注意事项:
环境变量的问题
清理你的邮件日志 ,比如使用重定向 >/dev/null 2>&1
ls /etc/cron #按补齐

cron.d/   #是系统自动定期需要做的任务,但是又不是按小时,按天,按星期,按月来执行的,那么就放在这个目录下面。
cron.deny   #控制用户是否能做计划任务的文件;
cron.monthly/  #每月执行的脚本;
cron.weekly/   #每周执行的脚本;
cron.daily/   #每天执行的脚本;
cron.hourly/   #每小时执行的脚本;
crontab   #主配置文件 也可添加任务;

实战-常见的计划任务写法和案例

每天晚上21:00 重启apache
0 21 * * * /etc/init.d/httpd restart #重启服务命令centos6 。
每月1、10、22日的4 : 45重启apache。

45 4 1,10,22 * *  /etc/init.d/httpd  restart

每月1到10日的4 : 45重启apache。

	45 4 1-10 * *   /etc/init.d/httpd  restart

每隔两天的上午8点到11点的第3和第15分钟重启apach

	3,15 8-11 */2 * *  /etc/init.d/httpd  restart

晚上11点到早上7点之间,每隔一小时重启apach

	0 23-7/1 * * * /etc/init.d/apach restart

周一到周五每天晚上 21:15 寄一封信给 root@panda:

15 21 * * 1-5  mail -s "hi" root@panda < /etc/fstab

每天2:00备份/etc/目录到/tmp/backup下面
将备份命令写入一个脚本中
每天备份文件名要求格式: 2017-08-19_etc.tar.gz
在执行计划任务时,不要输出任务信息
存放备份内容的目录要求只保留三天的数据
写个脚本,然后用计划任务去执行

#!/bin/bash
find /tmp/backup -name "*.tar.gz" -mtime +3 -exec rm -f {}\;
#find /tmp/backup -name "*.tar.gz" -mtime +3 -delete
#find /tmp/backup -name "*.tar.gz" -mtime +3 |xargs rm -f
tar zcf /tmp/backup/\`date +%F`_etc.tar.gz /etc

0 22 * * * /root/backup.sh & > /dev/null #新建计划任务去执行脚本,把输出信息都丢掉。

crontab -r #删除计划任务,全部删掉。


日志管理

日志的种类和记录的方式-自定义ssh服务日志类型和存储位置
在centos7中,系统日志消息由两个服务负责处理:systemd-journaldrsyslog
系统日志文件概述:/var/log目录保管由rsyslog定义维护的,里面存放的一些特定于系统和服务的日志文件,由,/etc/rsyslog.conf

日志文件用途
/var/log/message大多数系统日志消息记录在此处。有也例外的:如与身份验证,电子邮件处理相关的定期作业任务等
/var/log/secure安全和身份验证相关的消息和登录失败的日志文件。 ssh远程连接产生的日志
/var/log/maillog与邮件服务器相关的消息日志文件
/var/log/cron与定期执行任务相关的日志文件
/var/log/boot.log与系统启动相关的消息记录
/var/log/dmesg与系统启动相关的消息记录

查看哪个IP地址经常暴力破解系统用户密码

 grep Failed /var/log/secure
 grep Failed /var/log/secure|awk '{print $11}'|uniq -c

awk '{print $11}' #以空格做为分隔符,打印第11列的数据
uniq -c命令用于报告或忽略文件中的重复行,-c或——count:在每列旁边显示该行重复出现的次数;
/var/log/wtmp文件的作用,/var/log/wtmp也是一个二进制文件,记录每个用户的登录次数和持续时间等信息。
/var/log/btmp文件是记录错误登录系统的日志。如果发现/var/log/btmp日志文件比较大,大于1M,就算大了,就说明很多人在暴力破解ssh服务,此日志需要使用lastb程序查看
可以用last命令输出wtmp中内容: last 显示到目前为止,成功登录系统的记录
last #查看登录成功的记录
lastb #查看登录失败的记录

发现暴力登录后,使用防火墙,拒绝掉:命令如下:

iptables -A INPUT -i eth0 -s. 192.168.1.63 -j DROP

> /var/log/btmp # 清空日志:


日志记录的方式
分类------------ 级别

rsyslog日志服务配置

Rhel5 ->服务名称syslog ->配置文件 /etc/syslog.conf
rhel6-7 ->服务名称rsyslog ->配置文件 /etc/rsyslog.conf
我们来查看一下日志的配置文件信息:
编辑配置文件 vim /etc/rsyslog.conf

#$UDPServerRun 514   #允许514端口接收使用UDP协议转发过来的日志

#$InputTCPServerRun 514   #允许514端口接收使用TCP协议转发过来的日志

#kern.* 内核类型的所有级别日志 -存放到- /dev/console
*.info;mail.none;authpriv.none;cron.none /var/log/messages
所有的类别级别是info以上 除了mail,authpriv,cron (产生的日志太多,不易于查看)

类别 . 级别 #
authpriv.*   认证的信息-----> 存放----->   /var/log/secure
mail.*   邮件相关的信息-----> 存放----->   -/var/log/maillog
cron.*   计划任务相关的信息 -----> 存放----->   /var/log/cron
local7.*   开机时显示的信息-----> 存放------>  /var/log/boot.log

注:
- ”号: 邮件的信息比较多,现将数据存储到内存,达到一定大小,全部写到硬盘.有利于减少I/O进程的开销
数据存储在内存,如果关机不当数据消失

日志输入的规则

. info   #大于等于info级别的信息全部记录到某个文件
.=级别   # 仅记录等于某个级别的日志
例:.=info   #只记录info级别的日志
.! 级别  #除了某个级别意外,记录所有的级别信息
例.!err  #除了err外记录所有
.none  #指的是排除某个类别
例: mail.none   #所有mail类别的日志都不记录

实战-自定义ssh服务的日志类型和存储位置

1.vim /etc/rsyslog.conf #编辑日志配置文件在73行下,插入以下内容
local0.* /var/log/sshd.log

把local0类别的日志,保存到 /var/log/sshd.log路径

2.定义ssh服务的日志类别为local0,编辑sshd服务的主配置文件

 vim /etc/ssh/sshd_config

32行改下类别
改:32 SyslogFacility AUTHPRIV
为:32 SyslogFacility local0

3.先重启rsyslog服务(生效配置)

systemctl restart rsyslog

再重启sshd服务.生成日志

systemctl restart sshd

验证是否生成日志并查看其中的内容,

cat  /var/log/sshd.log   #说明修改成功

上面对就的信息:时间 主机 服务 进程ID 相关的信息

防止日志被删除
chattr +a /var/log/sshd.log #设置权限,只能增加不能删除删减。
lsattr /var/log/sshd.log #查看权限
这个功能看着很强大,其实不实用,因这样会让系统日志切割时报错,日志有时会太。最主的是,黑客可以取消这个属性。
chattr -a /var/log/sshd.log #取消权限

日志切割-搭建远程日志收集服务器logrotate 切割命令工具
在linux下的日志会定期进行滚动增加,我们可以在线对正在进行回滚的日志进行指定大小的切割(动态),如果这个日志是静态的。比如没有应用向里面写内容。那么我们也可以用split工具进行切割;其中Logrotate支持按时间和大小来自动切分,以防止日志文件太大。
logrotate配置文件主要有:
/etc/logrotate.conf 以及 /etc/logrotate.d/ 这个子目录下的明细配置文件。
logrotate的执行由crond服务调用的。
vim /etc/cron.daily/logrotate #查看logrotate脚本内容
logrotate程序每天由cron在指定的时间(/etc/crontab)启动
日志是很大的,如果让日志无限制的记录下去 是一件很可怕的事情,日积月累就有几百兆占用磁盘的空间,
如果你要找出某一条可用信息很难, 当日志达到某个特定的大小,我们将日志分类,之前的日志保留一个备份,再产生的日志创建一个同名的文件保存新的日志.

vim /etc/logrotate.conf


weekly : 每周执行回滚,或者说每周执行一次日志回滚
rotate: 表示日志切分后历史文件最多保存离现在最近的多少份 [rəʊˈteɪt] 旋转
create : 指定新创建的文件的权限与所属主与群组
dateext : 使用日期为后缀的回滚文件 #可以去/var/log目录下看看

其它参数说明:
monthly: 日志文件将按月轮循。其它可用值为 daily(天),‘weekly’(周)或者‘yearly’(年)。
rotate 5: 一次将存储5个归档日志。对于第六个归档,时间最久的归档将被删除。
compress: 在轮循任务完成后,已轮循的归档将使用gzip进行压缩。
delaycompress: 总是与compress选项一起用,delaycompress选项指示logrotate不要将最近的归档压缩,压缩将在下一次轮循周期进行。这在你或任何软件仍然需要读取最新归档时很有用。
missingok: 在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。
notifempty: 如果日志文件为空,轮循不会进行。
create 644 root: 以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件。
postrotate/endscript: 在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。在这种情况下,rsyslogd 进程将立即再次读取其配置并继续运行。
/var/lib/logrotate/status中默认记录logrotate上次轮换日志文件的时间。

使用 logrotate 进行ssh日志分割
vim /etc/logrotate.d/sshd #创建一个sshd日志切割配置文件
/var/log/sshd.log {
missingok
weekly
create 0600 root root
minsize 1M
rotate 3
}
systemctl restart rsyslog #重启日志服务
logrotate -d /etc/logrotate.d/sshd #预演,不实际轮循
logrotate -vf /etc/logrotate.d/sshd #强制轮循,也就是说即使轮循条件没有满足,也可以通过加-f强制让logrotate轮循日志文件

-v 显示指令执行过程
-f 强制执行

ls /var/log/sshd* #查看效果
配置远程日志服务器-实现日志集中的管理
server端配置
vim /etc/rsyslog.conf # 使用TCP协议方式,收集日志
改:19 #KaTeX parse error: Expected 'EOF', got '#' at position 22: …d imtcp 20 #̲InputTCPServerRun 514
为:
19 $ModLoad imtcp
20 $InputTCPServerRun 514
注:使用UDP协议速度快,不保证数据的完整,使用TCP协议可靠.完整
systemctl restart rsyslog #重新启动 rsyslog
netstat -anlpt| grep 514 #查看服务监听的状态:

setenforce 0 #关闭selinux功能
systemctl stop firewalld #关闭防火墙
iptables -F #清空防火墙规则

客户端配置
vim /etc/rsyslog.conf #在90行之后,插入

*.*   @@192.168.1.63:514

systemctl restart rsyslog.service #重启rsyslog服务
logger “aaaaa ” #发送模拟日志
tail -f /var/log/messages | grep dk --color #服务端动态查看日志

本文标签: 命令基础系统Linux