Linux运维基础

可紊 提交于 2020-02-07 01:51:35

一、远程连接排错

1.查看道路是否通畅

ip地址是什么:就是我们要找的服务器在哪里

公网IP地址:全世界的任何地方都能访问到

私网IP地址:也指内网,私有环境,只在当前环境中。比如:192.168.0.??? 或者 10.0.0.???

端口:用于连接不同的服务,常见端口SSHD-22(工作中必须要改,否则全世界的人都会连你)

桥接的三种模式:

NAT(皇帝-宰相-贫民)、桥接(皇帝-贫民)、仅主机模式(皇帝-贫民(无法连接外网))

如果连不上我们要查看什么?

路不通的原因

1、网卡是否运行且IP是否正确(主机IP是否和远程连接用的IP一样)

ifconfig eth0

2、DNS是否配置

cat /etc/sysconfig/network-scripts/ifcfg-eth0  查看网卡的配置是否配置DNS

cat /etc/resolv.conf 查看DNS中是否配置DNS

网卡的配置是优先于DNS中的

3、软件连接的配置

检查vm软件是否设置正确:
#1).vmware服务是否允许
win+r
services.msc
#2).vmware网络配置---编辑---虚拟网络编辑器

子网IP是否设置为10.0.0.0

4、计算机中的网络连接

VMware Network Adapter VMnet8配置的ip(静态,不要更改)和共享(不能打钩)
空格和tab键

ping 服务器ip地址
ping 10.0.0.200
 注:重新配置后,需要重启

2.是否有人打劫

SElinux和Iptables

3.查看是否提供服务

查看系统是否开启ssh进程:ps -ef |grep sshd

查看系统中开启了哪些端口:ss -lntup

不建议使用的命令,当高并发时,服务器连接多容易卡死(古老的命令):netstat -lntup |grep 22

查看端口是不是开启了:telnet

telnet 服务器ip地址 22
 [e:\~]$ telnet 10.0.0.200 22

4、Linux常用工具

[root@Dao ~]# yum install tree telnet nc nmap lrzsz dos2unix -y

telnet、nc、nmap查看端口是否开启

nc和telnet的用法是一样的
[root@Dao ~]# nc 10.0.0.200 22
^C
[root@Dao ~]# telnet 10.0.0.200 22
nmap的用法复杂一点[root@Dao ~]# nmap -p22 10.0.0.200

lrzsz:windows与linux互传文件

[root@Dao ~]# rz    上传
[root@Dao ~]# sz /etc/hosts   下载安装完这个软件后,上传的时候可以直接拖进去

dos2Linux,以后shell编程中讲解

二、关闭 SElinux

SELinux 主要由美国国家安全局开发

SElinux是限制root用户的权限的软件

临时关闭-重启服务器失效

[root@oldboyedu-01 ~]# #查询selinux状态
[root@oldboyedu-01 ~]# getenforce 
Enforcing

# 共3种状态

[root@oldboyedu-01 ~]# #enforcing   selinux正在运行
[root@oldboyedu-01 ~]# #permissive  selinux临时关闭 还是提示警告
[root@oldboyedu-01 ~]# #disabled    selinux彻底关闭

#临时关闭

[root@oldboyedu-01 ~]# setenforce
usage:  setenforce [ Enforcing | Permissive | 1 | 0 ]
[root@oldboyedu-01 ~]# setenforce 0
[root@oldboyedu-01 ~]# getenforce 
Permissive
[root@oldboyedu-01 ~]# 重启服务器,又会开启

永久关闭-重启服务器生效

需要使用vim修改/etc/selinux/config中的文件内容

[root@oldboyedu-01 ~]# vim /etc/selinux/config

# 然后查看

[root@oldboyedu-01 ~]# grep "=disabled" /etc/selinux/config 
SELINUX=disabled
[root@oldboyedu-01 ~]# grep "disabled" /etc/selinux/config 
#     disabled - No SELinux policy is loaded.
SELINUX=disabled

三、关闭Iptables

临时关闭

# 查询防火墙是否在运行 
/etc/init.d/iptables  status
[root@oldboyedu-01 ~]# /etc/init.d/iptables  stop  临时关闭iptables
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Unloading modules:                               [  OK  ]
[root@oldboyedu-01 ~]# /etc/init.d/iptables  stop
[root@oldboyedu-01 ~]# /etc/init.d/iptables  status 
iptables: Firewall is not running.

永久关闭

临时关闭后,开机还会自动启动
#如何让iptables在开机的时候 不自动启动
命令:chkconfig # 数字3 的状态是on 就表示开机启动
[root@oldboyedu-01 ~]# chkconfig |grep ipt  检查iptables 是否开机启动
iptables           0:off    1:off    2:on    3:on    4:on    5:on    6:off
[root@oldboyedu-01 ~]# chkconfig iptables off  关闭iptables的开机自启动
[root@oldboyedu-01 ~]# chkconfig |grep ipt
iptables           0:off    1:off    2:off    3:off    4:off    5:off    6:off

四、显示中文乱码的排查

1.什么是字符集?
######表示字符 文字的方法
UTF-8      万国码 系统默认的字符集
GBK GB2312 
2.如何查看系统的字符集
[root@oldboyedu-01 ~]# echo $LANG
en_US.UTF-8
[root@oldboyedu-01 ~]# #语言.字符集
3.如何修改字符集-临时
[root@oldboyedu-01 ~]# export   LANG=zh_CN.UTF-8
[root@oldboyedu-01 ~]# echo $LANG
zh_CN.UTF-8
4.如何修改字符集-永久
[root@oldboyedu-01 ~]# cat /etc/sysconfig/i18n 
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
5.生效 
[root@oldboyedu-01 ~]# source  /etc/sysconfig/i18n 
[root@oldboyedu-01 ~]# echo $LANG
en_US.UTF-8

乱码之后如何排查

#####1.查看中文乱码的原因******
####1)linux使用的字符集  echo $LANG
####2)远程连接工具使用的字符集 即Xshell中的(单击小地球就会显示,或者在文件-属性-终端中(最下面)会有显示)
####1) 与 2) 不同 就会导致乱码 
#####2.排查
####1)linux使用的字符集
####2)远程连接工具使用的字符集
#####3.解决 
####方法1 修改远程连接工具字符集 
####方法2 修改linux系统的字符集
####1.如何修改字符集-临时
####2.如何修改字符集-永久
####3.生效

五、查看系统版本

[root@luffy-01 /]# cat /etc/redhat-release 
CentOS release 6.9 (Final)
[root@luffy-01 /]# uname -m
x86_64
[root@luffy-01 /]# uname -r
2.6.32-696.el6.x86_64
[root@luffy-01 /]# uname -a
Linux luffy-01 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

一般不使用 -a ,因为信息太长,不需要看这么多

六、Linux核心目录简介

1./bin - 重要的二进制 (binary) 应用程序


包含二进制文件,系统的所有用户使用的命令都在这个目录下。

2./boot - 启动 (boot) 配置文件


包含引导加载程序相关的文件,系统引导程序+系统的内核

3./dev - 设备 (device) 文件


包含设备文件,包括终端设备,USB或连接到系统的任何设备。

4./etc - 配置文件、启动脚本等 (etc)

包含所有程序所需的配置文件,也包含了用于启动/停止单个程序的启动和关闭shell脚本。

5./home - 本地用户主 (home) 目录

所有用户用home目录来存储他们的个人档案

6./lib - 系统库 (libraries) 文件

包含支持位于/bin和/sbin下的二进制文件的库文件。

7./lost+found - 在根 (/) 目录下提供一个遗失+查找(lost+found) 系统

必须在root用户下才可以查看当前目录下的内容。

8./media - 挂载可移动介质 (media),诸如 CD、数码相机等

用于挂载可移动设备的临时目录

9./mnt - 挂载 (mounted) 文件系统

临时安装目录,系统管理员可以挂载文件系统

10./opt - 提供一个供可选的 (optional) 应用程序安装目录

包含从各个厂商的附加应用程序,附加的应用程序应该安装在/opt或者/opt的子目录下。

11./proc - 特殊的动态目录,用以维护系统信息和状态,包括当前运行中进程 (processes) 信息。

包含系统进程的相关信息,是一个虚拟的文件系统,包含有关正在运行的进程的信息,系统资源以文本信息形式存在。

为了解决一切皆文件

12./root - root (root) 用户主文件夹,读作“slash-root”

 

13./sbin - 重要的系统二进制 (system binaries) 文件

也是包含的二进制可执行文件。在这个目录下的linux命令通常都是由系统管理员使用的,对系统进行维护。

14./sys - 系统 (system) 文件

虚拟的目录

15./tmp - 临时(temporary)文件

包含系统和用户创建的临时文件。当系统重启时,这个目录下的文件将都被删除

16./usr - 包含绝大部分所有用户(users)都能访问的应用程序和文件

包含二进制文件,库文件。文档和二级程序的源代码

17./var - 经常变化的(variable)文件,诸如日志或数据库等

代表变量文件。在这个目录下可以找到内容可能增长的文件

七、etc目录

1、网卡的配置文件

setup命令的本质就是修改这个文件

--/etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0                                ###网卡的名字
HWADDR=00:0c:29:1e:67:61                   #@@hardware address硬件地址 MAC地址
TYPE=Ethernet                              ###互联网  
UUID=3405d22b-1aab-45a5-b57f-c0d005e4f269  ###UUID 系统中唯一的标识
ONBOOT=yes                                 #@@booton 在重启的时候是否开启网卡(自动运行)
NM_CONTROLLED=yes                          ###是否能被network软件进行管理
BOOTPROTO=none                             #@@网卡获取ip地址的方式
#none/static ip地址是固定的,服务器的IP如果是动态的,可就乱了
#dhcp        自动获取ip地址
IPADDR=10.0.0.200                          #@@ ip address ip地址
NETMASK=255.255.255.0                      ### 子网掩码 局域网内最多能有多少机器
GATEWAY=10.0.0.2                           #@@ 网关 默认的出口
USERCTL=no                                 ### 是否准许普通用户管理网卡 开 关 重启
PEERDNS=yes                                ### 网卡的配置优先于DNS
DNS1=223.5.5.5                             #@@
DNS2=223.6.6.6                             #@@

2、DNS域名解析系统

把使用的域名转换为ip地址

常见的DNS服务器

###阿里云的DNS
#223.5.5.5
#223.6.6.6

###114
#114.114.114.114
#114.114.115.115

###谷歌
#8.8.8.8

常见的DNS有关的错误

ERROR 6 - "Couldn't resolve host 'mirrorlist.centos.org'"
错误       无法     解析    域名  mirrorlist.centos.org

[root@oldboyedu-01 ~]# yum  install  tree
Loaded plugins: fastestmirror, security
Setting up Install Process
Loading mirror speeds from cached hostfile
Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=6&arch=x86_64&repo=os&infra=stock error was
14: PYCURL ERROR 6 - "Couldn't resolve host 'mirrorlist.centos.org'"
Error: Cannot find a valid baseurl for repo: base


ERROR 6 - "Couldn't resolve host 'mirrorlist.centos.org'"
错误       无法     解析    域名  mirrorlist.centos.org
           无法解析域名##linux无法上网
1.ping www.baidu.com   #是否能上网

2.ping 223.5.5.5       #DNS是否有问题

[root@oldboyedu-01 ~]# ping www.baidu.com
ping: unknown host www.baidu.com
      未知的   域名
[root@oldboyedu-01 ~]# ping 223.5.5.5
PING 223.5.5.5 (223.5.5.5) 56(84) bytes of data.
64 bytes from 223.5.5.5: icmp_seq=1 ttl=128 time=50.7 ms
64 bytes from 223.5.5.5: icmp_seq=2 ttl=128 time=50.4 ms
64 bytes from 223.5.5.5: icmp_seq=3 ttl=128 time=49.9 ms
64 bytes from 223.5.5.5: icmp_seq=4 ttl=128 time=49.8 ms
64 bytes from 223.5.5.5: icmp_seq=5 ttl=128 time=50.3 ms
^C
--- 223.5.5.5 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4810ms
rtt min/avg/max/mdev = 49.840/50.257/50.744/0.416 ms
[root@oldboyedu-01 ~]# #1.有问题
[root@oldboyedu-01 ~]# #2.ping通畅
[root@oldboyedu-01 ~]# #DNS有问题


##如何修改DNS
####1.在网卡配置文件中添加上
DNS1=223.5.5.5
DNS2=223.6.6.6

