一、远程连接排错
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的特点
- inode存放文件属性
- 存放block的位置(指向block的指针)
- 创建一个文件要占用一个inode
- inode节点号相同的文件,互为硬链接文件,可以认为是一个文件的不同入口
- 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的特点
- block是实际存放数据的位置
- block 默认4k(centos 6.x) 1k 8k
- 创建大文件会占用多个block,如果文件很小1k,4k剩余的空间会被浪费。
- 创建一个非空文件要占用一个inode和至少1个block
- 每读取一个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·ڝ¡osṅ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快捷键初级
移动光标: ↑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快捷键
来源:https://www.cnblogs.com/bubu99/p/12271737.html