[root@oldboyedu-01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=00:0c:29:1e:67:61
TYPE=Ethernet
UUID=3405d22b-1aab-45a5-b57f-c0d005e4f269
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=10.0.0.200
NETMASK=255.255.255.0
GATEWAY=10.0.0.2
USERCTL=no
PEERDNS=yes
IPV6INIT=no
DNS1=223.5.5.5
DNS2=223.6.6.6

###2.网卡的配置生效-重启网卡

#####重启某一个网卡
ifdown eth0 && ifup eth0

#####重启所有网卡
/etc/init.d/network restart

网卡配置小结:
1.屌丝逃离洗浴中心之路
2.如何修改DNS
3.IPADDR,GATEWAY,ONBOOT,BOOTPROTO,DNS1,DNS2

配置DNS

--/etc/resolv.conf

##网卡配置文件里面的DNS优先于 /etc/resolv.conf
##配置DNS都在网卡里面配置

3、修改主机名

--/etc/sysconfig/network
#######第一个里程碑-查看当前的主机名
[root@oldboyedu-01 ~]# hostname
oldboyedu-01


#######第二个里程碑-临时修改主机名-重启服务器之后失效
[root@oldboyedu-01 ~]# hostname oldboyedu01-nb
[root@oldboyedu-01 ~]# hostname
oldboyedu01-nb


#######第三个里程碑-永久修改主机名-重启服务器之后生效
[root@oldboyedu01-nb ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=oldboyedu01-nb

 #######最后一步:让主机名能解析(ping主机名可以畅通)

[root@Dao ~]# ping $(hostname)

vim /etc/hosts

添加10.0.0.200  Linux_dao(你的hostname)

新学一个快捷键:esc + .  使用上一个命令的最后一个

4、HOST文件

--/etc/hosts 

ip地址与域名解析关系  对主机名进行解析

作用:
在网站需要更新之前,把地址配置到本地的虚拟环境中,而不是真实的


##上线之前需要进行测试-www.jd.com www.baidu.com  www.oldboyedu.com
##真实访问的时候 www.baidu.com ---->通过ping 得到 119.75.216.20
###在测试的时候 下单---www.jd.com www.baidu.com 这就成了真的下单,东西过几天就送到了你的手上
####想办法把 www.jd.com www.baidu.com 解析到 10.0.0.200(测试机器)

 

在文件中添加设置
10.0.0.200  www.baidu.com www.jd.com 
##进行测试

 

win中的host文件
/etc/hosts
C:\Windows\System32\drivers\etc\hosts

5、开机的时候自动挂载的文件

--/etc/fstab       开机的时候给每个磁盘分区开一个入口


#第一列 --表示设备/分区
#第二列 --表示入口/目录/挂载点

df -h 查看系统磁盘的大小和使用情况

blkid 查看 设备详细列表

6、开机的时候自动运行的文件

--/etc/rc.local    需要开机自启动的软件/命令/服务放在这个文件中
Startup
如何让一个软件/脚本/服务开机自动运行?
1./etc/rc.local                 # 服务器运行软件的清单
2.通过chkconfig管理      # 开机自启动

7、开机的时候运行级别的配置文件

--/etc/inittab 
#init tab(table)


######       1.linux运行级别讲解
0     关机状态,不要把运行级别设置为0
1     单用户模式 root用户密码忘记了
2     多用户模式,但是没有NFS
3     完全的多用户模式,命令模式,文本模式
4     未使用
5     X11,桌面模式,图形化界面模式
6     重启状态,不要把运行级别设置为6
######     2.如何查看当前运行级别
[root@oldboyedu01-nb ~]# runlevel
N 3
[root@oldboyedu01-nb ~]# #                  N                                            3
[root@oldboyedu01-nb ~]# #上一次使用的运行级别     当前系统的运行级别
######     3.如何切换运行级别-临时
[root@oldboyedu01-nb ~]# #上一次使用的运行级别     当前系统的运行级别
[root@oldboyedu01-nb ~]# init 5
[root@oldboyedu01-nb ~]# runlevel
3 5
######     4.如何永久修改运行级别-重启生效
[root@oldboyedu01-nb ~]# tail -1 /etc/inittab
id:3:initdefault:


小结:
1.0-6含义
2.如何查看
3.如何修改 临时 永久

8、服务管理的命令

Linux放置命令的地方有哪些?

--/etc/init.d/

9、系统环境变量 别名

--/etc/profile


#PS1 PATH
#LANG==>/etc/sysconfig/i18n  单独放置

10、别名

--/etc/bashrc  正统存放别名的地方

######国法(全国各地生效)
/etc/profile     系统环境变量 别名   √√√√√---常用
/etc/bashrc      别名


######家规(地方政策 当前用户生效)
~/.bashrc       
~/.bash_profile

~ 表示当前用户的家目录
root   ~ ===== /root
oldboy ~ ===== /home/oldboy

11、编译安装的软件默认的位置

/usr/local


C:\Program Files ---------windows安装软件默认的位置


Linux下面安装软件安装的3种方法
1.yum   (自动解决安装依赖的软件)  点外卖-你缺少什么外面给你解决
yum   install  tree

yum   install  tree   -y

2.rpm    (缺啥少啥自己解决)         速冻水饺-半成品-缺少的东西自己解决

3.编译安装                              自己做饭
  买菜切菜---------炒菜-----上菜
  ./configure-------make----make install
[root@oldboyedu01-nb ~]# ##查看软件是否安装成功
[root@oldboyedu01-nb ~]# rpm -qa |grep tree
tree-1.5.3-3.el6.x86_64

/usr/share   另一个安装软件的地方,主要是系统文档,了解一下

12、系统日志

系统默认日志信息

#######/var/log/messages

系统用户的登录信息
#######/var/log/secure   (谁 什么时候 从哪里登录的 是否成功)

grep   “Failed Password”  /var/log/secure  从登陆信息日志中获取是否有人在尝试破解密码

13、虚拟目录proc

--/proc/meminfo    内存信息


[root@oldboyedu01-nb ~]# free
             total       used       free     shared    buffers     cached
Mem:       3908500     386300    3522200        236      39192     165944
-/+ buffers/cache:     181164    3727336
Swap:       786428          0     786428
[root@oldboyedu01-nb ~]# free -h
             total       used       free     shared    buffers     cached
Mem:          3.7G       377M       3.4G       236K        38M       162M
-/+ buffers/cache:       176M       3.6G
Swap:         767M         0B       767M


--/proc/cpuinfo 查看cpu信息

 

lscpu    显示CPU信息


--/proc/loadavg 系统的负载


负载:系统的繁忙程度
最近1分钟 最近5分钟 最近15分钟 平均负载
[root@oldboyedu01-nb ~]# w
22:20:05 up 12:18,  4 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    10.0.0.1         19:16    2:08m  0.18s  0.18s -bash
root     pts/1    10.0.0.1         11:03    3:02m  0.06s  0.06s -bash
root     pts/2    10.0.0.1         20:32    1.00s  0.18s  0.07s w
root     pts/4    10.0.0.1         20:18    2:01m  0.03s  0.03s -bash
#系统的负载接近系统cpu的核心数量   表示cpu越忙


--/proc/mounts 显示系统挂载信息


df –h        查看磁盘空间的使用情况,人类可读
findmnt  相似于   cat /proc/mounts

八、Linux分区的几种方案

通用方法/boot    引导分区 200M      swap     交换分区 内存的1.5倍(内存小于8G)  大于8G 给8G/        根分区   剩下多少给多少数据非常重要/bootswap/        50-200G/data    剩下多少给多少不知道数据是否重要/bootswap/        50-200G剩余的空间 不分配留着.

九、Linux之文件属性

文件属性是什么?

[root@luffy_boy-001 /]# ls -lhi /etc/hosts
129822 -rw-r--r--. 2 root root 198 Jan 11  2019 /etc/hosts

文件属性就是 ls  -lhi 命令输出结果每一列的含义

l   list one file per line
i   --inode   print the index number of each file
h  --human-readable       with -l, print sizes in human readable format
                               (e.g., 1K 234M 2G)
129822      # inode号码
-           # 文件类型
rw-r--r--.  # 文件的权限.(.与selinux有关)
2           # 文件硬链接数量
root        # 主人
root        # 家人
198         # 文件大小
Jan  11 2019    # 最后修改时间
/etc/hosts      # 文件名不是文件的属性

inod和block简介

我们从获得一个硬盘,到可以向硬盘中存放数据,都经历了哪些阶段?

做一个比喻,把硬盘比作房子的话。

有房子----------------->买了个硬盘

划分隔断-------------->分区

装修-不同风格-------->格式化创建文件系统

安装门窗--------------->挂载

住人--------------------->存数据

inode

1、inode的含义

用来存放文件属性的空间

我们通过iNode号码来找到这个空间

inode号码----家庭住址
inode空间----家

文件名不存放在inode中。

2、inode怎么出来的

通过格式化创建文件系统,得到

3、inode的特点

  1. inode存放文件属性
  2. 存放block的位置(指向block的指针)
  3. 创建一个文件要占用一个inode
  4. inode节点号相同的文件,互为硬链接文件,可以认为是一个文件的不同入口
  5. inode在某一个文件系统(分区),是唯一的

4、怎么使用inode和查看

[root@luffy_boy-001 /]# df -i (系统里面inode用了多少,剩余多少)
Filesystem     Inodes IUsed  IFree IUse% Mounted on
/dev/sda3      462384 55433 406951   12% /
tmpfs          488562     1 488561    1% /dev/shm
/dev/sda1       51200    39  51161    1% /boot
/dev/sr0            0     0      0     - /mnt
[root@luffy_boy-001 /]# df -ih (-h人类可读)
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/sda3        452K   55K  398K   12% /
tmpfs            478K     1  478K    1% /dev/shm
/dev/sda1         50K    39   50K    1% /boot
/dev/sr0            0     0     0     - /mnt
[root@luffy_boy-001 /]# ls -ilh (查看某些文件的inode)
total 122K
143585 drwxr-xr-x.   3 root root 4.0K Jan 12  2019 app
    29 dr-xr-xr-x.   2 root root 4.0K Jan 10  2019 bin
     2 dr-xr-xr-x.   5 root root 1.0K Jan 10  2019 boot
143562 drwxr-xr-x.   2 root root 4.0K Jan 10  2019 data
143552 drwxr-xr-x.   3 root root 4.0K Jan 10  2019 data_bak
     4 drwxr-xr-x.  20 root root 3.7K Jan 10  2019 dev
129795 drwxr-xr-x.  78 root root 4.0K May 20 01:08 etc
    30 drwxr-xr-x.   3 root root 4.0K Jan 11  2019 home

block

1、block的含义

 数据块,实际存放数据的位置

2、block是怎么来的

也是格式化创建文件系统

3、block的特点

  1. block是实际存放数据的位置
  2. block 默认4k(centos 6.x) 1k 8k
  3. 创建大文件会占用多个block,如果文件很小1k,4k剩余的空间会被浪费。
  4. 创建一个非空文件要占用一个inode和至少1个block
  5. 每读取一个block就会消耗一次磁盘I/O(input/output 磁盘读写)。

4、怎么使用和查看

[root@luffy_boy-001 /]# df -h  (查看磁盘block使用情况)
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       6.9G  1.5G  5.1G  22% /
tmpfs           1.9G     0  1.9G   0% /dev/shm
/dev/sda1       190M   40M  141M  22% /boot
/dev/sr0        3.7G  3.7G     0 100% /mnt
[root@luffy_boy-001 /]# ls -lh  
total 122K
drwxr-xr-x.   3 root root 4.0K Jan 12  2019 app
dr-xr-xr-x.   2 root root 4.0K Jan 10  2019 bin
dr-xr-xr-x.   5 root root 1.0K Jan 10  2019 boot
drwxr-xr-x.   2 root root 4.0K Jan 10  2019 data
drwxr-xr-x.   3 root root 4.0K Jan 10  2019 data_bak
drwxr-xr-x.  20 root root 3.7K Jan 10  2019 dev

oldboyfile寻宝

经典案例:磁盘空间不足

no space left on device磁盘空间不足-因为block满了。
seq 100000000 >/tmp/big
#第一个里程碑-看看到底哪里满了
[root@oldboyedu01-nb ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       8.8G  8.8G     0 100% /
tmpfs           1.9G     0  1.9G   0% /dev/shm
/dev/sda1       190M   40M  141M  22% /boot

#第二个里程碑-是哪一个目录占得空间大,最终定位到目录或文件
[root@oldboyedu01-nb ~]#
[root@oldboyedu01-nb ~]# du -sh /*|grep G
1.1G    /usr
7.4G    /var
[root@oldboyedu01-nb ~]# du -sh /var/*|grep G
7.3G    /var/log
[root@oldboyedu01-nb ~]# du -sh /var/log/*|grep G
7.3G    /var/log/messages
[root@oldboyedu01-nb ~]# ls -lh /var/log/messages
-rw------- 1 root root 7.3G Oct 16 19:20 /var/log/messages
#第三个里程碑-问清楚是否可以删除,然后在操作。

 【Y】企业案例:如果向磁盘写入数据提示如下错误:No space left on device(磁盘空间不足),通过df -h查看磁盘空间,发现没满,请问可能原因是什么?企业场景什么情况下会导致这个问题发生?
inode用光了。

模拟环境的命令。
mkdir -p /app/logs
dd if=/dev/zero of=/dev/sdc bs=8K  count=10
ls -l /dev/sdc
mkfs.ext4 /dev/sdc

mount -o loop /dev/sdc /app/logs


[root@oldboyedu01-nb ~]# cd /app/logs/
[root@oldboyedu01-nb logs]# touch stu{1..6}.log
touch: cannot touch `stu6.log': No space left on device
[root@oldboyedu01-nb logs]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       8.8G  1.6G  6.9G  19% /
tmpfs           1.9G     0  1.9G   0% /dev/shm
/dev/sda1       190M   40M  141M  22% /boot
/dev/sdc         73K   14K   55K  21% /app/logs
[root@oldboyedu01-nb logs]# df -i
Filesystem     Inodes IUsed  IFree IUse% Mounted on
/dev/sda3      593344 58530 534814   10% /
tmpfs          488562     1 488561    1% /dev/shm
/dev/sda1       51200    39  51161    1% /boot
/dev/sdc           16    16      0  100% /app/logs

解决办法:删除一些不需要的文件,释放一些inode

linux文件类型和扩展名

常见文件类型的种类

- f    file           普通文件
  d   directory  目录
   l   softlink     软链接(快捷方式)

普通文件的分类

普通文件 都显示的是 - ,但是也是有区别的,怎么查看不同类型的普通文件呢? 
[root@oldboyedu01-nb ~]# ls -l /tmp/etc.tar.gz  /bin/ls /etc/hosts
-rwxr-xr-x. 1 root root  117048 Mar 23  2017 /bin/ls
-rw-r--r--. 2 root root     200 Sep 25 20:19 /etc/hosts
-rw-r--r--  1 root root 9744299 Oct 20  2017 /tmp/etc.tar.gz
用file 查看文件详细类型
##二进制文件  命令
[root@oldboyedu01-nb ~]# file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped

##文本文件
[root@oldboyedu01-nb ~]# file /etc/hosts
/etc/hosts: ASCII text

##数据文件 data
[root@oldboyedu01-nb ~]# file /tmp/etc.tar.gz
/tmp/etc.tar.gz: gzip compressed data, from Unix, last modified: Fri Oct 20 01:36:16 2017

Linux下面的扩展名

windows     windows下通过扩展名区分不同类型的文件。
linux           扩展名是用来给我们自己看的。就算手动修改或者添加了扩展名,他的文件类型还是不会改变

# 创建压缩包文件
[root@luffy_boy-001 ~]# tar zcf /oldbo_y.txt /oldboy/alex.txt 
tar: Removing leading `/' from member names
# 查看文件
[root@luffy_boy-001 ~]# cat /oldboy.txt           
 Dz Y@P²'PؽF;MpM񵬨)´ê½吾43e¹ࠊ𯐭R·ڝ¡o𵮙sṅsL±ȵ¯gՐºµ¯࠿؃󿾟}Ꮅ"(
# 查看压缩包文件
[root@luffy_boy-001 ~]# tar tf /oldboy.txt 
oldboy/alex.txt

linux有以下常见的扩展名

.sh     脚本文件

.conf  配置文件

Linux里面用户角色分类

整体对于一个文件/目录来说:用户可以分为3类
主人         所有者的名字

家人         所有者属于的组的名字

陌生人

[root@oldboyedu01-nb tmp]# ll -hi /etc/hosts
390174 -rw-r--r--. 2 root root 200 Sep 25 20:19 /etc/hosts

假设我是pizza用户,如何查询我与这个文件有什么关系?

[root@luffy_boy-001 ~]# id pizzauid=500(pizza) gid=500(pizza) groups=500(pizza)
#id查询用户信息
#属于哪个用户组

linux中存在于系统中的用户如何分类

linux中存在于系统中的用户如何分类
UID   user  id 用户的id号码=====身份证号码    √√√√√
GID   group id 用户组的id号码===户口本的号码



                     UID
1.皇帝 root            0


2.傀儡 虚拟用户        1-499   系统中每个进程要有一个对应的用户,无法使用的.


3.贫民百姓 普通用户     500+


如何保护皇帝root
1.禁止root远程登录
2.修改ssh默认的端口号22
3.定期分析/var/log/secure 记录着用户的登录信息


#与用户有关的文件

/etc/passwd     存放的是用户的信息

/etc/shadow     用户密码的信息
/etc/group      用户组的信息

/etc/passwd

root  :x:0  :0  :root:/root       :/bin/bash
oldboy:x:500:500:    :/home/oldboy:/bin/bash
第一列:用户名字
第二列:存放密码的地方
第三列:UID
第四列:GID
第五列:用户的说明信息,默认为空
第六列:用户的家目录

~
root     ~  /root
oldboy   ~  /home/oldboy

第七列:用户使用的shell,用户使用的命令解释器

/bin/bash--------centos默认的命令解释器
/sbin/nologin----用户无法登陆系统,相当于是傀儡用户

Linux基础权限(9位权限)介绍

r    4   read可以读取文件内容
w   2   write修改文件内容
x    1   execute可以运行文件(命令 脚本)
-    0   什么权限都没有

[root@luffy_boy-001 ~]# ls -l
total 40
-rw-------. 1 root root  1061 Jan 10  2019 anaconda-ks.cfg
-rw-r--r--. 1 root root 21736 Jan 10  2019 install.log

# 权限的显示,和查看方法,分割成三部分
# rw-   ---   ---
# rw-   r--   r--
# 主人   家人  陌生人 420  000  000 420  400  400  6    0  0  6    4  4[root@oldboyedu01-nb ~]# ls -l /bin/ls-rwxr-xr-x. 1 root root 117048 Mar 23  2017 /bin/ls 421401401 7  5  5

软链接--相当于win的快捷方式

也叫作,符号链接

如何创建软链接

[root@luffy_boy-001 oldboy]# ln -s alex.txt alex.txt-soft
[root@luffy_boy-001 oldboy]# ll
total 36
-rw-r--r--. 1 root root    0 Jan 10  2019 alex.txt
lrwxrwxrwx. 1 root root    8 May 20 23:02 alex.txt-soft -> alex.txt

软链接的特点

1、存放着源文件的位置

2、源文件被删除,软链接会找不到原链接,并失效,显示为红色,并闪动

3、节约时间

硬链接

相当于,超市的前后门,通过不同的大门进入超市

在同一个分区中,两个文件或多个文件的inode号码相同,这些文件互为硬链接

如何创建硬链接

[root@luffy_boy-001 oldboy]# ln alex.txt alex.txt-hard
[root@luffy_boy-001 oldboy]# ll
total 44
-rw-r--r--. 2 root root    4 May 20 23:04 alex.txt
-rw-r--r--. 2 root root    4 May 20 23:04 alex.txt-hard
lrwxrwxrwx. 1 root root    8 May 20 23:02 alex.txt-soft -> alex.txt观察到硬链接数量由 1 变成了 2 

硬链接的特点

1.相当于是超市的前后门,硬链接数量就是超市一共有多少门
2.删除硬链接或源文件,文件还是可以使用的
3.把硬链接和源文件都删除,文件被删除====>硬链接数量为0

软链接和硬链接的区别

描述linux下软链接和硬链接的区别
解答:
 1) 如何创建:
    a)默认不带参数情况下,ln命令创建的是硬链接,带-s参数的ln命令创建的是软链接。
 2) 含义:
    a)硬链接文件与源文件的inode节点号相同,而软链接文件相当于windows下面的快捷方式(inode节点号与源文件不同)    b)硬链接主要用来防止误删,因为备份会占大量空间
 3) 特点:
    a)不能对目录创建硬链接,但可以创建软链接,对目录的软链接会经常被用到
    b)软链接可以跨文件系统,硬链接不可以跨文件系统。

 4) 怎么没的(源文件,软链接,硬链接与删除)
   a)删除软链接文件,对源文件及硬链接文件无任何影响;
   b)删除文件的硬链接文件,对源文件及软链接文件无任何影响;
   c)删除链接文件的源文件,对硬链接文件无影响,会导致其软链接失效(红底白字闪烁状);
   d)删除源文件及其硬链接文件,整个文件才会被"真正"的删除。

文件删除原理

什么情况,才是文件被删除了?

1、硬链接数为0,使用rm

2、进程调用数为0

3、当某个文件没有被彻底删除,会导致磁盘空间满了,因为只删除了硬链接数,而一直有进程调用,这个文件会越来越大

4、如何解决:查找机器自身的服务,然后重启apache和tomcat

 

模拟问题

模拟思路
向/var/log/secure 追加8亿行
seq 800000000
#首先收到报警
[root@oldboyedu01-nb oldboy]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       8.8G  8.8G     0 100% /
tmpfs           1.9G     0  1.9G   0% /dev/shm
/dev/sda1       190M   40M  141M  22% /boot
/dev/sdc         73K   14K   55K  21% /app/logs

#正常的排错过程。
[root@oldboyedu01-nb oldboy]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       8.8G  8.8G     0 100% /
tmpfs           1.9G     0  1.9G   0% /dev/shm
/dev/sda1       190M   40M  141M  22% /boot
/dev/sdc         73K   14K   55K  21% /app/logs
[root@oldboyedu01-nb oldboy]# du -sh /* |grep G
du: cannot access `/proc/2904/task/2904/fd/4': No such file or directory
du: cannot access `/proc/2904/task/2904/fdinfo/4': No such file or directory
du: cannot access `/proc/2904/fd/4': No such file or directory
du: cannot access `/proc/2904/fdinfo/4': No such file or directory
1.1G    /usr
7.4G    /var
[root@oldboyedu01-nb oldboy]# du -sh /var/* |grep G
7.3G    /var/log
[root@oldboyedu01-nb oldboy]# du -sh /var/log/* |grep G
7.3G    /var/log/secure
[root@oldboyedu01-nb oldboy]# \rm -f /var/log/secure

#磁盘空间满了
[root@oldboyedu01-nb oldboy]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       8.8G  8.8G     0 100% /
tmpfs           1.9G     0  1.9G   0% /dev/shm
/dev/sda1       190M   40M  141M  22% /boot
/dev/sdc         73K   14K   55K  21% /app/logs
[root@oldboyedu01-nb oldboy]# du -sh /* |grep G
du: cannot access `/proc/2914/task/2914/fd/4': No such file or directory
du: cannot access `/proc/2914/task/2914/fdinfo/4': No such file or directory
du: cannot access `/proc/2914/fd/4': No such file or directory
du: cannot access `/proc/2914/fdinfo/4': No such file or directory
1.1G    /usr
占用空间明明很小,空间却满了
这就是因为,系统中某个文件没有被彻底删除。
如何找出硬链接数量为0,进程调用数不为0
lsof 显示系统中所有的文件
[root@oldboyedu01-nb oldboy]# lsof |grep delete
rsyslogd  1250      root    2w      REG                8,3 7803924480     130420 /var/log/secure (deleted)

软件名称                                                   文件大小              文件名

 (deleted)---标记 这个文件的硬链接数量为0,进程调用数不为0。


##重启对应的服务
[root@oldboyedu01-nb oldboy]# /etc/init.d/rsyslog restart
Shutting down system logger:                               [  OK  ]
Starting system logger:                                    [  OK  ]
[root@oldboyedu01-nb oldboy]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       8.8G  1.6G  6.9G  19% /
tmpfs           1.9G     0  1.9G   0% /dev/shm
/dev/sda1       190M   40M  141M  22% /boot
/dev/sdc         73K   14K   55K  21% /app/logs


磁盘空间不足-no space left on device
1.block满了正常-500G 存放505G视频
2.inode满了,大量的小文件
3.block 硬链接数量为0 进程调用数不为零  文件没有被彻底删除磁盘空间不足

磁盘空间不足问题小结(no space left on device)

1.block满了正常-500G 存放505G视频
2.inode满了,大量的小文件
3.block 硬链接数量为0 进程调用数不为0 ,文件没有被彻底删除磁盘空间不足

 

排查:

 

Linux文件属性之时间

3种
mtime   modified  time 文件的修改时间             文件内容的变化时间
ctime    change   time 文件属性的改变时间       硬链接数量 文件大小 文件权限
atime   access    time 文件的访问时间              cat

十、Linux之权限

如何知道你有什么权限

我能干什么?这是我最关心的问题!

切换到普通用户

[root@luffy-01 ~]# su - pizza
[pizza@luffy-01 ~]$ ls /root
ls: cannot open directory /root: Permission denied
[pizza@luffy-01 ~]$ rm -f /etc/passwd
rm: cannot remove `/etc/passwd': Permission denied  无权限,无法操作

1、看看你是谁

whoami

[pizza@luffy-01 ~]$ whoami
pizza

2、你与至个文件有什么关系

是 主人,家人,还是陌生人

先查看文件

[pizza@luffy-01 ~]$ ls -l  /oldboy/alex.txt
-rw-r--r--. 2 root root 19 Jan 15 11:33 /oldboy/alex.txt

id  查看身份======>groups,查看是不是和文件的主人是一家子

[pizza@luffy-01 ~]$ iduid=500(pizza) gid=500(pizza) groups=500(pizza)[pizza@luffy-01 ~]$ id rootuid=0(root) gid=0(root) groups=0(root)

结果:文件属于root家族,pizza是这个文件的陌生人,pizza的权限是9位权限的最后3位r--

权限的计算

r======4
w      2
x      1
-      0

-rw-------
 420000000
 6  0  0

-rw-r--r--
 420400400
 6  4  4

drwxr-xr-x
 421401401
 7  5  5

修改权限

chmod ===change mode

  1]使用数字的方法修改权限
  chmod 755 oldboy.txt

  2]使用字符
主人  家人    陌生人
user  group   other
u     g       o

[root@oldboyedu01-nb oldboy]# ls -l oldboy.txt
-rw-r--r--. 2 root root 252 Oct 18 09:10 oldboy.txt
[root@oldboyedu01-nb oldboy]# chmod u+x oldboy.txt  添加执行权限
[root@oldboyedu01-nb oldboy]# ls -l oldboy.txt
-rwxr--r--. 2 root root 252 Oct 18 09:10 oldboy.txt
[root@oldboyedu01-nb oldboy]# chmod u-x oldboy.txt   去除x权限
[root@oldboyedu01-nb oldboy]# ls -l oldboy.txt
-rw-r--r--. 2 root root 252 Oct 18 09:10 oldboy.txt
[root@oldboyedu01-nb oldboy]# chmod u=x oldboy.txt   先清空,再添加
[root@oldboyedu01-nb oldboy]# ll oldboy.txt
---xr--r--. 2 root root 252 Oct 18 09:10 oldboy.txt
[root@oldboyedu01-nb oldboy]# chmod u=rwx oldboy.txt
[root@oldboyedu01-nb oldboy]# ll oldboy.txt
-rwxr--r--. 2 root root 252 Oct 18 09:10 oldboy.txt
 3]给文件添加上执行权限
chmod +x oldboy.txt === chmod ugo+x oldboy.txt  === chmod a+x oldboy.txt

 4]修改文件的所有者和所属用户组
chown  change owner

[root@oldboyedu01-nb oldboy]# ls -l oldboy.txt
-rwxr-xr-x. 2 root root 252 Oct 18 09:10 oldboy.txt
[root@oldboyedu01-nb oldboy]# chown oldboy.oldboy oldboy.txt
[root@oldboyedu01-nb oldboy]# ll oldboy.txt
-rwxr-xr-x. 2 oldboy oldboy 252 Oct 18 09:10 oldboy.txt
[root@oldboyedu01-nb oldboy]#
[root@oldboyedu01-nb oldboy]#
[root@oldboyedu01-nb oldboy]#
[root@oldboyedu01-nb oldboy]# chown root oldboy.txt
[root@oldboyedu01-nb oldboy]# ll oldboy.txt
-rwxr-xr-x. 2 root oldboy 252 Oct 18 09:10 oldboy.txt
[root@oldboyedu01-nb oldboy]#
[root@oldboyedu01-nb oldboy]# chown root.root oldboy.txt
[root@oldboyedu01-nb oldboy]# ll oldboy.txt
-rwxr-xr-x. 2 root root 252 Oct 18 09:10 oldboy.txt
[root@oldboyedu01-nb oldboy]# chown oldboy.oldboy oldboy.txt
[root@oldboyedu01-nb oldboy]# ll oldboy.txt
-rwxr-xr-x. 2 oldboy oldboy 252 Oct 18 09:10 oldboy.txt

对于文件来说,rwx权限的含义

准备环境

mkdir -p /oldboy
echo -e 'hostname\npwd' >/oldboy/alex.sh
chown oldboy.oldboy /oldboy/alex.sh
ll /oldboy/alex.sh
root用户
oldboy用户

前提:对于普通非root用户

root用户下面修改 r权限

[root@luffy-01 ~]# chown oldboy.oldboy /oldboy/alex.sh
[root@luffy-01 ~]# ll /oldboy/alex.sh
-rw-r--r-- 1 oldboy oldboy 13 Jan 15 23:23 /oldboy/alex.sh
[root@luffy-01 ~]# chmod u=r /oldboy/alex.sh
[root@luffy-01 ~]# ll /oldboy/alex.sh
-r--r--r-- 1 oldboy oldboy 13 Jan 15 23:23 /oldboy/alex.sh

oldboy用户下验证

[oldboy@luffy-01 ~]$ ll /oldboy/alex.sh
-r--r--r-- 1 oldboy oldboy 13 Jan 15 23:23 /oldboy/alex.sh  # 可读[oldboy@luffy-01 ~]$ cat /oldboy/alex.shhostnamepwd
[oldboy@luffy-01 ~]$ echo 'ls -ld /root' >>/oldboy/alex.sh #没有写入权限
-bash: /oldboy/alex.sh: Permission denied
[oldboy@luffy-01 ~]$ /oldboy/alex.sh  # 没有执行权限
-bash: /oldboy/alex.sh: Permission denied

root下面修改 w

chown: invalid user: `u=w'
[root@luffy-01 ~]# chmod u=w /oldboy/alex.sh

oldboy用户下面验证

[oldboy@luffy-01 ~]$ ll /oldboy/alex.sh
--w-r--r-- 1 oldboy oldboy 13 Jan 15 23:23 /oldboy/alex.sh
[oldboy@luffy-01 ~]$ cat /oldboy/alex.sh
cat: /oldboy/alex.sh: Permission denied
[oldboy@luffy-01 ~]$ echo 'ls -ld /root' >>/oldboy/alex.sh
[oldboy@luffy-01 ~]$ /oldboy/alex.sh
-bash: /oldboy/alex.sh: Permission denied
[oldboy@luffy-01 ~]$ cat /oldboy/alex.sh
cat: /oldboy/alex.sh: Permission denied

写进去了,却不能查看,那就是然并卵了

用VIM进去,什么也看不了,写入后,提示只读权限,

退出后vim后,在root用户下查看,显示的是已经被修改的内容。

所以,只有w权限是没什么用的

小结:

1.r读取文件内容
2.w修改文件的内容,但是需要r的配合
  没有r配合强制修改退出,会清空文件的内容

root下面修改 x

[root@luffy-01 ~]# ll /oldboy/alex.sh
---xr--r-- 1 oldboy oldboy 26 Jan 15 23:44 /oldboy/alex.sh

更改为x权限会变成绿色

oldboy用户下面验证

[oldboy@luffy-01 ~]$ ll /oldboy/alex.sh
---xr--r-- 1 oldboy oldboy 26 Jan 15 23:44 /oldboy/alex.sh
[oldboy@luffy-01 ~]$ echo 'w' >> /oldboy/alex.sh
-bash: /oldboy/alex.sh: Permission denied
[oldboy@luffy-01 ~]$ /oldboy/alex.sh
bash: /oldboy/alex.sh: Permission denied

运行不了

加上r权限

[oldboy@luffy-01 ~]$ ll /oldboy/alex.sh
-r-xr--r-- 1 oldboy oldboy 26 Jan 15 23:44 /oldboy/alex.sh
[oldboy@luffy-01 ~]$ /oldboy/alex.sh
luffy-01
/home/oldboy
dr-xr-x---. 2 root root 4096 Jan 15 15:00 /root可以运行了

小结:

对于文件来说rwx小结:
     1.r读取文件内容
     2.w修改文件的内容,但是需要r的配合
       没有r配合强制修改退出,会清空文件的内容
     3.x权限执行,需要r权限的配合

目录权限详解

  r 查看目录里面的内容,    ls
  w 可以在目录里面创建      删除 重命名文件
  x 可以进入(cd)到这个目录

创建环境

mkdir -p /oldboy/alexdir
chown oldboy.oldboy /oldboy/alexdir
touch    /oldboy/alexdir/luffy{01..5}.txt

root下修改目录权限r

[root@luffy-01 oldboy]# ll -d alexdir/    加-d是为了把目录当做文件对待,否则就是查看目录里面的内容了
drwxr-xr-x 2 oldboy oldboy 4096 Jan 16 00:03 alexdir/
[root@luffy-01 oldboy]# chmod u=r alexdir/
[root@luffy-01 oldboy]# ll -d alexdir/
dr--r-xr-x 2 oldboy oldboy 4096 Jan 16 00:03 alexdir/

oldboy下验证

[oldboy@luffy-01 oldboy]$ ls -ld alexdir/
dr--r-xr-x 2 oldboy oldboy 4096 Jan 16 00:03 alexdir/
[oldboy@luffy-01 oldboy]$ ls -l alexdir/
ls: cannot access alexdir/luffy01.txt: Permission denied
ls: cannot access alexdir/luffy05.txt: Permission denied
ls: cannot access alexdir/luffy04.txt: Permission denied
ls: cannot access alexdir/luffy02.txt: Permission denied
ls: cannot access alexdir/luffy03.txt: Permission denied
total 0
-????????? ? ? ? ?            ? luffy01.txt
-????????? ? ? ? ?            ? luffy02.txt
-????????? ? ? ? ?            ? luffy03.txt
-????????? ? ? ? ?            ? luffy04.txt
-????????? ? ? ? ?            ? luffy05.txt
[oldboy@luffy-01 oldboy]$ ls alexdir/
ls: cannot access alexdir/luffy01.txt: Permission denied
ls: cannot access alexdir/luffy05.txt: Permission denied
ls: cannot access alexdir/luffy04.txt: Permission denied
ls: cannot access alexdir/luffy02.txt: Permission denied
ls: cannot access alexdir/luffy03.txt: Permission denied
luffy01.txt  luffy02.txt  luffy03.txt  luffy04.txt  luffy05.txt

无法看到文件的详细信息

root下加入x权限

[oldboy@luffy-01 oldboy]$ ls alexdir/
luffy01.txt  luffy02.txt  luffy03.txt  luffy04.txt  luffy05.txt
[oldboy@luffy-01 oldboy]$ ls -l alexdir/
total 0
-rw-r--r-- 1 root root 0 Jan 16 00:03 luffy01.txt
-rw-r--r-- 1 root root 0 Jan 16 00:03 luffy02.txt
-rw-r--r-- 1 root root 0 Jan 16 00:03 luffy03.txt
-rw-r--r-- 1 root root 0 Jan 16 00:03 luffy04.txt
-rw-r--r-- 1 root root 0 Jan 16 00:03 luffy05.txt

可以查看了

小结:

1.对于目录来说 r表示 查看目录里面内容的权限,ls  需要x配合
2.没有x权限,那么显示的时候文件的属性无法显示

root下修改目录的w

[root@luffy-01 oldboy]# chmod u=w alexdir/[root@luffy-01 oldboy]# ls -ld alexdir/d-w-r-xr-x 2 oldboy oldboy 4096 Jan 16 00:03 alexdir/

oldboy下验证

[oldboy@luffy-01 oldboy]$ ll alexdir/
ls: cannot open directory alexdir/: Permission denied
[oldboy@luffy-01 oldboy]$ touch alexdir/txt.txt
touch: cannot touch `alexdir/txt.txt': Permission denied
[oldboy@luffy-01 oldboy]$ rm alexdir/luffy01.txt
rm: cannot remove `alexdir/luffy01.txt': Permission denied

各种操作都不行

添加x权限

[oldboy@luffy-01 oldboy]$ ll alexdir/
ls: cannot open directory alexdir/: Permission denied
[oldboy@luffy-01 oldboy]$ ll alexdir/ -d
d-wxr-xr-x 2 oldboy oldboy 4096 Jan 16 00:03 alexdir/
[oldboy@luffy-01 oldboy]$ touch alexdir/txt.txt

可以添加和删除了,但是无法查看目录

小结;

1.w表示 可以在目录中创建 删除文件 重命名文件权限
2.只有w无法删除 创建文件,w需要x配合

root下修改x

[root@luffy-01 oldboy]# chmod u=x alexdir/
[root@luffy-01 oldboy]# ls -ld alexdir/
d--xr-xr-x 2 oldboy oldboy 4096 Jan 16 00:22 alexdir/

oldboy下面验证

[oldboy@luffy-01 oldboy]$ cd alexdir/
[oldboy@luffy-01 alexdir]$ ll
ls: cannot open directory .: Permission denied

总结:

           文件                    目录
   r    读取文件的内容           查看目录的内容(需要x权限)
   w    修改文件的内容(需要r)    在目录下面创建 删除文件(需要x权限)
   x    执行文件(需要r)          进入到目录的权限(cd)

!!!!!!删除一个文件,要看你对这个文件所在的目录是否有wx权限。

网站整体权限规划

Linux 系统默认权限(默认的,比较安全的)

对于文件来说

所有者、家庭、隔壁老王======>rw- r- - r--  644

对于目录来说

所有者、家庭、隔壁老王======>rwx r-x r-x  755

文件或者目录的所有者

root root

网站比较安全的权限

blog.youxiaodao.com

网站程序放在/app/blog目录下面

#0.网站需要被运行起来,通过一个傀儡用户运行起来的www


#1.blog目录下面
 file 644  dir  755  root root

#2.blog目录下面
 /app/blog/ndd.jpg
 /app/blog/snow.jpg
 /app/blog/budongde.avi
 /app/blog/上传/lwang.jpg
 /app/blog/上传/lzhang.avi

 blog/上船  file644 dir755  www www

小结:

 1.网站是通过傀儡用户运行的www
 2.网站用户上传目录,file 644 dir 755 www www
 3.除了上传目录之外 file 644 dir 755 root root

Linux控制系统默认权限的命令umask

[root@luffy-01 oldboy]# umask
0022

[oldboy@luffy-01 alexdir]$ umask
0002

文件的最大的权限 666
目录的最大的权限 777

那么,0022 和666/777有什么关系呢?

####umask 022

#umask
##根据umask计算文件的默认权限
##666
#-022    减去022
#=644

##根据umask计算目录的默认权限
##777
#-022   
#=755


####umask 032

##根据umask计算文件的默认权限
##666
#-032
#=634
#+010   遇到奇数 +1
 =644



##根据umask计算目录的默认权限
##777
#-032
#=745



[root@online01 oldboy]# touch file032
[root@online01 oldboy]# mkdir dir032
[root@online01 oldboy]# ls -ld *032
drwxr--r-x. 2 root root 4096 Nov  8 05:22 dir032
-rw-r--r--. 1 root root    0 Nov  8 05:22 file032


根据umask计算出系统默认的权限规则
1.对于目录 777直接减去umask
2.对于文件 666减去umask的值,如果umask某一位上面是奇数,减完umask之后奇数位需要+1

umask的修改

[oldboy@luffy-01 alexdir]$ umask 032
[oldboy@luffy-01 alexdir]$ umask
0032

文件系统的属性

[oldboy@luffy-01 alexdir]$ lsattr txt.txt 
-------------e- txt.txt查看系统属性,或者叫做隐藏的属性共有9个,常用的有两个a和i

文件系统属性中的a和i

[root@online01 ~]# #a=====append 只能追加
[root@online01 ~]# #i=====immutable 无敌的 不可修改的
[root@online01 ~]# lsattr oldboy.txt
-------------e- oldboy.txt
[root@online01 ~]# chattr +a oldboy.txtchattr授予文件或者目录隐藏的权限+a 或者 -a
[root@online01 ~]# lsattr oldboy.txt
-----a-------e- oldboy.txt

[root@online01 ~]# cat oldboy.txt
hello.txt
[root@online01 ~]# echo hello >>oldboy.txt
[root@online01 ~]# echo hello >>oldboy.txt
[root@online01 ~]# cat oldboy.txt
hello.txt
hello
hello
[root@online01 ~]# echo hello >oldboy.txt
-bash: oldboy.txt: Operation not permitted
[root@online01 ~]# rm -f oldboy.txt
rm: cannot remove `oldboy.txt': Operation not permitted
[root@online01 ~]# mv oldboy.txt  /tmp/
mv: cannot move `oldboy.txt' to `/tmp/oldboy.txt': Operation not permitted



[root@online01 ~]# echo hello >>oldboy.txt
-bash: oldboy.txt: Permission denied
[root@online01 ~]# echo hello >oldboy.txt
-bash: oldboy.txt: Permission denied
[root@online01 ~]# rm -f oldboy.txt
rm: cannot remove `oldboy.txt': Operation not permitted
[root@online01 ~]# mv oldboy.txt  /tmp/
mv: cannot move `oldboy.txt' to `/tmp/oldboy.txt': Operation not permitted

Linux特殊权限

suid setuid ------password命令

S s -rws r-x r-x

作用:运行某一个命令的时候相当于这个命令的所有者(root)

设置方法:chmod u+s /bin/rm 或者 chmod 4755 /bin/rm

危险:所有用户运行命令的时候都相当于是root

例子:passwd命令

看一下设置s属性后的文件权限信息

[root@luffy-01 oldboy]# chmod u+s /bin/cat
[root@luffy-01 oldboy]# ll /bin/cat
-rwsr-xr-x. 1 root root 48568 Mar 23  2017 /bin/cat
[root@luffy-01 oldboy]# stat /bin/cat
  File: `/bin/cat'
  Size: 48568         Blocks: 96         IO Block: 4096   regular file
Device: 803h/2051d    Inode: 13599       Links: 1
Access: (4755/-rwsr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2019-01-15 08:42:00.072999999 +0800
Modify: 2017-03-23 02:52:45.000000000 +0800
Change: 2019-01-16 01:31:49.911687040 +0800

权限变成了4 755

sticky粘滞位---1777 /tmp目录

特点:

1、任何用户都可以在这个目录里面创建文件(原来的权限是777)

2、每个人只能管理自己的文件,其他人处理不了

[root@luffy-01 oldboy]# stat /tmp/
  File: `/tmp/'
  Size: 4096          Blocks: 8          IO Block: 4096   directory
Device: 803h/2051d    Inode: 12          Links: 3
Access: (1777/drwxrwxrwt)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2019-01-15 17:29:10.881710386 +0800
Modify: 2019-01-15 15:28:55.581985449 +0800
Change: 2019-01-15 15:28:55.581985449 +0800

sgid locate

运行这个命令的时候,相当于这个命令的家人

总结

1、Linux权限体系    1.rwx是啥    2.rwx对应的数字 及计算方法 rwxr-xr-x    3.chmod 命令的使用     4.对于文件来说r w x 是什么含义 *****    5.对于目录来说r w x 是什么含义 *****    6.网站权限-通过控制权限让网站安全    7.linux系统默认权限控制命令umask    8.文件系统属性(文件属性)前面的知识总结1、正则总结2、特殊符合总结
无分类系列 $   !   |   #
引号系列 $()  `` ''  ""
重定向系列 >  >> 2>  2>> <  <<
位置系列 ~ . ..
判断系列 && ||

3.第三关练习题-取出ip地址 权限

4.使用三剑客进行过滤grep sed awk
如何使用三剑客命令过滤出文件中以oldboy开头的行(文件名是oldboy.txt,至少3种方法)
5.修改时间 linux快捷键  vi/vim快捷键
6.文件还有目录权限 rwx含义
7.网站权限-通过控制权限让网站安全
8.linux系统默认权限控制命令umask
9.文件系统属性(文件属性)
10.linux无法上网
11.无法远程连接服务器
进阶知识:
安装和使用lrzsz htop

十一、Linux命令进阶

绝对路径,相对路径

绝对路径  从根开始的路径 -精确定位
        /data
        /etc/hosts
相对路径  不从根开始的路径
          容易 迷路

漏斗家族

1、标准输出 执行正确的内容才会通过漏斗

#>   1>    标准输出重定向  先把文件的内容清空   把内容放在文件的最后一行
#>>  1>>   追加重定向      把内容放在文件的最后一行

2、< 输入重定向

# 支持的命令很少
echo 1 2 3 4 5 >/data/num.txt 
[root@oldboyedu-01 ~]# cat /data/num.txt 
1 2 3 4 5

[root@oldboyedu-01 ~]# xargs -n2 </data/num.txt 
1 2
3 4
5为什么要用xargsecho ‘--help’ |catecho ‘--help’ |xargs cat参考:https://www.cnblogs.com/wangqiguo/p/6464234.html

3、<< 追加输入重定向

cat >>/data/oldboy.txt<<EOF
I
am 
studying 
linux 
EOF

复制cp

###3.4 把oldboy.txt拷贝(复制)到/tmp下。
#copy ----cp  三个参数:-r 递归的复制  -p 复制的时候保持原素性不变  -a 复制所有 相当于-pdr
[root@oldboyedu-01 ~]# cp /data/oldboy.txt /tmp/
[root@oldboyedu-01 ~]# ls -l /tmp/
total 4
-rw-r--r--. 1 root root 140 Sep 20 01:29 oldboy.txt
-rw-------. 1 root root   0 Sep 18 15:40 yum.log

备份cp

# 操作前备份 操作后检查
# 备份就是 复制需要被分的文件,然后给文件加上后缀
[root@oldboyedu-01 ~]# cp /data/oldboy.txt /data/oldboy.txt.bak
[root@oldboyedu-01 ~]# ls -l /data/oldboy.txt
-rw-r--r--. 1 root root 140 Sep 20 01:12 /data/oldboy.txt
[root@oldboyedu-01 ~]# ls -l /data/
total 12
-rw-r--r--. 1 root root  10 Sep 20 01:15 num.txt
-rw-r--r--. 1 root root 140 Sep 20 01:12 oldboy.txt
-rw-r--r--. 1 root root 140 Sep 20 01:31 oldboy.txt.bak

复制整个目录cp -r

-r 递归的复制整个目录

[root@oldboyedu-01 ~]# cp /data/   /tmp/
cp: omitting directory `/data/'----忽略这个命令,Linux很多命令没办法直接处理目录

-r  复制整个目录及目录下的内容

[root@oldboyedu-01 ~]# cp -r /data/ /tmp/
[root@oldboyedu-01 ~]# ls -l /tmp/
total 8
drwxr-xr-x. 2 root root 4096 Sep 20 01:35 data
-rw-r--r--. 1 root root  140 Sep 20 01:29 oldboy.txt
-rw-------. 1 root root    0 Sep 18 15:40 yum.log

移动mv

题目: 把 /data 移动到 /root目录下面
#移动----搬家---move-mv
[root@oldboyedu-01 ~]# mv /data/ /root/
[root@oldboyedu-01 ~]# ls -l /root/
total 40
-rw-------. 1 root root  1052 Sep 18 15:44 anaconda-ks.cfg
drwxr-xr-x. 2 root root  4096 Sep 20 01:31 data
-rw-r--r--. 1 root root 21736 Sep 18 15:44 install.log
-rw-r--r--. 1 root root  5890 Sep 18 15:43 install.log.syslog
[root@oldboyedu-01 ~]# ls -l /data 
ls: cannot access /data: No such file or directory

删除rm –r  -rf

###3.6 进入/root目录下的data目录,删除oldboy.txt文件
[root@oldboyedu-01 tmp]# rm data/
rm: cannot remove `data/': Is a directory默认无法直接删除目录

[root@oldboyedu-01 tmp]# rm -r data 使用-r删除目录
rm: descend into directory `data'? y   
rm: remove regular file `data/oldboy.txt'? n
rm: remove regular file `data/.oldboy.txt.swp'? n
rm: remove regular file `data/num.txt'? n
rm: remove regular file `data/oldboy.txt.bak'? n
rm: remove directory `data'? n

[root@oldboyedu-01 tmp]# rm -rf data/     -rf 强制删除
[root@oldboyedu-01 tmp]# ls -l
total 4
-rw-r--r--. 1 root root 140 Sep 20 01:29 oldboy.txt
-rw-------. 1 root root   0 Sep 18 15:40 yum.log

查找命令find

找出你想要的东西再删除

##find命令
[root@oldboyedu-01 tmp]# find /root/ -type f -name "oldboy.txt"
/root/data/oldboy.txt
[root@oldboyedu-01 tmp]# #find /root/ -type f -name "oldboy.txt"
[root@oldboyedu-01 tmp]# #find 在哪里找 找什么类型的  找什么名字

type

-type  找什么类型的
       f ----file 文件
       d---- directory 目录

管道 |

用来传递数据

| 和 xargs 是黄金搭档

[root@oldboyedu-01 tmp]# find /root/ -type f -name "oldboy.txt"|xargs ls -l
-rw-r--r--. 1 root root 0 Sep 20 02:27 /root/data/oldboy.txt

*

找出以.txt结尾的文件-用*

[root@oldboyedu-01 tmp]# find /root/  -type f  -name "*.txt"
/root/data/oldboy.txt
/root/data/num.txt

目录跳转cd

返回上一级

题目:退出到上一级目录删除data目录。(原来在/root/data)
[root@oldboyedu-01 ~]# cd /root/data/
[root@oldboyedu-01 data]# pwd
/root/data

cd .. 和cd../../../

[root@oldboyedu-01 data]# cd ..
[root@oldboyedu-01 ~]# pwd
/root

[root@oldboyedu-01 ~]# #进入当前目录的上一级目录 
[root@oldboyedu-01 ~]# cd ..
[root@oldboyedu-01 /]# cd ../../../
[root@oldboyedu-01 ~]# rm data/  -fr   把危险的参数放在后面
[root@oldboyedu-01 ~]# ls data 
ls: cannot access data: No such file or directory

注意:一个点指当前目录,不用与cd,配合其他命令,指当前目录

过滤命令

题目: 已知文件test.txt内容
oldboy
test
lidao
请给出输出test.txt文件内容时,不包含oldboy字符串的命令。
创建测试文件:
mkdir /data
cat >/data/test.txt<<EOF
test
liyao
oldboy
EOF

#方法1-grep -v

[root@oldboyedu-01 ~]# cd /data/
[root@oldboyedu-01 data]# cat test.txt 
test
liyao
oldboy
[root@oldboyedu-01 data]# #过滤 在文件中找到你想要的内容
[root@oldboyedu-01 data]# grep   "oldboy"      test.txt 
oldboy
[root@oldboyedu-01 data]# grep   "ol"      test.txt 
oldboy
[root@oldboyedu-01 data]# #排除
[root@oldboyedu-01 data]# grep -v   "oldboy"      test.txt 
test
liyao

#方法2-head取前几行

[root@oldboyedu-01 data]# head test.txt 
test
liyao
oldboy
[root@oldboyedu-01 data]# head -n2 test.txt 
test
liyao
[root@oldboyedu-01 data]# head -2 test.txt 
test
liyao

tail取最后几行

[root@oldboyedu-01 data]# tail test.txt 
test
liyao
oldboy
[root@oldboyedu-01 data]# tail -2 test.txt 
liyao
oldboy
[root@oldboyedu-01 data]# tail -1 test.txt 
oldboy

#方法3-awk 配合’!/oldboy/’

[root@oldboyedu-01 data]# awk '/oldboy/' test.txt 
oldboy
[root@oldboyedu-01 data]# grep "oldboy" test.txt 
oldboy
[root@oldboyedu-01 data]# grep -v "oldboy" test.txt   
test
liyao
[root@oldboyedu-01 data]# awk '!/oldboy/' test.txt 
test
liyao

[root@oldboyedu-01 data]# #awk中 !表示取反 非

#方法4-sed(替换) 配合’/opldoy/d’

[root@oldboyedu-01 data]# sed '/oldboy/d' test.txt 
test
liyao

无文件存在的排错


无文件存在用ls一层一层排错

##3.9 请用一条命令完成创建目录/oldboy/test,即创建/oldboy目录及/oldboy/test

[root@oldboyedu-01 data]# mkdir /oldboy/test
mkdir: cannot create directory `/oldboy/test': No such file or directory


No such file or directory错误排查过程
1.ls 命令一层一层查看
2.查看每一层目录/文件是否存在

创建多层目录mkdir -p

[root@oldboyedu-01 data]# mkdir -p /oldboy/test 
[root@oldboyedu-01 data]# ls /oldboy/
test
[root@oldboyedu-01 data]# ls -l /oldboy/
total 4
drwxr-xr-x. 2 root root 4096 Sep 25 10:28 test使用:mkdir -pv 查看命令每一步的操作注意:在word文档中的- ,复制到命令行中会出错

关于Linux别名

即给命令设置一个昵称
##小名 昵称 爱称 外号
为什么会有别名
###1.防止运行危险命令******
###2.省事 简化命令

我们总会遇到:提示你是否覆盖?   是否删除?


#为何我们执行cp的时候就相当于cp -i
#为何我们执行rm的时候就相当于rm -i

题目:已知/tmp下已经存在test.txt文件,如何执行命令才能把/mnt/test.txt拷贝到/tmp下覆盖掉/tmp/test.txt,而让系统不提示是否覆盖(root权限下)。

[root@oldboyedu-01 data]# cp /mnt/test.txt  /tmp/
cp: overwrite `/tmp/test.txt'? ^C

如何直接跳过这个提示

#方法1 撬棍

[root@oldboyedu-01 data]# \cp /mnt/test.txt  /tmp/

#方法2 使用命令的绝对路径 全路径

[root@oldboyedu-01 data]# which cp  先找到命令的路径
alias cp='cp -i'
    /bin/cp
[root@oldboyedu-01 data]# which mkdir 
/bin/mkdir
[root@oldboyedu-01 data]# ls -l /bin/cp 
-rwxr-xr-x. 1 root root 122896 Mar 23  2017 /bin/cp
[root@oldboyedu-01 data]# /bin/cp /mnt/test.txt /tmp/

怎么设置Linux别名-alias命令

###第一个里程碑-查看系统中的别名

[root@oldboyedu-01 data]# alias rm cp mv
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'



###第二个里程碑-模仿

#执行rm命令的时候提示 do not use rm 
root@oldboyedu-01 data]# echo do not use rm
do not use rm
[root@oldboyedu-01 data]# alias rm='echo do not use rm'
[root@oldboyedu-01 data]# alias rm
alias rm='echo do not use rm'
[root@oldboyedu-01 data]# rm /tmp/test.txt 
do not use rm /tmp/test.txt
[root@oldboyedu-01 data]# rm -f /tmp/test.txt 
do not use rm -f /tmp/test.txt
[root@oldboyedu-01 data]# rm -fr /tmp/test.txt 
do not use rm -fr /tmp/test.txt


###第三个里程碑-永久生效

#/etc/profile
#vim 快捷键
##移动光标到文件的最后一行                             G
##移动光标到文件的  第一行                             gg
##在光标所在位置的下一行插入一个空行 并进入编辑模式    o(小写字母)
[root@oldboyedu-01 ~]# tail -1 /etc/profile
alias rm='echo do not use rm'
让命令生效
[root@oldboyedu-01 ~]# source /etc/profile   会用到source命令生效的很少。
[root@oldboyedu-01 ~]# alias rm
alias rm='echo do not use rm'


###第四个里程碑-填坑

编辑 /root/.bashrc
把 alias rm='rm -i'这一行前面加上一个注释## 非要删除就使用撬棍或者绝对路径

生成序列seq

seq 100 >/oldboy/ett.txt

显示指定行sed、head+tail、awk、grep

题目3.11 只查看ett.txt文件(共100行)内第20到第30行的内容
###方法1-sed

[root@oldboyedu-01 ~]# #sed 默认输出 sed命令会把文件的内容 默认都显示出来
[root@oldboyedu-01 ~]# sed -n '20p' /oldboy/ett.txt 
20
[root@oldboyedu-01 ~]# sed -n '20,30p' /oldboy/ett.txt 
20
21
22
23
24
25
26
27
28
29
30


###方法2-head + tail 

[root@oldboyedu-01 ~]# head -30 /oldboy/ett.txt |tail -11
20
21
22
23
24
25
26
27
28
29
30


###方法3-awk 

[root@oldboyedu-01 ~]# awk 'NR==20' /oldboy/ett.txt 
20
#NR表示行号
#== 表示等于
[root@oldboyedu-01 ~]# awk 'NR==20,NR==30' /oldboy/ett.txt 
[root@oldboyedu-01 ~]# sed -n '20,30p' /oldboy/ett.txt 


###方法4-grep

[root@oldboyedu-01 ~]# grep "20" /oldboy/ett.txt 
20
[root@oldboyedu-01 ~]# #文件的内容 ====等于这一行的行号
[root@oldboyedu-01 ~]# grep -A10 "20" /oldboy/ett.txt   A显示20以及下面的10行
20
21
22
23
24
25
26
27
28
29
30

查找文件Find 与 替换sed

题目:把/oldboy目录及其子目录下所有以扩展名 .sh结尾的文件中,文件包含oldboy的字符串全部替换为oldgirl 
创建测试环境:
mkdir -p /oldboy/test
cd /oldboy
echo "oldboy">test/del.sh
echo "oldboy">test.sh
echo "oldboy">t.sh
touch oldboy.txt
touch alex.txt


#第一个里程碑-找出你要的文件

[root@oldboyedu-01 oldboy]# find /oldboy/ -type f 
/oldboy/t.sh
/oldboy/oldboy.txt
/oldboy/test.sh
/oldboy/test/del.sh
/oldboy/ett.txt
/oldboy/alex.txt
[root@oldboyedu-01 oldboy]# find /oldboy/ -type f -name "*.sh"
/oldboy/t.sh
/oldboy/test.sh
/oldboy/test/del.sh


#第二个里程碑-oldboy替换为oldgirl 处理一个文件

[root@oldboyedu-01 oldboy]# cat /oldboy/t.sh 
oldboy
[root@oldboyedu-01 oldboy]# #sed 's#找谁#替换为什么#g'   /oldboy/t.sh 
[root@oldboyedu-01 oldboy]# #替换
[root@oldboyedu-01 oldboy]# sed  's#oldboy#oldgirl#g'   /oldboy/t.sh 
oldgirl
[root@oldboyedu-01 oldboy]# cat /oldboy/t.sh   默认是无法修改文件的,除了vim
oldboy
[root@oldboyedu-01 oldboy]# #sed修改文件的内容   用 -i
[root@oldboyedu-01 oldboy]# sed -i 's#oldboy#oldgirl#g'   /oldboy/t.sh  
[root@oldboyedu-01 oldboy]# cat /oldboy/t.sh 
oldgirl


#第三个里程碑-把find命令找到的文件交给sed命令处理

[root@oldboyedu-01 oldboy]# find /oldboy/ -type f -name "*.sh"
/oldboy/t.sh
/oldboy/test.sh
/oldboy/test/del.sh
[root@oldboyedu-01 oldboy]# find /oldboy/ -type f -name "*.sh"|xargs ls -l
-rw-r--r--. 1 root root 7 Sep 25 11:59 /oldboy/test/del.sh
-rw-r--r--. 1 root root 7 Sep 25 11:59 /oldboy/test.sh
-rw-r--r--. 1 root root 8 Sep 25 12:08 /oldboy/t.sh
[root@oldboyedu-01 oldboy]# find /oldboy/ -type f -name "*.sh"|xargs sed 's#oldboy#oldgirl#g'
oldgirl
oldgirl
oldgirl
[root@oldboyedu-01 oldboy]# find /oldboy/ -type f -name "*.sh"|xargs sed 's#oldboy#oldgirl#g' -i
[root@oldboyedu-01 oldboy]# find /oldboy/ -type f -name "*.sh"|xargs cat 
oldgirl
oldgirl
oldgirl

 

Linux系统的启动过程

1.开机自检 BIOS
2.MBR引导
3.GRUB菜单
4.加载内核
5.运行init进程
6.从/etc/inittab读取运行级别
7.根据/etc/rc.sysinit 初始化系统(设置主机名 设置ip)
8.根据运行级别启动对应的软件(开机自启动软件)
9.运行mingetty显示登录界面

 

PATH环境变量

什么是环境变量

1、大写

2、在系统大部分地方都可以使用,含义相同

3、常见的环境变量

LANG     PATH    PS1

PATH含义

路径-存放的是Linux命令的位置/路径

[root@luffy_boy-001 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin # 用冒号分割
[root@luffy_boy-001 ~]# echo $LANG
en_US.UTF-8

linux下面运行命令过程

1、输入命令

2、在PATH里面 进行查找

3、找到了就运行,找不到就提示:command not found

查看目录

如何过滤出已知当前目录下oldboy中的所有一级目录(提示:不包含oldboy目录下面目录的子目录及隐藏目录,即只能是第一级目录)?

##创建环境
mkdir /oldboy -p
cd /oldboy
mkdir ext/oldboy test xiaodong xiaofan xingfujie -p
touch jeacen oldboy wodi.gz yingsui.gz
##方法1-tree
yum install  tree -y
[root@oldboyedu43-lnb oldboy]# tree -Ld 1
.
├── ext
├── test
├── xiaodong
├── xiaofan
└── xingfujie

5 directories

##方法2-find
[root@oldboyedu43-lnb oldboy]# find  -maxdepth 1 -type d   把-maxdepth放在前面,否则会有警告信息
.
./xingfujie
./test
./xiaodong
./xiaofan
./ext


[root@oldboyedu43-lnb oldboy]# find  -maxdepth 1 -type d  -name "."
.
[root@oldboyedu43-lnb oldboy]# find  -maxdepth 1 -type d ! -name "."
./xingfujie
./test
./xiaodong
./xiaofan
./ext


##方法3-grep
[root@oldboyedu43-lnb oldboy]# ls -l |grep "以d开头的行"
[root@oldboyedu43-lnb oldboy]# ls -l |grep "^d"
drwxr-xr-x  3 root root 4096 Dec 15 00:26 ext
drwxr-xr-x. 2 root root 4096 Dec 11 21:22 test
drwxr-xr-x  2 root root 4096 Dec 15 00:26 xiaodong
drwxr-xr-x  2 root root 4096 Dec 15 00:26 xiaofan
drwxr-xr-x  2 root root 4096 Dec 15 00:26 xingfujie

^  高级货色(三剑客使用) 正则表达式 以.....开头的行

##方法4-awk

[root@oldboyedu43-lnb oldboy]# ls -l |awk '第2列大于1'
awk: 第2列大于1
awk: ^ invalid char '奠in expression
[root@oldboyedu43-lnb oldboy]# ls -l |awk '$2>1'
total 32
drwxr-xr-x  3 root root 4096 Dec 15 00:26 ext
drwxr-xr-x. 2 root root 4096 Dec 11 21:22 test
drwxr-xr-x  2 root root 4096 Dec 15 00:26 xiaodong
drwxr-xr-x  2 root root 4096 Dec 15 00:26 xiaofan
drwxr-xr-x  2 root root 4096 Dec 15 00:26 xingfujie
这种方法其实是不准确的,了解一下

##方法5-ls
[root@oldboyedu43-lnb oldboy]# ls -F|grep "/"
ext/
test/
xiaodong/
xiaofan/
xingfujie/
[root@oldboyedu43-lnb oldboy]# #-F 给不通类型的文件 加上不通的标记/尾巴


##方法6-ls
ls -ld */
## 查看某个软件包里面有什么
[root@luffy_boy-001 oldboy]# rpm -ql tree
/usr/bin/tree
/usr/share/doc/tree-1.5.3
/usr/share/doc/tree-1.5.3/LICENSE
/usr/share/doc/tree-1.5.3/README
/usr/share/man/man1/tree.1.gz查看某个软件是否安装rpm -qa |grep tree

跳转目录

 如何快速的回到 上一次所在的位置/目录

 cd -   快速回到上一次的位置。- 相当于 环境变量

cd  -  #cd $OLDPWD
cd  -  #如何快速的回到 上一次所在的位置
cd  .  #当前目录
        复制/移动
cd  .. #进入当前目录的上级目录
cd  ~  #进入当前目录的家目录 回老家
cd     #进入当前目录的家目录 回老家

查找最近跟新的文件

一个目录中有很多文件(ls查-看时好多屏),想最快速度查看到最近更新的文件。如何看?

[root@luffy_boy-001 etc]# ls -lrtt 按时间排序r 逆序

实时查看日志内容的实时跟新

调试系统服务时,希望能实时查看系统日志/var/log/messages 的更新,如何做?

#1、重新打开一个窗口
[root@luffy_boy-001 etc]# tail -f /var/log/messages tailf   ==== tail -f   一样的

查找文件内容以及行号

三剑客sed、grep、awk都能过滤,但是在过滤方面还是grep的比较快一些

sed跟擅长替换,修改文本内容

awk擅长取行,取列

打印配置文件nginx.conf的内容的行号以及内容,该如何做?

打造环境

echo stu{01..10} |xargs -n1 >nginx.conf

###方法1
[root@oldboyedu-39-nb oldboy]# cat -n nginx.conf
     1    stu1
     2    stu2
     3    stu3
     4    stu4
     5    stu5

###方法2 vi /vim
:set nu   #显示行号
:set nonu #取消显示行号


###方法3 grep

[root@oldboyedu-39-nb oldboy]# grep -n "." nginx.conf
1:stu1
2:stu2
3:stu3
4:stu4
5:stu5

####. 正则表达式里面的  表示任意一个字符

###方法4 sed
[root@oldboyedu-39-nb oldboy]# sed '=' nginx.conf |xargs -n2
1 stu1
2 stu2
3 stu3
4 stu4
5 stu5


###方法5 awk
[root@oldboyedu-39-nb oldboy]# awk '显示行号' nginx.conf
awk: 显示行号
awk: ^ invalid char '?in expression
[root@oldboyedu-39-nb oldboy]# awk '{print NR}' nginx.conf
1
2
3
4
5
[root@oldboyedu-39-nb oldboy]# awk '{print NR,$0}' nginx.conf
1 stu1
2 stu2
3 stu3
4 stu4
5 stu5

###方法6
[root@oldboyedu-39-nb oldboy]# nl nginx.conf
     1    stu1
     2    stu2
     3    stu3
     4    stu4
     5    stu5

文件处理(日志仅保留7天)

已知apache/nginx服务的访问日志按天记录在服务器本地目录/app/logs下,由于磁盘空间紧张,现在要求只能保留最近7天访问日志!请问如何解决? 请给出解决办法或配置或处理命令。(提示:可以从apache服务配置上着手,也可以从生成出来的日志上着手。)

# 创建环境
mkdir -p /app/logs
cd /app/logs
for  time in  {01..20};do  date -s "201705$time"; touch access_www_$(date +%F).log ;done
date -s "20170520"  修改系统时间

# 前第七天
[root@luffy_boy-001 logs]# find -type f -name '*.log' -mtime 7
./access_www_2017-05-13.log
# 7天之前
[root@luffy_boy-001 logs]# find -type f -name '*.log' -mtime +7
./access_www_2017-05-11.log
./access_www_2017-05-12.log
./access_www_2017-05-10.log
./access_www_2017-05-08.log
./access_www_2017-05-09.log
./access_www_2017-05-01.log
./access_www_2017-05-02.log
./access_www_2017-05-03.log
./access_www_2017-05-06.log
./access_www_2017-05-07.log
./access_www_2017-05-05.log
./access_www_2017-05-04.log
# 最近7天
[root@luffy_boy-001 logs]# find -type f -name '*.log' -mtime -7
./access_www_2017-05-18.log
./access_www_2017-05-15.log
./access_www_2017-05-20.log
./access_www_2017-05-16.log
./access_www_2017-05-19.log
./access_www_2017-05-17.log
./access_www_2017-05-14.log
找出/app/logs下面以.log结尾的并且修改时间是7天之前的文件并删除(ls -l)
find /app/logs/ -type f -name "*.log"  -mtime +7

#find /app/logs/ -type f -name "*.log"  -mtime +7|xargs ls -l
#ls -l $(find /app/logs/ -type f -name "*.log"  -mtime +7)
#find /app/logs/ -type f -name "*.log"  -mtime +7  -exec ls -l {}  \;


通过系统软件对日志进行切割。

补充find命令相关题目:

查找/oldboy 下所有以log 结尾的大于1M 的文件复制到/tmp

[root@oldboyedu43-lnb logs]# cat /etc/services  /etc/services > 1m.log
[root@oldboyedu43-lnb logs]# ls -lh 1m.log
-rw-r--r-- 1 root root 1.3M Dec 12 00:14 1m.log


find /oldboy  -type f -name "*.log"  -size +1M

-size +1M
-size +100k



find /oldboy  -type f -name "*.log"

mkdir -p /tmp/a /tmp/b /tmp/c /tmp/d

方法1 find+$()
#cp 次处是find命令的结果  /tmp/a/
cp   $(find /app/logs/ -type f -name "*.log")  /tmp/a/

方法2 find + -exec
find /app/logs/ -type f -name "*.log" -exec cp {} /tmp/b/  \;


方法3 find + |xargs
find /app/logs/ -type f -name "*.log" |xargs cp -t /tmp/c

设置服务的开启级别

装完系统后,希望让网络文件共享服务NFS(iptables),仅在3级别上开机自启动,应该怎么做?

[root@luffy_boy-001 logs]# chkconfig |grep ipt
iptables           0:off    1:off    2:on    3:on    4:on    5:on    6:off
[root@luffy_boy-001 logs]# chkconfig --level 3 iptables off
[root@luffy_boy-001 logs]# chkconfig |grep ipt
iptables           0:off    1:off    2:on    3:off    4:on    5:on    6:off
[root@luffy_boy-001 logs]# chkconfig --level 35 iptables off
[root@luffy_boy-001 logs]# chkconfig |grep ipt
iptables           0:off    1:off    2:on    3:off    4:on    5:off    6:off

备份一堆文件-打包tar

/etc/目录是linux系统默认的配置文件以及服务启动命令的目录

a、请用tar打包/etc整个目录(打包以及压缩)

b、请把a点命令的压缩包,解压到/tmp 指定目录下(最好用tar命令实现)

c、请用tar打包/etc整个目录(打包及压缩,但需要排除/etc/services文件)

 tar - 创建查看解压 压缩包

####创建一个压缩包

#tar zcvf /tmp/etc.tar.gz /etc/


#z----压缩工具---gzip    最常用一种  压缩之后我们一般给 压缩包命名位 xxxx.tar.gz
#c----创建-------create
#v----显示压缩/解压过程
#f----file------指定压缩包的名字


###查看压缩包里面的内容
tar ztf /tmp/etc.tar.gz

#t---list------列表 显示

###解压----解压到当前目录
# cd /tmp/
# pwd
/tmp
# tar zxvf /tmp/etc.tar.gz

#x-----extract 解压

 

提示的是什么?:

[root@luffy_boy-001 etc]# tar zcf /etc/haha.tar.gz /etc/
tar: Removing leading `/' from member names
tar: Removing leading `/' from hard link targets
tar: /etc: file changed as we read it

###问题:"创建压缩包"的时候会提示
tar: Removing leading `/' from member names
tar:把每个文件开头的/删除掉了。
/etc/hosts ------>  etc/hosts
tar命令提示你:我在创建压缩包的时候 把压缩包中的文件 绝对路径----->相对路径

tar: Removing leading `/' from hard link targets
打包的时候使用相对路径,就不会出现提示了
###小结:核心 为了安全----tar命令 把你使用的绝对路径----变化为-----相对路径

b和c的答案:

b.请用tar打包/etc整个目录(打包及压缩,但需要排除/etc/services文件)。

[root@oldboyedu-39-nb /]# tar zcf /tmp/etc-pai.tar.gz  /etc/  --exclude=services   ###排除所有文件名叫services的文件
tar: Removing leading `/' from member names
tar: Removing leading `/' from hard link targets
[root@oldboyedu-39-nb /]# tar tf /tmp/etc-pai.tar.gz |grep services
etc/init/readahead-disable-services.conf
[root@oldboyedu-39-nb /]# tar tf /tmp/etc.tar.gz |grep services
etc/services
etc/init/readahead-disable-services.conf


##排除---精确版本 加上位置
[root@oldboyedu-39-nb /]# tar zcf /tmp/etc-pai.tar.gz  /etc/  --exclude=etc/services
tar: Removing leading `/' from member names
tar: Removing leading `/' from hard link targets
[root@oldboyedu-39-nb /]# tar tf /tmp/etc-pai.tar.gz |grep services
etc/sysconfig/services
etc/init/readahead-disable-services.conf


#把你要排除的名单写到一个文件中 /tmp/paichu.txt(了解)
#tar zcf /tmp/etc-pai.tar.gz  /etc/  --exclude-from=/tmp/paichu.txt


c.请把a点命令的压缩包,解压到/tmp指定目录下(最好只用tar命令实现)。
tar xf /tmp/etc-pai.tar.gz -C /opt


把/etc/hosts /etc/sysconfig/network /etc/sysconfig/i18n /etc/init.d/  打包压缩 /tmp/conf.tar.gz
解压到/opt目录


[root@oldboyedu-39-nb /]# tar zcf /tmp/conf.tar.gz /etc/hosts /etc/sysconfig/network /etc/sysconfig/i18n /etc/init.d/
tar: Removing leading `/' from member names
[root@oldboyedu-39-nb /]# tar tf /tmp/conf.tar.gz
etc/hosts
etc/sysconfig/network
etc/sysconfig/i18n
etc/init.d
[root@oldboyedu-39-nb /]# tar xf /tmp/conf.tar.gz -C /opt/
[root@oldboyedu-39-nb /]# ls  /opt/
etc  rh

小结:

#1.创建压缩包
tar zcf /tmp/oldboy.tar.gz   /oldboy

#2.查看压缩包中的内容
tar tf /tmp/oldboy.tar.gz

#3.解压---解压到当前目录
tar xf  /tmp/oldboy.tar.gz
tar xf  /tmp/oldboy.tar.gz  -C /opt

#4.创建压缩包的时候 排除
tar zcf /tmp/etc-pai.tar.gz  /etc/  --exclude=etc/servicestar zcf /tmp/etc-pai.tar.gz  /etc/  --exclude-from=/tmp/paichu.txt

sed和awk筛选出文件中的指定内容

已知如下命令及结果:
mkdir -p /oldboy
echo "I am oldboy,myqq is 31333741">/oldboy/oldboy.txt

a.现在需要从文件中过滤出“oldboy”和“31333741”字符串,请给出命令.
b.如果需要从文件中过滤出“oldboy,31333741”字符串,请再给出命令.

a.现在需要从文件中过滤出“oldboy”和“31333741”字符串,请给出命令.
方法1-sed-sed
[root@oldboyedu01-nb oldboy]# sed 's#I am ##g' oldboy.txt |sed 's#,myqq is##g'
oldboy 31333741
方法2-sed/tr+awk
[root@oldboyedu01-nb oldboy]# sed 's#,# #g' oldboy.txt |awk '{print $3,$6}'
oldboy 31333741

[root@oldboyedu01-nb oldboy]# tr "," " " <oldboy.txt |awk '{print $3,$6}'
oldboy 31333741

方法3-awk指定多个分隔符号
[root@oldboyedu01-nb oldboy]# cat oldboy.txt
I am oldboy,myqq is 31333741
[root@oldboyedu01-nb oldboy]# awk -F "," '{print $1}' oldboy.txt
I am oldboy

[root@oldboyedu01-nb oldboy]# awk -F "[, ]"  '{print $3,$6}' oldboy.txt
oldboy 31333741

-F "[, ]" 表示以逗号或者空格作为菜刀 分隔符


b.如果需要从文件中过滤出“oldboy,31333741”字符串,请再给出命令.
[root@oldboyedu01-nb oldboy]# awk -F "[, ]"  '{print $3,$6}' oldboy.txt
oldboy 31333741
[root@oldboyedu01-nb oldboy]# awk -F "[, ]"  '{print $3","$6}' oldboy.txt
oldboy,31333741
[root@oldboyedu01-nb oldboy]# awk -F "[, ]"  '{print $3"$1"$6}' oldboy.txt
oldboy$131333741
[root@oldboyedu01-nb oldboy]# awk -F "[, ]"  '{print $3" $1 "$6}' oldboy.txt
oldboy $1 31333741

小结:
1.tr命令
2.awk指定分隔符 指定多个分隔符

awk分割列的方式

统计文件信息  wc  -l

可以统计文件有多少行,有多少单词,多大等

如何查看/etc/services文件的有多少行?

[root@oldboyedu01-nb oldboy]# wc -l /etc/services
10774 /etc/services

查看程序是否运行 ps  -ef

屌丝去洗浴中心之路
3.
1)查看22端口是否开启 telnet
2)sshd远程连接进程是否在运行******
ps -ef

[root@oldboyedu01-nb oldboy]# ps -ef |grep "sshd"
root       1509      1  0 17:51 ?        00:00:00 /usr/sbin/sshd
root       1669   1509  0 17:51 ?        00:00:00 sshd: root@pts/0
root       1795   1509  0 18:17 ?        00:00:00 sshd: root@pts/1
root       1813   1671  0 18:17 pts/0    00:00:00 grep sshd

[root@oldboyedu01-nb oldboy]# ps -ef |grep "/sshd"
root       1509      1  0 17:51 ?        00:00:00 /usr/sbin/sshd
root       1817   1671  0 18:19 pts/0    00:00:00 grep /sshd
[root@oldboyedu01-nb oldboy]# ps -ef |grep "/sshd"|wc -l   得到数字
2

过滤指定内容所在行的内容 egrep

过滤出/etc/services 文件包含3306或1521两数字所在的行的内容。

[root@oldboyedu01-nb oldboy]# egrep "3306|1521" /etc/services
mysql           3306/tcp                        # MySQL
mysql           3306/udp                        # MySQL
ncube-lm        1521/tcp                # nCube License Manager
ncube-lm        1521/udp                # nCube License Manager
[root@oldboyedu01-nb oldboy]# #egrep === grep -E 支持高级正则(公鸡里的战斗机)

命令行及shell中加单引号和加双引号的区别

 单引号 所见即所得 吃啥吐啥
[root@oldboyedu01-nb oldboy]# echo 'hello lls $LANG $(hostname) `pwd`'
hello lls $LANG $(hostname) `pwd`

 双引号 里面的特殊符号会被解析

[root@oldboyedu01-nb oldboy]# echo "hello lls $LANG $(hostname) `pwd`"
hello lls en_US.UTF-8 oldboyedu01-nb /oldboy

十二、Linux之特殊符号与正则表达式

Linux中常用的特殊符号

''     所见即所得,吃啥吐啥
""     特殊符号会被解析运行
``     ==== $() 先运行里面的命令 把结果留下

>     重定向符号        先清空文件的内容 然后追加文件的最后
>>    追加重定向        追加文件的最后
2>    错误重定向        只有错误的信息 才会通过这个漏洞进入文件中
2>>   错误追加重定向

~     当前用户的家目录
root   ~ /root
oldboy ~ /home/oldboy
!     查找并运行历史命令
!awk  包含awk的命令 最近的一条运行
      history |grep awk
#     注释
      root用户的命令提示符

$     取出变量的内容
      awk $取某一列的内容
      普通用户的命令提示符
*     所有 任何东西
\     撬棍  转义字符

&&    前一个命令执行成功然后在执行后一个命令
      ifdown eth0 && ifup eth0


||    前一个命令支持失败了再执行后面的命令

通配符

通配符是用来查找文件的。如:‘*.txt’ 表示匹配所有以  . txt结尾的文件##1.  *      所有,任意
找出文件名包含oldboy的文件
mkdir -p /oldboy
cd  /oldboy
touch oldboy.txt oldboy  oldboyfile oldboy.awk  eduoldboy

[root@oldboyedu01-nb oldboy]# find /oldboy/ -type f -name "oldboy"
/oldboy/oldboy
[root@oldboyedu01-nb oldboy]# find /oldboy/ -type f -name "*oldboy"
/oldboy/oldboy
/oldboy/eduoldboy
[root@oldboyedu01-nb oldboy]# find /oldboy/ -type f -name "*oldboy*"
/oldboy/oldboyfile
/oldboy/oldboy.txt-hard
/oldboy/oldboy.awk
/oldboy/oldboy.txt
/oldboy/oldboy
/oldboy/eduoldboy


##2.  {} 生成序列
[root@oldboyedu01-nb oldboy]# echo {1..6}
1 2 3 4 5 6
[root@oldboyedu01-nb oldboy]# echo {1..10}
1 2 3 4 5 6 7 8 9 10

[root@oldboyedu01-nb oldboy]# echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z
[root@oldboyedu01-nb oldboy]# echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z
[root@oldboyedu01-nb oldboy]# echo {01..10}
01 02 03 04 05 06 07 08 09 10
[root@oldboyedu01-nb oldboy]# echo stu{01..10}
stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10
[root@oldboyedu01-nb oldboy]# echo 20{01..10}
2001 2002 2003 2004 2005 2006 2007 2008 2009 2010
[root@oldboyedu01-nb oldboy]#
[root@oldboyedu01-nb oldboy]# echo {1,9,20}
1 9 20



#通过{}进行备份
[root@oldboyedu01-nb oldboy]# echo A{B,C}
AB AC
[root@oldboyedu01-nb oldboy]# echo A{,C}
A AC
[root@oldboyedu01-nb oldboy]# echo oldboy.txt{,.bak}
oldboy.txt oldboy.txt.bak
[root@oldboyedu01-nb oldboy]# touch oldboy.txt
[root@oldboyedu01-nb oldboy]# cp oldboy.txt{,.bak}
[root@oldboyedu01-nb oldboy]# ls -l oldboy.txt*
-rw-r--r--. 2 root root 29 Oct 18 07:42 oldboy.txt
-rw-r--r--  1 root root 29 Oct 18 07:42 oldboy.txt.bak
-rw-r--r--. 2 root root 29 Oct 18 07:42 oldboy.txt-hard
lrwxrwxrwx  1 root root 10 Oct 17 09:27 oldboy.txt-soft -> oldboy.txt
[root@oldboyedu01-nb oldboy]# cp oldboy.txt{,.bak}
[root@oldboyedu01-nb oldboy]# #cp oldboy.txt{,.bak}
[root@oldboyedu01-nb oldboy]# echo oldboy.txt{,.bak}
oldboy.txt oldboy.txt.bak
[root@oldboyedu01-nb oldboy]# echo A{,B}
A AB

正则表达式

1)什么是正则?为何使用它?
  通过符号表示文字内容。

  提高效率,省事。
  支持正则表达式:Linux三剑客 grep sed awk

2)使用正则的时候注意事项
    #1] 正则表达式是按照行进行处理的
    #2] 禁止使用中文符号
    #3] 给grep和egrep配置别名
cat >>/etc/profile<<EOF
alias grep='grep --color=auto'
alias egrep='egrep --color=auto'
EOF

source /etc/profile

正则与统配符的区别

  用途                                 匹配的内容                       支持的命令
  通配符---用来匹配查找文件名      *.txt *.log 以.txt .log结尾的文件    大部分命令都可以使用
  正则-----在文件中匹配查找内容    包含oldboy的行                       Linux三剑客

正则表达式的分类

      名称                                       符号                     命令基础正则(basic regular expression BRE)          ^ $ . * []  [^]       grep           sed    awk

扩展正则(extended regular expression ERE)       | +   {} () ?         grep -E/egrep  sed -r awk

基础正则

准备测试环境
I am oldboy teacher!
I teach linux.

I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.

not 4900000448.
my god ,i am not oldbey,but OLDBOY!
#1].  ^  以....开头的行
[root@oldboyedu01-nb oldboy]# grep '^m' oldboy.txt
my blog is http://oldboy.blog.51cto.com
my qq num is 49000448.
my god ,i am not oldbey,but OLDBOY!

#2].  $  以....结尾的行
[root@oldboyedu01-nb oldboy]# grep 'm$' oldboy.txt
my blog is http://oldboy.blog.51cto.com

#3].  ^$ 空行 这一行中没有任何的符号
[root@oldboyedu01-nb oldboy]# grep -n '^$' oldboy.txt
3:
8:

排除文件中的空行
[root@oldboyedu01-nb oldboy]# grep  -v '^$' oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY!

#4].  .(点)  任意一个字符 不包含空行
    #-o 表示grep的执行过程 正则每次匹配到了什么?

    找出文件中以点结尾的行
[root@oldboyedu01-nb oldboy]# grep '.$' oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
因为 . 是正则符号,所以并没有匹配出我们需要的内容。我们需要使用\将其转义
#5].  \(撬棍)  转义符号  脱掉马甲,打回原形
[root@oldboyedu01-nb oldboy]# grep '\.$' oldboy.txt
I teach linux.
my qq num is 49000448.
  # \n     表示回车换行

#6].  *  前一个字符连续出现了0次或1次以上  >=0
    A
    AA
    AAA
    AAAA
[root@oldboyedu01-nb oldboy]# grep '0' oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu01-nb oldboy]# grep -o '0' oldboy.txt
0
0
0
0
0
0
0
0

[root@oldboyedu01-nb oldboy]# grep '0*' oldboy.txt
I am oldboy teacher!
I teach linux.

I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.

not 4900000448.
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu01-nb oldboy]#
[root@oldboyedu01-nb oldboy]# grep -o '0*' oldboy.txt
000
00000

Linux正则表达式之问题1.为何会取出000 而不是 00 和0  0 0 0
#因为正则在表示 连续出现的时候表现出贪婪性  有多少吃多少 有多少匹配多少


Linux正则表达式之问题2.为何使用'0*'  会把整个文件的内容都显示出来
#A*表示
#      连续出现了0次A ====>相当于什么也没有,就像是在匹配 ‘ ’ 。因此就会把整个文件的内容都显示出来
#      A连续出现了1次以上 A
#

小结:
什么是连续出现
-o的使用

#7].  .*  所有字符 所有符号  所有
    #正则中表示连续出现 或 所有的时候 贪婪性 有多少匹配多少
    找出文件中以m开头的行并且以m结尾的行
[root@oldboyedu01-nb oldboy]# grep '^m.*m$' oldboy.txt
my blog is http://oldboy.blog.51cto.com

#8].  []  中括号 [abc]  相当于是一个字符 找出包含a或b或c的行

[root@oldboyedu01-nb oldboy]# grep '[abc]' oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu01-nb oldboy]# grep -on '[abc]' oldboy.txt
1:a
1:b
1:a
1:c
2:a
2:c



grep '[a-z]' oldboy.txt
grep '[A-Z]' oldboy.txt
grep '[0-9]' oldboy.txt
grep '[a-zA-Z0-9]' oldboy.txt

练习3:以 m或n或o开头的 并且以  m或g 结尾的行
[root@oldboyedu01-nb oldboy]# grep '^[mno].*[mg]$' oldboy.txt
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org

[root@oldboyedu01-nb oldboy]# grep '[m,n,o]' oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY!


#9].  [^] [^abc] 排除a或b或c的内容
[root@oldboyedu01-nb oldboy]# grep '[^abc]' oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
#10].基础正则小结
    ##1))    ^ $ ^$ . * .* [] [^]
    ##2))    grep  grep -o

扩展正则

+  | () {} ?

    #1].  +前一个符号连续出现了1次或多次  ,贪婪匹配,尽可能多的匹配
[root@oldboyedu01-nb oldboy]# egrep  '0' oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu01-nb oldboy]# egrep  '0+' oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu01-nb oldboy]# egrep  '0+' oldboy.txt -o
000
00000
[root@oldboyedu01-nb oldboy]# egrep  '0' oldboy.txt -o
0
0
0
0
0
0
0
0符号 + 的应用 
    #把文件中连续出现的小写字母取出来
    #1.取出小写字母
[root@oldboyedu01-nb oldboy]# egrep '[a-z]' oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY!

    #2.连续出现的小写字母
[root@oldboyedu01-nb oldboy]# egrep '[a-z]+' oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY!

    #3.只保留连续出现的小写字母
[root@oldboyedu01-nb oldboy]# egrep '[a-z]+' oldboy.txt -o
am
oldboy
teacher
teach
linux
like
badminton
ball
billiard
ball
and
chinese
chess
my
blog
is
http
oldboy
blog
cto
com
our
site
is
http
www
etiantian
org
my
qq
num
is
not
my
god
i
am
not
oldbey
but

    小结:
    1.可以把连续的东西通过正则取出来
    2.一般与[]配合

    #2]. | 或者

[root@oldboyedu01-nb oldboy]# egrep 'oldboy|linux' oldboy.txt
I am oldboy teacher!
I teach linux.
my blog is http://oldboy.blog.51cto.com

    Linux正则表达式之问题3:[] 与 | 区别

    都可以表示或者 [abc] a|b|c
    区别:
    1.[]基础正则  |扩展正则
    2.[]表示的是单个字符或者   |单个字符的或多个字符的都可
      [a-z]                    oldboy|linux


    #3]. ()  括号中的内容相当于是一个整体 后向引用(反向引用)
[root@oldboyedu01-nb oldboy]# egrep 'oldb(o|e)y' oldboy.txt
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com
my god ,i am not oldbey,but OLDBOY!

先乘除再加减,有括号的先算括号里面的。

    #后向引用,反向引用,一般是在sed命令中使用
    sed,把你想要的内容先保护起来(通过小括号),然后再使用他。    实例:需求,我要把123456用<>包起来
[root@oldboyedu01-nb oldboy]# echo '<123456>' 当然不是这种玩赖的做法
<123456>
[root@oldboyedu01-nb oldboy]# echo 123456|sed 's#(.*)#\1#g'      注意:\1 表示第一个小括号
sed: -e expression #1, char 11: invalid reference \1 on `s' command's RHS
[root@oldboyedu01-nb oldboy]# echo 123456|sed -r 's#(.*)#\1#g'
123456
[root@oldboyedu01-nb oldboy]# echo 123456|sed -r 's#(.*)#<\1#g'
<123456
[root@oldboyedu01-nb oldboy]# echo 123456|sed -r 's#(.*)#<\1>#g'
<123456>
[root@oldboyedu01-nb oldboy]# echo 123456|sed -r 's#.(.)..(.).#\1#g'
2
[root@oldboyedu01-nb oldboy]# echo 123456|sed -r 's#.(.)..(.).#\2#g'
5
[root@oldboyedu01-nb oldboy]# echo 123456|sed -r 's#.(.).(.)(.).#\3#g'
5
   #4]. o{n,m}  前一个字符连续出现了至少n次,最多m次。
        o{n}    前一个字符连续出现了n次
        o{n,}   前一个字符连续出现了至少n次

        o{,m}   前一个字符连续出现了最多m次

[root@oldboyedu01-nb oldboy]# egrep '0{1,4}'  oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu01-nb oldboy]# egrep -o '0{1,4}'  oldboy.txt
000
0000
0
[root@oldboyedu01-nb oldboy]# egrep  '0{3,4}'  oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu01-nb oldboy]# egrep  '0{3,4}'  oldboy.txt -o
000
0000

[root@oldboyedu01-nb oldboy]# egrep  '0{3,}'  oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu01-nb oldboy]# egrep  '0{3,}'  oldboy.txt -o
000
00000

[root@oldboyedu01-nb oldboy]# egrep  '0{3}'  oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu01-nb oldboy]# egrep  '0{3}'  oldboy.txt -o
000
000

[root@oldboyedu01-nb oldboy]# egrep '[0-9]' oldboy.txt
my blog is http://oldboy.blog.51cto.com
my qq num is 49000448.
not 4900000448.
[root@oldboyedu01-nb oldboy]# egrep '[0-9]{8,}' oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu01-nb oldboy]# egrep '[0-9]{8,}' oldboy.txt -o
49000448
4900000448

    #5]. ?  表示前一个字符连续出现0次或1次
gd
good
god
gooood

[root@oldboyedu01-nb oldboy]# egrep 'gd|god' li.log
gd
god
[root@oldboyedu01-nb oldboy]# egrep 'go?d' li.log
gd
god
[root@oldboyedu01-nb oldboy]# egrep 'go*d' li.log
gd
good
god
gooood

正则总结

# 1、正则符号
     连续出现(重复)
            *        >=0    0次或者多次
            +        >=1   1次以上
            ?        0 1     0次或者1次
            {n,m}    >=n  <=m   至少n次,最多m次
            {n}      ==n     取n次
     其他
            .        任意一个字符
            [abc]    一个整体 相当于是一个字符a或者b或者c
                     [a-z] [0-9] [A-Z]
            [^abc]   排除
            |        或者
            ()       后向引用  反向引用  先保护再使用
            ^        以什么什么开头
            $     以什么什么结尾
            .*       所有
            ^$       空行

#2、基础正则与扩展正则区别:
      支持基础正则            基础+扩展
         grep            egrep === grep -E
         sed                  sed -r
         awk                  awk
    使用撬棍\ 也可以命令支持扩展正则(一般不用,遇到稍微复杂的会很麻烦)
    [root@luffy-01 oldboy]# grep 'god\|gd' alex.txt 
     gd
     god

#3、查询帮助:
    man grep(简单的帮助)
    查看详细的帮助信息info grep

练习题

过滤文本(awk、sed)

1、请执行命令取出linux中eth0的IP地址(请用cut,有能力者也可分别用awk,sed命令答)

思路
1.定位-取出第2行
2.取出你要的ip地址

方法1-awk方法+awk+awk
[root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'
          inet addr:10.0.0.200  Bcast:10.0.0.255  Mask:255.255.255.0
[root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'|awk '{print $2}'
addr:10.0.0.200
[root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'|awk '{print $2}'|awk -F":" '{print $2}'
10.0.0.200

方法2-awk+awk 
[root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'
          inet addr:10.0.0.200  Bcast:10.0.0.255  Mask:255.255.255.0
[root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'|awk -F "[: ]" '{print $4}'

[root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'|awk -F "[: ]" '{print $11}'
inet
[root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'|awk -F "[: ]" '{print $13}'
10.0.0.200#遇到空格便切,前面有10个空格,切了10刀才遇到第一个非空格,太费劲了#下面使用不费劲的方法,用+匹配(一个或者多个)
[root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'
          inet addr:10.0.0.200  Bcast:10.0.0.255  Mask:255.255.255.0
[root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'|awk -F "[: ]+" '{print $4}'
10.0.0.200


##理解连续出现  理解 [] +
[root@oldboyedu01-nb ~]# echo '######1@@@@@@@@2'
######1@@@@@@@@2
[root@oldboyedu01-nb ~]# echo '######1@@@@@@@@2' |egrep '[@#]'
######1@@@@@@@@2
[root@oldboyedu01-nb ~]# echo '######1@@@@@@@@2' |egrep '[@#]' -o
#
#
#
#
#
#
@
@
@
@
@
@
@
@
[root@oldboyedu01-nb ~]#
[root@oldboyedu01-nb ~]# echo '######1@@@@@@@@2' |egrep '[@#]+'
######1@@@@@@@@2
[root@oldboyedu01-nb ~]# echo '######1@@@@@@@@2' |egrep '[@#]+'  -o
######
@@@@@@@@
[root@oldboyedu01-nb ~]# echo '######1@@@@@@@@2' |awk -F "[@#]+" '{print $2}'
1
[root@oldboyedu01-nb ~]# echo '######1@@@@@@@@2' |awk -F "[@#]+" '{print $3}'
2



方法3-awk


#预备姿势-通过awk取出 ifconfig eth0 结果中的 第二行的第二列
[root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'
          inet addr:10.0.0.200  Bcast:10.0.0.255  Mask:255.255.255.0
[root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'|awk '{print $2}'
addr:10.0.0.200

[root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2{print $2}'
addr:10.0.0.200
[root@oldboyedu01-nb ~]# #awk '找谁{干啥}'

#最终结果
[root@oldboyedu01-nb ~]# ifconfig eth0|awk -F "[: ]+"  'NR==2{print $4}'
10.0.0.200

方法4-sed+sed+sed
[root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2p'
          inet addr:10.0.0.200  Bcast:10.0.0.255  Mask:255.255.255.0
[root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2p'|sed 's#^.*:##g'
255.255.255.0
[root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2p'|sed 's#^.*dr:##g'
10.0.0.200  Bcast:10.0.0.255  Mask:255.255.255.0
[root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2p'|sed 's#^.*dr:##g'|sed 's#  Bc.*$##g'
10.0.0.200

方法5-sed命令的后向引用 ******
#原则-先把你想要的内容保护起来,然后在后面使用
[root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2p'
          inet addr:10.0.0.200  Bcast:10.0.0.255  Mask:255.255.255.0
[root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2p'|sed -r 's#^.*dr:##g'
10.0.0.200  Bcast:10.0.0.255  Mask:255.255.255.0
[root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2p'|sed -r 's#^.*dr:(.*)  Bc.*$#\1#g'
10.0.0.200

方法6-sed
#预备姿势-ifconfig eth0第二行的inet替换为oldboy
[root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2p'
          inet addr:10.0.0.200  Bcast:10.0.0.255  Mask:255.255.255.0
[root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2p'|sed 's#inet#oldboy#g'
          oldboy addr:10.0.0.200  Bcast:10.0.0.255  Mask:255.255.255.0
[root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2s#inet#oldboy#gp'
          oldboy addr:10.0.0.200  Bcast:10.0.0.255  Mask:255.255.255.0
#最终结果-
[root@oldboyedu01-nb ~]# ifconfig eth0|sed -nr '2s#^.*dr:(.*)  Bc.*$#\1#gp'
10.0.0.200


小结:
1.理解第2 3 5方法
2.了解6
3.awk指定多个连续的分隔符,sed的反向引用

2、如何取得/etc/hosts文件的权限对应的数字内容,如-rw-r--r-- 为644,要求使用命令取得644或0644这样的数字。

#方法1-awk
[root@oldboyedu01-nb ~]# stat /etc/hosts |awk 'NR==4'
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
[root@oldboyedu01-nb ~]# stat /etc/hosts |awk -F "[(/]" 'NR==4{print $2}'
0644


#方法2-sed
[root@oldboyedu01-nb ~]# stat /etc/hosts |sed -n '4p'
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
[root@oldboyedu01-nb ~]# stat /etc/hosts |sed -nr '4s#^.*\(##gp'
    0/    root)
[root@oldboyedu01-nb ~]# stat /etc/hosts |sed -nr '4s#^.*\([0-9]+##gp'
/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
[root@oldboyedu01-nb ~]# stat /etc/hosts |sed -nr '4s#^.*\(([0-9]+).*$#\1#gp'
0644

#方法3-stat命令的参数
[root@oldboyedu01-nb ~]# stat -c%a /etc/hosts
644

小结:
1.sed 反向引用  awk方法指定分隔符

3、已知/oldboy/test.txt 文件内容为:

oldboy

 

youxiaodao

 

pizza

请问如何把文件中的空行过滤掉(要求命令行实现)

#方法1-grep   -v表示排除
[root@oldboyedu01-nb oldboy]# grep '^$' test.txt


[root@oldboyedu01-nb oldboy]# grep -n '^$' test.txt
2:
4:
[root@oldboyedu01-nb oldboy]# grep -v '^$' test.txt
oldboy
xizi
xiaochao


#方法2-awk
[root@oldboyedu01-nb oldboy]# awk '/^$/' test.txt
[root@oldboyedu01-nb oldboy]# awk '不要/^$/' test.txt
awk: 不要/^$/
awk: ^ invalid char '⥠in expression
! 表示排除
[root@oldboyedu01-nb oldboy]# awk '!/^$/' test.txt
oldboy
xizi
xiaochao
[root@oldboyedu01-nb oldboy]## awk '不要/空行/' test.txt


#方法3-sed-删除
[root@oldboyedu01-nb oldboy]# sed  '/^$/d'  test.txt
oldboy
xizi
xiaochao

小结:
1.通awk sed表示排除
2.awk !
3.sed d

4、已知/oldboy/ett.txt 文件内容为:

oldboy

pizzzzza

test

请使用grep或者egrep 正则匹配的方式过滤出前两行内容

#如何通过-sed awk 实现过滤 === grep/egrep
[root@oldboyedu01-nb oldboy]# cat ett.txt
oldboy
olldboooy
test
[root@oldboyedu01-nb oldboy]# egrep 'oldboy' ett.txt
oldboy
[root@oldboyedu01-nb oldboy]# awk '/oldboy/' ett.txt
oldboy
[root@oldboyedu01-nb oldboy]# sed -n '/oldboy/p' ett.txt
oldboy
题目答案:
[root@oldboyedu01-nb oldboy]# egrep 'ol+dbo+y' ett.txt
oldboy
olldboooy
[root@oldboyedu01-nb oldboy]# awk '/ol+dbo+y/' ett.txt
oldboy
olldboooy
[root@oldboyedu01-nb oldboy]# sed -n '/ol+dbo+y/p' ett.txt
[root@oldboyedu01-nb oldboy]# sed -nr '/ol+dbo+y/p' ett.txt
oldboy
olldboooy
[root@oldboyedu01-nb oldb

小结:
1.sed awk如何实现过滤类似grep/egrep
2.awk定位的方法
awk 'NR==1'
awk 'NR==1,NR==10'
awk '//'

3.sed定位
sed -n '1p'
sed -n '1,10p'
sed -n '10,$p'
sed -n '//p'

文件

5、linux下通过mkdir命令创建一个新目录/alexdir,alexdir的硬链接数是多少,为什么?
     然后在alexdir下面又创建了一个目录 /alexdir/test,问alexdir的硬链接数量是多少?

[root@luffy-01 oldboy]# mkdir /alexdir
[root@luffy-01 oldboy]# ll /|grep alex
drwxr-xr-x    2 root root  4096 Jan 15 15:21 alexdir
[root@luffy-01 oldboy]# mkdir /alexdir/test
[root@luffy-01 oldboy]# ll /|grep alex
drwxr-xr-x    3 root root  4096 Jan 15 15:21 alexdir

查看一下:

[root@luffy-01 oldboy]# ls -lid /alexdir/ /alexdir/.
143565 drwxr-xr-x 3 root root 4096 Jan 15 15:21 /alexdir/
143565 drwxr-xr-x 3 root root 4096 Jan 15 15:21 /alexdir/.

2个文件的inode是一样的。在当我们使用 cd . 的时候,也是进入了这个文件夹

创建之后,查看,果然是3个一样的inode

[root@luffy-01 oldboy]# ls -lid /alexdir/ /alexdir/. /alexdir/test/..
143565 drwxr-xr-x 3 root root 4096 Jan 15 15:21 /alexdir/
143565 drwxr-xr-x 3 root root 4096 Jan 15 15:21 /alexdir/.
143565 drwxr-xr-x 3 root root 4096 Jan 15 15:21 /alexdir/test/..

6、请给出默认情况eth0网卡配置文件的路径及客户端DNS的路径。

 /etc/sysconfig/network-scripts/ifcfg-eth0
 /配置/系统配置/网络-脚本/if(c f g)-eth0

 

 DNS的配置
 1./etc/resolv.conf
 2.网卡配置文件
 3.网卡配置文件里面的DNS优先

替换

7、查找当前目录下所有文件,并把文件中的www.etiantian.org字符串替换成www.oldboyedu.com

假设现在在/oldboy
 find /oldboy -type f -name "*.txt"

 #方法1
 find /oldboy -type f -name "*.txt"|xargs sed 's#www.etiantian.org#www.oldboyedu.com#g'
  (管道|什么时候用xargs,什么时候不用呢?)
 #方法2
 ##预备姿势
 [root@oldboyedu01-nb ~]# #ls -l 此处存放着 which mkdir命令的结果
 [root@oldboyedu01-nb ~]# #ls -l  which mkdir
 [root@oldboyedu01-nb ~]# #ls -l $(which mkdir)
 [root@oldboyedu01-nb ~]# #ls -l `which mkdir`
 [root@oldboyedu01-nb ~]# ls -l `which mkdir`
 -rwxr-xr-x. 1 root root 50056 Mar 23  2017 /bin/mkdir
 [root@oldboyedu01-nb ~]# ls -l $(which mkdir)
 -rwxr-xr-x. 1 root root 50056 Mar 23  2017 /bin/mkdir
 ##最终结果
 sed 's#www.etiantian.org#www.oldboyedu.com#g'  此处存放着find命令的结果
 sed 's#www.etiantian.org#www.oldboyedu.com#g'  $(find /oldboy -type f -name "*.txt")

 #方法3
 find /oldboy -type f -name "*.txt"  -exec ls -l  {}  \;  -exec 是 find的参数,{}接受前面find命令的结果

一个故障实例(被植入js)

7.1有一个实际是这样的,情况是:一个lamp的服务器,站点目录下的所有文件军备植入了js代码,导致网站打开时就会调用这个地址,显示广告,造成很恶劣的影响,

解决方案:
#1、运营、网站用户发现弹窗广告
#2、运营报告给开发,开发联系运维,共同解决
#3、开发发现的问题就是,站点的目录都被植入了js代码
#4、运维人员解决问题:
##   1)运维备份原始出问题的原始文件
##   2)历史备份覆盖
##   3)find+sed覆盖
#5、仔细查看日志,寻找问题发现根源
#6、提供盲羊补牢解决方案(站点目录严格权限规划方案,以及新上线发布规范思路)

echo的参数使用

8、请问在一个命令上加什么参数可以实现下面命令的内容在同一行输出。
       echo "oldboy";echo "oldboy"

# ;  ====>分号表示分隔多条命令
ls;pwd;hello

[root@oldboyedu01-nb ~]# echo -n "oldboy";echo "oldboy"
oldboyoldboy
# -n 表示取消输出每一行结尾的换行符号

[root@oldboyedu01-nb ~]# echo -e "a\nb"
a
b
# echo命令的-e参数,就是让echo支持\n \t 
[root@oldboyedu01-nb ~]# echo -e "a\nb\n\tc" >echo.txt
[root@oldboyedu01-nb ~]# cat echo.txt
a
b
    c
# -A显示文件中的特殊符号
[root@oldboyedu01-nb ~]# cat -A echo.txt
a$
b$
^Ic$

时间命令

9、请给出如下格式的date命令,例:11-02-26。再给出实现按周输出 比如:周六输出为6,请分别给出命令。

date命令的使用

[root@oldboyedu01-nb ~]# date
Fri Oct 20 05:20:30 CST 2017
[root@oldboyedu01-nb ~]# #2017-11-11
[root@oldboyedu01-nb ~]# #date +格式
[root@oldboyedu01-nb ~]# date +%F
2017-10-20
[root@oldboyedu01-nb ~]# date +%Y-%m-%d
2017-10-20
[root@oldboyedu01-nb ~]# date +%w
5
[root@oldboyedu01-nb ~]# #显示当前的日期以年-月-日_周几

[root@oldboyedu01-nb ~]# date +%F_%w
2017-10-20_5

[root@oldboyedu01-nb ~]# date +%F_%w
2017-10-20_5
[root@oldboyedu01-nb ~]# date +%T
05:25:33
[root@oldboyedu01-nb ~]# date +%H:%M:%S
05:25:51

date命令按照格式显示日期小结:
1.date +格式
2.%F ===> %Y-%m-%d 年-月-日
  %T ===> %H:%M:%S 时:分:秒
  %w ===> 周几

10、扩展问题:打印三天前的日期,格式如:2088-08-28

如何显示指定日期:使用-d参数

[root@oldboyedu01-nb ~]# date
Fri Oct 20 05:28:44 CST 2017
[root@oldboyedu01-nb ~]# date -d "1day"  显示1天后的日期
Sat Oct 21 05:29:07 CST 2017
[root@oldboyedu01-nb ~]# date -d "+1day" 显示一天后
Sat Oct 21 05:29:18 CST 2017
[root@oldboyedu01-nb ~]# date -d "-1day" 显示前一天
Thu Oct 19 05:29:42 CST 2017

[root@oldboyedu01-nb ~]# date -d "-1day" +%F   也可以制定显示格式
2017-10-19
[root@oldboyedu01-nb ~]# date -d "1day" +%F    
2017-10-21
[root@oldboyedu01-nb ~]# #year month day hour min sec  格式顺序

#显示7天前的时间按照格式年-月-日_周几
[root@oldboyedu01-nb ~]#
[root@oldboyedu01-nb ~]# date +%F_%w
2017-10-20_5
[root@oldboyedu01-nb ~]# date +%F_%w -d "-7day"
2017-10-13_5

修改系统日期:使用-s参数

[root@oldboyedu01-nb ~]# date -s "21111111 11:11:11"  
Wed Nov 11 11:11:11 CST 2111
[root@oldboyedu01-nb ~]# date -s "1hour"  把当前系统时间往后添加一个小时
Wed Nov 11 12:12:51 CST 2111
[root@oldboyedu01-nb ~]# date -s "-1hour"
Wed Nov 11 11:12:56 CST 2111

利用时间服务器,自动修改系统时间

时间服务器
pool.ntp.org
ntp1.aliyun.com

[root@luffy-01 oldboy]# ntpdate pool.ntp.org

PATH环境变量

11、【Centos 5.x】当从root用户切到普通用户pizza时,执行ifconfig会提示。command not found.

1、Linux运行命令过程
输入命令
linux会在PATH里面进行查找
运行
报错

2、PATH环境变量


修改PATH环境变量
##临时
[root@oldboyedu01-nb ~]# export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@oldboyedu01-nb ~]#[root@oldboyedu01-nb ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

##永久
把环境变量的配置命令追加到/etc/profile中
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

##生效
source /etc/profile


小结:
1.什么是PATH环境变量
2.如何修改PATH环境变量

文件

12、请描述下列路径的内容是做什么的?

/var/log/messages          系统默认的日志
/var/log/secure            用户的登录信息
/etc/fstab                 开机的时候自动挂载列表  在开机的时候每个磁盘分区对应着什么入口的列表
/etc/profile               配置环境变量  别名
/var/spool/cron/root       定时任务的配置文件
/etc/hosts                 解析主机名
                          /etc/hosts                 主机名---->ip地址
                          DNS解析                     域名--->   ip过程

13、如何快速查到ifconfig的全路径,请给出命令。

####方法1 which (在PATH环境变量)
[root@oldboyedu01-nb ~]# which mkdir
/bin/mkdir
[root@oldboyedu01-nb ~]# which sed
/bin/sed

####方法2 find
[root@oldboyedu01-nb ~]# find / -type f -name "gawk"
/bin/gawk
[root@oldboyedu01-nb ~]# find / -type f -name "sed"
/bin/sed
[root@oldboyedu01-nb ~]# find / -type f -name "mkdir"
/bin/mkdir

####方法3  whereis 找出命令相关的 帮助 man  ,所以会很多
[root@oldboyedu01-nb ~]# whereis sed
sed: /bin/sed /usr/share/man/man1p/sed.1p.gz /usr/share/man/man1/sed.1.gz
[root@oldboyedu01-nb ~]# whereis awk
awk: /bin/awk /usr/bin/awk /usr/libexec/awk /usr/share/awk /usr/share/man/man1p/awk.1p.gz /usr/share/man/man1/awk.1.gz
[root@luffy-01 ~]# whereis -b sed   使用-b参数,得到的只是二进制文件sed: /bin/sed
####方法4  locate    根据名字 找出文件的路径
                     根据文件名字与文件路径表格(数据库) 查找,一般不使用,因为使用它会去查询数据库,导致磁盘空间紧张
                     updatedb  跟新数据库
[root@oldboyedu01-nb ~]# touch oldboy-20171111.log
[root@oldboyedu01-nb ~]# locate 20171111   刚刚建立的文件没有,跟新一下,才能查找到
[root@oldboyedu01-nb ~]# updatedb
[root@oldboyedu01-nb ~]# locate 20171111
/root/oldboy-20171111.log

查询Linux在线用户

14、请给出查看当前哪些用户在线的linux命令。

用户在线是什么意思呢 =====> 远程连接到服务器的用户

远程登录的用户=====通过xshell或SecureCRT连接服务器

方式一:w

[root@luffy-01 ~]# w   
 17:40:11 up  8:58(累计已开机时间),  2 users,  load average(平均负载): 0.00, 0.00, 0.00   load average(平均负载)
USER           TTY      FROM              LOGIN@              IDLE   JCPU   PCPU WHAT
pizza          tty1     -(代表本地)     08:44               08:53  0.09s  0.09s -bash  
root           pts/0    10.0.0.1         11:31               0.00s  0.02s  0.00s w
root           pts/1    10.0.0.1         11:55               3:35   0.00s  0.00s -bash
root           pts/2    10.0.0.1         11:55              12.00s  0.01s  0.01s -bash
远程登录的用户          从哪里登录的     什么时候连接入系统                      这个用户在做什么

系统的负载---系统繁忙程度
如果负载接近-服务cpu的核心总数

[root@luffy-01 ~]# cat /proc/cpuinfo  查看CPU信息
processor    : 0
vendor_id    : AuthenticAMD
cpu family    : 21
model        : 16
model name    : AMD Athlon(tm) X4 730 Quad Core Processor      
stepping    : 1
cpu MHz        : 2800.099
cache size    : 2048 KB
physical id    : 0
siblings    : 1
core id        : 0
cpu cores    : 1
apicid        : 0
initial apicid    : 0
fpu        : yes
fpu_exception    : yes
cpuid level    : 13
wp        : yes
flags        : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc up rep_good tsc_reliable nonstop_tsc aperfmperf unfair_spinlock pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic popcnt aes xsave avx f16c hypervisor lahf_lm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw xop fma4 tbm bmi1
bogomips    : 5600.19
TLB size    : 1536 4K pages
clflush size    : 64
cache_alignment    : 64
address sizes    : 42 bits physical, 48 bits virtual
power management:
[root@luffy-01 ~]# lscpu  查看cpu信息
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                1
On-line CPU(s) list:   0
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             1
NUMA node(s):          1
Vendor ID:             AuthenticAMD
CPU family:            21
Model:                 16
Model name:            AMD Athlon(tm) X4 730 Quad Core Processor
Stepping:              1
CPU MHz:               2800.099
BogoMIPS:              5600.19
Hypervisor vendor:     VMware
Virtualization type:   full
L1d cache:             16K
L1i cache:             64K
L2 cache:              2048K
NUMA node0 CPU(s):     0

方式二:last

[root@luffy-01 ~]# last  谁在什么时间登陆了系统,连接了多久
root     pts/0        10.0.0.1         Tue Jan 15 08:47   still logged in   
pizza    tty1                          Tue Jan 15 08:44   still logged in 

方式三:lastlog

显示系统中所有用户的最近一次的登录信息

15、如何正确关机和重启

重启:

init 6     将启动级别改为重启

reboot  立刻重启

shutdown -r 1   一分钟后重启系统

shutdown -c     把正在关机或者重启的命令取消掉,一台远程登录重启,另一台可以在时间内停止这条命令

shutdown -r now  =====>相当于reboot

 

关机:

init 0

poweroff  会断电(物理机)

halt     需要手动关闭电源(物理机)

shutdown -h 1

shutdown -h now   ======>相当于poweroff

16、写出Linux命令行快捷键的功能

Ctrl + a   把光标移动到《行首》
Ctrl + e   把光标移动到《行尾》

Ctrl + c   取消当前的操作 cancel
Ctrl + d   logout命令(当前行没有任何内容,退出当前用户)
Ctrl + l  (小写字母L) 清除屏幕内容 clear

Ctrl + u   剪切光标所在位置到行首的内容
Ctrl + k   剪切光标所在位置到行尾的内容
ctrl + y   粘贴

ctrl + →   把光标向右移动一个单词
ctrl + ←   把光标向左移动一个单词


history |grep awk

Ctrl + r search 搜索历史命令,没有找到,继续按快捷键,继续搜索,找到了按enter

17、vi/vim快捷键初级

陈皓(左耳朵耗子)的VIM攻略

移动光标:

    ↑k
←h      →l
    ↓j

两边左右hl  中间是上下


移动到文件的第一行           gg   :1  1G
移动到文件的最后一行         G    :$
快速到达文件的第100行       100gg  100G  :100
移动光标到行首              0    ^
移动光标到行尾              $


编辑:
在当前行下一行插入一个空行并进入到编辑模式       o(小写字母O)
剪切光标所在位置到行尾的内容,然后进入编辑模式   C(大写字母C)
删除当前行的内容到行尾                          dG
撤销上一次的操作                                 u
恢复上一次的操作                            ctrl+r


复制粘贴剪切:

删除光标所在位置的内容到行尾 D

复制当前行                                      yy
剪切(删除)当前行                                dd
粘贴                                            p


搜索:
/你要找的内容    继续向下搜索n     继续向上搜索N


vim查询帮助

:h  :wq
:h  G

练习题总结

    正则表达式练习题
        取出网卡ip地址
        取出权限
    grep,sed,awk进行过滤
    find命令与其他命令配置rm ls -l sed
        三种方法
    date显示或设置系统日期
        按照你的说明显示指定的日期
        以指定格式显示日期
        自动修改系统时间
    Linux下面快捷键
    vi/vim快捷键
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!