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
注:重新配置后,需要重启
SElinux和Iptables
查看系统是否开启ssh进程:ps -ef |grep sshd
查看系统中开启了哪些端口:ss -lntup
不建议使用的命令,当高并发时,服务器连接多容易卡死(古老的命令):netstat -lntup |grep 22
查看端口是不是开启了:telnet
telnet 服务器ip地址 22
[e:\~]$ telnet 10.0.0.200 22
[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是限制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
# 查询防火墙是否在运行 /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 ,因为信息太长,不需要看这么多
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)文件,诸如日志或数据库等
代表变量文件。在这个目录下可以找到内容可能增长的文件
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 #@@
把使用的域名转换为ip地址
###阿里云的DNS #223.5.5.5 #223.6.6.6 ###114 #114.114.114.114 #114.114.115.115 ###谷歌 #8.8.8.8
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
--/etc/resolv.conf
##网卡配置文件里面的DNS优先于 /etc/resolv.conf
##配置DNS都在网卡里面配置
--/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 + . 使用上一个命令的最后一个
--/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
--/etc/fstab 开机的时候给每个磁盘分区开一个入口
#第一列 --表示设备/分区
#第二列 --表示入口/目录/挂载点
df -h 查看系统磁盘的大小和使用情况
blkid 查看 设备详细列表
--/etc/rc.local 需要开机自启动的软件/命令/服务放在这个文件中
Startup
如何让一个软件/脚本/服务开机自动运行?
1./etc/rc.local # 服务器运行软件的清单
2.通过chkconfig管理 # 开机自启动
--/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.如何修改 临时 永久
Linux放置命令的地方有哪些?
--/etc/init.d/
--/etc/profile
#PS1 PATH
#LANG==>/etc/sysconfig/i18n 单独放置
--/etc/bashrc 正统存放别名的地方
######国法(全国各地生效)
/etc/profile 系统环境变量 别名 √√√√√---常用
/etc/bashrc 别名
######家规(地方政策 当前用户生效)
~/.bashrc
~/.bash_profile
~ 表示当前用户的家目录
root ~ ===== /root
oldboy ~ ===== /home/oldboy
/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 另一个安装软件的地方,主要是系统文档,了解一下
系统默认日志信息
#######/var/log/messages
系统用户的登录信息
#######/var/log/secure (谁 什么时候 从哪里登录的 是否成功)
grep “Failed Password” /var/log/secure 从登陆信息日志中获取是否有人在尝试破解密码
--/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
通用方法
/boot 引导分区 200M
swap 交换分区 内存的1.5倍(内存小于8G) 大于8G 给8G
/ 根分区 剩下多少给多少
数据非常重要
/boot
swap
/ 50-200G
/data 剩下多少给多少
不知道数据是否重要
/boot
swap
/ 50-200G
剩余的空间 不分配留着.
[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 # 文件名不是文件的属性
我们从获得一个硬盘,到可以向硬盘中存放数据,都经历了哪些阶段?
做一个比喻,把硬盘比作房子的话。
有房子----------------->买了个硬盘
划分隔断-------------->分区
装修-不同风格-------->格式化创建文件系统
安装门窗--------------->挂载
住人--------------------->存数据
用来存放文件属性的空间
我们通过iNode号码来找到这个空间
inode号码----家庭住址
inode空间----家
文件名不存放在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
数据块,实际存放数据的位置
也是格式化创建文件系统
[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
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
- 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
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 ? 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 配置文件
整体对于一个文件/目录来说:用户可以分为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 pizza
uid=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----用户无法登陆系统,相当于是傀儡用户
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
也叫作,符号链接
如何创建软链接
[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 进程调用数不为零 文件没有被彻底删除磁盘空间不足
1.block满了正常-500G 存放505G视频
2.inode满了,大量的小文件
3.block 硬链接数量为0 进程调用数不为0 ,文件没有被彻底删除磁盘空间不足
排查:
3种
mtime modified time 文件的修改时间 文件内容的变化时间
ctime change time 文件属性的改变时间 硬链接数量 文件大小 文件权限
atime access time 文件的访问时间 cat
我能干什么?这是我最关心的问题!
切换到普通用户
[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 ~]$ id
uid=500(pizza) gid=500(pizza) groups=500(pizza)
[pizza@luffy-01 ~]$ id root
uid=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
准备环境
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.sh
hostname
pwd [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权限。
所有者、家庭、隔壁老王======>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
[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.txt
chattr授予文件或者目录隐藏的权限
+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
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
特点:
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
运行这个命令的时候,相当于这个命令的家人
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
绝对路径 从根开始的路径 -精确定位
/data
/etc/hosts
相对路径 不从根开始的路径
容易 迷路
#> 1> 标准输出重定向 先把文件的内容清空 把内容放在文件的最后一行
#>> 1>> 追加重定向 把内容放在文件的最后一行
# 支持的命令很少 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
为什么要用xargs
echo ‘--help’ |cat
echo ‘--help’ |xargs cat
参考:https://www.cnblogs.com/wangqiguo/p/6464234.html
cat >>/data/oldboy.txt<<EOF
I
am
studying
linux
EOF
###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
# 操作前备份 操作后检查
# 备份就是 复制需要被分的文件,然后给文件加上后缀
[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
-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
题目: 把 /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
###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命令 [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 找什么类型的
f ----file 文件
d---- directory 目录
用来传递数据
[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
题目:退出到上一级目录删除data目录。(原来在/root/data)
[root@oldboyedu-01 ~]# cd /root/data/
[root@oldboyedu-01 data]# pwd
/root/data
[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
[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
[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
[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
[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中 !表示取反 非
[root@oldboyedu-01 data]# sed ‘/oldboy/d‘ test.txt test liyao
##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.查看每一层目录/文件是否存在
[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文档中的- ,复制到命令行中会出错
即给命令设置一个昵称
##小名 昵称 爱称 外号
为什么会有别名
###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
[root@oldboyedu-01 data]# \cp /mnt/test.txt /tmp/
[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/
###第一个里程碑-查看系统中的别名 [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 100 >/oldboy/ett.txt
题目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
题目:把/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
1.开机自检 BIOS
2.MBR引导
3.GRUB菜单
4.加载内核
5.运行init进程
6.从/etc/inittab读取运行级别
7.根据/etc/rc.sysinit 初始化系统(设置主机名 设置ip)
8.根据运行级别启动对应的软件(开机自启动软件)
9.运行mingetty显示登录界面
1、大写
2、在系统大部分地方都可以使用,含义相同
3、常见的环境变量
LANG PATH PS1
路径-存放的是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
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 -lrt
t 按时间排序
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
已知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
/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/services
tar zcf /tmp/etc-pai.tar.gz /etc/ --exclude-from=/tmp/paichu.txt
已知如下命令及结果:
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分割列的方式
可以统计文件有多少行,有多少单词,多大等
如何查看/etc/services文件的有多少行?
[root@oldboyedu01-nb oldboy]# wc -l /etc/services 10774 /etc/services
屌丝去洗浴中心之路
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
过滤出/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 支持高级正则(公鸡里的战斗机)
单引号 所见即所得 吃啥吐啥 [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
‘‘ 所见即所得,吃啥吐啥 "" 特殊符号会被解析运行 `` ==== $() 先运行里面的命令 把结果留下 > 重定向符号 先清空文件的内容 然后追加文件的最后 >> 追加重定向 追加文件的最后 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
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命令的结果
7.1有一个实际是这样的,情况是:一个lamp的服务器,站点目录下的所有文件军备植入了js代码,导致网站打开时就会调用这个地址,显示广告,造成很恶劣的影响,
解决方案: #1、运营、网站用户发现弹窗广告 #2、运营报告给开发,开发联系运维,共同解决 #3、开发发现的问题就是,站点的目录都被植入了js代码 #4、运维人员解决问题: ## 1)运维备份原始出问题的原始文件 ## 2)历史备份覆盖 ## 3)find+sed覆盖 #5、仔细查看日志,寻找问题发现根源 #6、提供盲羊补牢解决方案(站点目录严格权限规划方案,以及新上线发布规范思路)
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
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
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
显示系统中所有用户的最近一次的登录信息
重启:
init 6 将启动级别改为重启
reboot 立刻重启
shutdown -r 1 一分钟后重启系统
shutdown -c 把正在关机或者重启的命令取消掉,一台远程登录重启,另一台可以在时间内停止这条命令
shutdown -r now =====>相当于reboot
关机:
init 0
poweroff 会断电(物理机)
halt 需要手动关闭电源(物理机)
shutdown -h 1
shutdown -h now ======>相当于poweroff
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
移动光标: ↑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快捷键
每天晚上 12点备份/etc/目录
tar
crond(crontab)定时任务软件(软件包cronie),用的最多的一种
atd,应用在只运行一次的任务
anacron ,非7*24小时运行的服务器(比如开机多长时间运行,关机多长时间运行)
[root@Dao ~]# rpm -qa cronie 查看安装的cronie软件版本 cronie-1.4.4-16.el6_8.2.x86_64 [root@Dao ~]# rpm -ql cronie 查看软件包详细列表 /etc/cron.d /etc/cron.d/0hourly /etc/cron.deny /etc/pam.d/crond /etc/rc.d/init.d/crond # crond定时软件 /etc/sysconfig/crond /usr/bin/crontab /usr/sbin/crond /usr/share/doc/cronie-1.4.4 /usr/share/doc/cronie-1.4.4/AUTHORS /usr/share/doc/cronie-1.4.4/COPYING /usr/share/doc/cronie-1.4.4/ChangeLog /usr/share/doc/cronie-1.4.4/INSTALL /usr/share/doc/cronie-1.4.4/README /usr/share/man/man1/crontab.1.gz /usr/share/man/man5/crontab.5.gz /usr/share/man/man8/cron.8.gz /usr/share/man/man8/crond.8.gz /var/spool/cron
系统定时任务主要和四个文件有关(cron.daily、cron.hourly、cron.monthly、cron.weekly)
系统会定时自动运行文件里面的内容
[root@Dao ~]# ls -l /etc/ |grep cron. -rw------- 1 root root 541 Aug 24 2016 anacrontab drwxr-xr-x. 2 root root 4096 Jan 24 21:32 cron.d drwxr-xr-x. 2 root root 4096 Sep 27 2011 cron.daily # 每天 -rw------- 1 root root 0 Aug 24 2016 cron.deny drwxr-xr-x. 2 root root 4096 Jan 24 21:32 cron.hourly # 每小时 drwxr-xr-x 2 root root 4096 Sep 27 2011 cron.monthly # 每月 -rw-r--r-- 1 root root 457 Sep 27 2011 crontab # 系统定时任务的配置文件之一 drwxr-xr-x 2 root root 4096 Sep 27 2011 cron.weekly # 每周 #有些病毒会在文件中插入定时任务,自动运行,所以很难彻底清除
系统定时任务相关:系统定时任务+logrotate命令 完成对 日志的日志切割、日志轮询
定时对这几个文件进行切割
/var/log/cron /var/log/secure /var/log/messages
查看日志目录下的日志文件
[root@Dao ~]# ls -l /var/log/secure* /var/log/messages* -rw------- 1 root root 1498 Jan 24 21:32 /var/log/messages -rw------- 1 root root 438 Dec 12 12:27 /var/log/messages-20181216 -rw------- 1 root root 141 Dec 16 03:29 /var/log/messages-20181223 -rw------- 1 root root 141 Dec 23 03:14 /var/log/messages-20181230 -rw------- 1 root root 206 Jan 3 12:40 /var/log/messages-20190106 -rw------- 1 root root 45504 Jan 29 21:13 /var/log/secure -rw------- 1 root root 40715 Dec 16 01:10 /var/log/secure-20181216 -rw------- 1 root root 49052 Dec 23 02:34 /var/log/secure-20181223 -rw------- 1 root root 22145 Dec 30 03:08 /var/log/secure-20181230 -rw------- 1 root root 33336 Jan 5 23:38 /var/log/secure-20190106
logrotate里面的内容
[root@Dao ~]# cat /etc/cron.daily/logrotate #!/bin/sh /usr/sbin/logrotate /etc/logrotate.conf EXITVALUE=$? if [ $EXITVALUE != 0 ]; then /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]" fi exit 0 [root@Dao ~]# cat /etc/logrotate.d/syslog /var/log/cron /var/log/maillog /var/log/messages /var/log/secure /var/log/spooler { sharedscripts postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true endscript }
使用的几个命令
crontab -l (list) #查看用户的定时任务(列表)cron table crontab -e (edit) #编辑用户的定时任务 /var/spool/cron/root #(root是用户名 root用户的定时任务)用户定时任务存放的目录
第一次用的时候回提示
[root@Dao ~]# crontab -l no crontab for root #用户没有定时任务
注:Linux中,每个用户的定时任务是分开的
在定时任务中添加项目
[root@Dao ~]# crontab -e 编辑定时任务 # 和vim的操作是一样的,我写入了# pizza然后保存退出 no crontab for root - using an empty one crontab: installing new crontab [root@Dao ~]# crontab -l # pizza
在使用之前,一定要确保定时任务依赖的软件(服务)是否可以使用
# 查看定时任务是否在运行 # 第一种方法 [root@Dao ~]# /etc/init.d/crond status crond is stopped # 第二种方法 [root@Dao ~]# ps -ef |grep crond root 17714 17688 0 22:01 pts/0 00:00:00 grep crond # 查看定时任务,是不是开机自启动,要保证重启后也在运行 [root@Dao ~]# chkconfig |grep crond crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off # 3 位置是on就是开机自启动了
定时任务的开启和关闭
[root@Dao ~]# /etc/init.d/crond start Starting crond: [ OK ] [root@Dao ~]# /etc/init.d/crond status crond (pid 17733) is running... [root@Dao ~]# /etc/init.d/crond stop Stopping crond: [ OK ] [root@Dao ~]# /etc/init.d/crond status crond is stopped
定时任务的开机启动关闭和开启
[root@Dao ~]# chkconfig crond off [root@Dao ~]# chkconfig |grep crond crond 0:off 1:off 2:off 3:off 4:off 5:off 6:off [root@Dao ~]# chkconfig crond on crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
如何用crontab?
[root@Dao ~]# crontab --help crontab: invalid option -- ‘-‘ crontab: usage error: unrecognized option usage: crontab [-u user] file crontab [-u user] [ -e | -l | -r ] (default operation is replace, per 1003.2) -e (edit user‘s crontab) #查看列表 就相当于在查看/var/spool/cron/root -l (list user‘s crontab) #编辑 就相当于在编辑 /var/spool/cron/root -r (delete user‘s crontab) #把当前都删掉,无提示,直接删 -i (prompt before deleting user‘s crontab) #删除之前提示 -s (selinux context)
为什么使用crontab命令,而不是直接操作/var/spool/cron/root这个文件呢?
1、命令有语法检查功能,
2、更方便
/var/spool/cron/ # 定时任务的配置文件所在目录 /var/log/cron # 定时任务的日志文件 运行过程的一个记录,无法显示运行的对不对 /etc/cron.deny # 哪些用户禁止使用定时任务 - 定时任务黑名单
关于如何看日志
什么时间做什么事情
时间分为5个部分-----分时日月周,事情就是命令或者脚本
* #每 /n #隔 */10 * * * * 表示每隔10分钟 - #从哪到哪 07-08 , #分隔 17,18,21
题目:每5分钟同步一下系统的时间
#第一个里程碑-命令 ntpdate ntp1.aliyun.com #注意:编写定时任务要使用命令的绝对路径 /usr/sbin/ntpdate ntp1.aliyun.com #第二个里程碑-写入定时任务 crontab -e #在文件中写入 # sync time by pizza at 20190123 00:15 */5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com #第三个里程碑-检查 ##1)看日志 tail -f /var/log/cron ##2)看结果 查看时间是否在跟新(可以先手动更改)
注:You have mail in /var/spool/mail/root
在修改时间时,会出现这句话。下面会说到
题目:每天的上午7点到11点,每一个小时运行cmd命令
# 注意:在写小时的时候,一定要加上00,否则就表示没分钟 * 07-11 * * * CMD # 表示没分钟都运行 00 07-11 * * * CMD # 表示每个小时都运行
题目:每分钟把自己的名字 追加到/oldboy/oldboy.txt
依照上面的流程:命令----写入----检查
* * * * * echo `whoami` >> /oldboy/oldboy.txt
#1、命令行测试 #2、把命令放入脚本中(命令多的时候) #3、测试脚本是否可以使用 #4、写定时任务 #5、检查结果
注:注释中写清楚备注信息,谁在什么时间做什么
注:超过两条命令都使用脚本
题目:每分钟显示当前系统的时间(年-月-日),追加到/tmp/time.log中
##01、命令 [root@learn-Linux001 ~]# date +%F 2019-01-30 ##02、脚本 [root@learn-Linux001 ~]# mkdir -p /server/scripts 将脚本都放在/server/scripts目录下 [root@learn-Linux001 ~]# vim /server/scripts/date.sh 创建脚本,写入命令 [root@learn-Linux001 ~]# sh /server/scripts/date.sh 2019-01-30 因为创建的文件没有执行权限(默认644),所以我们使用sh来执行 [root@learn-Linux001 ~]# sh /server/scripts/date.sh >>/tmp/date.log [root@learn-Linux001 ~]# cat /tmp/date.log 2019-01-30 测试脚本,成功 ##03、脚本写入定时任务 # print date to file by pizza at 20190128 18:50 * * * * * /bin/sh /server/scripts/date.sh >>/tmp/date.log 使用命令的绝对路径 ##04、检查(看日志,看结果) tail -f /etc/log/cron tail -f /tmp/date.log
当我们在定时任务中,直接使用命令获取时间,得到的结果为空
通过查看日志,发现,执行的命令是date +
因为,%后面的内容内忽略了,如果一定要使用,可以带上撬棍(\)
* * * * * date +\%F-\%T >> /tmp/time.txt >&1
在创建脚本的时候,以sh为后缀
定时任务中,命令或者脚本结果(正确或错误)定向到黑洞(>/dev/null 2>&1)或追加到文件中(>> /tmp/oldboy.txt 2>&1)
否则,就会导致故障
如果没有上面所说的操作,很容易导致硬盘inode空间被占满,从而导致系统服务不正常
定时任务中,命令或者脚本的结果,没有定向到空或者文件中,系统会发邮件 #1、邮件的软件没有开启------大量的小文件堆积在/var/spool/postfix/maildrop/ ---inode满了 #2、邮件软件开启了------定时任务会不断的给root用户发邮件 you have new mail in /var/spool/mail/root #查看邮件服务开启没有? [root@learn-Linux001 ~]# /etc/init.d/postfix status master (pid 1592) is running...
tar zcf
tar zcvf 不可取
切到目标目录的上一级打包目标
[root@learn-Linux001 ~]# cd / [root@learn-Linux001 /]# tar zcf /tmp/ser-$(date +%F).tar etc/services 或者 cd / && tar zcf /tmp/ser-$(date +%F).tar etc/services
否则,可能会出现找不到命令的错误
因为,定时任务运行脚本的时候可以识别的PATH只有 /usr/bin 和 /bin
解决方法: #1、使用绝对路径 /sbin/ifconfig #2、在脚本开头重新定义一下PATH ## export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
用户的定时任务,默认要存放在当前用户的家目录
系统的定时任务,默认要存放在根目录下
01)、定时任务运行脚本的时候可以识别的PATH只有 /usr/bin 和 /bin
02)、java环境变量故障案例
linux定时任务生产java服务无法执行问题案例http://oldboy.blog.51cto.com/2561410/1541515
创建环境
[root@learn-Linux001 oldboy]# touch {1..500000}.txt -bash: /bin/touch: Argument list too long # 数量太多,无法运行,使用下面的方法 [root@learn-Linux001 oldboy]# echo {1..500000}.txt|xargs touch
最后导致no space left on device
[root@learn-Linux001 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 6.9G 1.5G 5.1G 22% / tmpfs 926M 0 926M 0% /dev/shm /dev/sda1 190M 35M 146M 19% /boot [root@learn-Linux001 ~]# df -hi Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda3 452K 452K 0 100% / tmpfs 232K 1 232K 1% /dev/shm /dev/sda1 50K 38 50K 1% /boot
是因为inode满了
[root@learn-Linux001 ~]# cd /oldboy/ [root@learn-Linux001 oldboy]# rm -f * -bash: /bin/rm: Argument list too long 直接删除失败 [root@learn-Linux001 oldboy]# ls |xargs rm -f
[root@learn-Linux001 oldboy]# ll
total 0 这样删除,成功(删除小文件)
可能会遇到更多的文件,这样也不能删除
解决办法是,筛选后进行批量删除
#0、创建脚本 #1、脚本必须放在/etc/init.d/目录下面 #2、脚本要有 执行权限 chmod +x #3、脚本的开头要有# chkconfig: 2345 99 99 (注意空格) 2345表示运行级别,99表示脚本是开机启动顺序,99代表关闭顺序 注意开启或者关系顺序不要重复了 #4、加入到chkconfig中,让chkconfig管理 chkconfig --add 脚本名字
以上使用文档,可以查看chkconfig帮助: man chkconfig
可以尝试翻译出来
之前我们修改配置,总是会有临时生效和永久生效,这两类修改
那么这两类修改有什么规律呢?
在我看来,临时生效是执行了命令。而永久生效需要修改某些特定文件
但是永久关闭防火墙chkconfig iptables on命令 好像并不是在修改文件呀,这是怎么一回事呢?
这就需要探寻一下chkconfig背后到底做了什么
其本质,也是修改了文件,修改的文件是/etc/下的rc3.d这类文件夹下的文件,我们只拿rc3.d巨了这个例子,etc下还有类似的rc1.d、rc2.d等
[root@learn-Linux001 ~]# ll /etc/rc3.d/ total 0 lrwxrwxrwx. 1 root root 16 Jan 30 16:25 K01smartd -> ../init.d/smartd lrwxrwxrwx. 1 root root 16 Jan 30 16:25 K10psacct -> ../init.d/psacct lrwxrwxrwx. 1 root root 19 Jan 30 16:24 K10saslauthd -> ../init.d/saslauthd lrwxrwxrwx. 1 root root 18 Jan 30 16:25 K15svnserve -> ../init.d/svnserve lrwxrwxrwx. 1 root root 18 Jan 30 16:25 K61nfs-rdma -> ../init.d/nfs-rdma lrwxrwxrwx. 1 root root 14 Jan 30 16:25 K74ntpd -> ../init.d/ntpd lrwxrwxrwx. 1 root root 17 Jan 30 16:24 K75ntpdate -> ../init.d/ntpdate lrwxrwxrwx. 1 root root 19 Jan 30 16:25 K75quota_nld -> ../init.d/quota_nld lrwxrwxrwx. 1 root root 21 Jan 30 16:23 K87restorecond -> ../init.d/restorecond lrwxrwxrwx. 1 root root 20 Jan 30 16:24 K89netconsole -> ../init.d/netconsole lrwxrwxrwx. 1 root root 15 Jan 30 16:23 K89rdisc -> ../init.d/rdisc ... ...
这些都是软连接
做一个开启和关闭防火墙的对比
[root@learn-Linux001 ~]# chkconfig iptables on [root@learn-Linux001 ~]# ll /etc/rc3.d/ |grep ipt lrwxrwxrwx. 1 root root 18 Jan 30 22:29 S08iptables -> ../init.d/iptables [root@learn-Linux001 ~]# chkconfig iptables off [root@learn-Linux001 ~]# ll /etc/rc3.d/ |grep ipt lrwxrwxrwx. 1 root root 18 Jan 30 22:30 K92iptables -> ../init.d/iptables
发现过滤出来的文件发生了变化,所以,可以猜想
chkconfig iptables on ===>/etc/rc3.d/ S08iptables -> ../init.d/iptables chkconfig iptables off ===>/etc/rc3.d/ K92iptables -> ../init.d/iptables S----->start K----->kill 验证: #0、首先防火墙是关闭的 [root@learn-Linux001 ~]# chkconfig iptables off [root@learn-Linux001 ~]# ll /etc/rc3.d/ |grep ipt lrwxrwxrwx. 1 root root 18 Jan 30 22:30 K92iptables -> ../init.d/ipta #1、移除 K92iptables [root@learn-Linux001 ~]# mv /etc/rc3.d/K92iptables /tmp [root@learn-Linux001 ~]# ll /etc/rc3.d/ |grep ipt #2、创建S08iptables作为iptables的软连接 [root@learn-Linux001 ~]# ln -s /etc/init.d/iptables /etc/rc3.d/S08iptables [root@learn-Linux001 ~]# ll /etc/rc3.d/ |grep ipt lrwxrwxrwx. 1 root root 20 Jan 30 22:41 S08iptables -> /etc/init.d/iptables #3、查看并验证 [root@learn-Linux001 ~]# chkconfig |grep ipt iptables 0:off 1:off 2:off 3:on 4:off 5:off 6:off
通过查看iptables文件的内容,可以看到# chkconfig: 2345 08 92
08是开启顺序,92是关闭顺序
UID相当于身份证号,GID是用户组ID号,相当于户口本编号
UID:0 皇帝
UID:1-499 傀儡,为了满足每个进程、软件需要一个用户和用户组,本身无法使用
1、每个进程、软件需要一个用户和用户组
2、傀儡用户不需要,也无法登陆系统
3、用户的命令解释器/sbin/nologin
非虚拟用户的命令解释器是/bin/bash
UID:500+
root:x:0:0:root:/root:/bin/bash pizza:x:500:500::/home/pizza:/bin/bash #第一列:用户名 #第二列:x 代表密码,如果删除x。那么这个用户就没有密码了,随便进入 #第三列:UID #第四列:GID #第五列:用户的说明信息 #第六列:用户家目录 ~ #第七列:用户使用的的命令解释器(shell) 解释器种类 /bin/bash 用户默认的解释器 /sbin/nologin 虚拟用户 /bin/sh 和/bin/bash差不多,用于解释脚本 ...还有几个放在/etc/shells中 [root@learn-Linux001 ~]# cat /etc/shells /bin/sh /bin/bash /sbin/nologin /bin/dash Ubuntu默认的 /bin/tcsh Unix csh的升级版 /bin/csh Unix 注意:不要随便切换用户的命令解释器
新用户的家目录的模板
[root@learn-Linux001 ~]# ls -la /etc/skel/ total 20 drwxr-xr-x. 2 root root 4096 Jan 30 16:19 . drwxr-xr-x. 78 root root 4096 Feb 1 10:14 .. -rw-r--r--. 1 root root 18 Mar 23 2017 .bash_logout # 用户退出的时候运行里面的命令 -rw-r--r--. 1 root root 176 Mar 23 2017 .bash_profile # 相当于 /etc/profile -rw-r--r--. 1 root root 124 Mar 23 2017 .bashrc # 相当于 /etc/bashrc #
新用户家目录是什么样子,就可以在这里修改!
[root@learn-Linux001 ~]# echo ‘my wechat is: DYbest-‘ >/etc/skel/readme.txt [root@learn-Linux001 ~]# ll /etc/skel/ total 4 -rw-r--r--. 1 root root 22 Feb 1 12:22 readme.txt [root@learn-Linux001 ~]# useradd Dao [root@learn-Linux001 ~]# ll /home/Dao/ total 4 -rw-r--r--. 1 Dao Dao 22 Feb 1 12:22 readme.txt [root@learn-Linux001 ~]# cat /home/Dao/readme.txt my wechat is: DYbest- [root@learn-Linux001 ~]# ll /home/pizza/ total 0
故障提示:
-bash-4.1$
-bash-4.1$
模拟:
[root@learn-Linux001 ~]# su - Dao [Dao@learn-Linux001 ~]$ \rm -f .bash* 搞点破坏 [Dao@learn-Linux001 ~]$ [Dao@learn-Linux001 ~]$ logout 退出再进去,故障就出来了 [root@learn-Linux001 ~]# su - Dao -bash-4.1$
-bash-4.1$ ls -la 查看一下用户家目录下的文件
total 16
drwx------. 2 Dao Dao 4096 Feb 1 12:28 .
drwxr-xr-x. 4 root root 4096 Feb 1 12:23 ..
-rw-------. 1 Dao Dao 22 Feb 1 12:28 .bash_history
-rw-r--r--. 1 Dao Dao 22 Feb 1 12:22 readme.txt
-bash-4.1$
正常情况下,用户目录下还有很多文件,但是现在没有了
出现这种情况的原因:
用户下的与环境变量相关的隐藏文件 被删除了
-bash-4.1$ echo $PS1 \s-\v\$ 正常的是: [root@learn-Linux001 ~]# echo $PS1 [\u@\h \W]\$
如何解决:
从其他地方复制这些文件
#方法一:从/etc/skel 复制 [root@learn-Linux001 ~]# su - Dao -bash-4.1$ cp /etc/skel/.bash* ~ -bash-4.1$ logout [root@learn-Linux001 ~]# su - Dao [Dao@learn-Linux001 ~]$ logout [root@learn-Linux001 ~]# #方法二:从其他用户家目录复制 -bash-4.1$ cp /home/pizza/.bash* ~ cp: cannot stat `/home/pizza/.bash*‘: Permission denied -bash-4.1$
报错了,因没有权限,你可以解决吗?
先想一下,在看如何解决
-bash-4.1$ logout [root@learn-Linux001 home]# cp /home/pizza/.bash* /home/Dao/ [root@learn-Linux001 home]# su - Dao [Dao@learn-Linux001 ~]$ #也许还有其他办法
.*表示的含义 在正则中,就是所有 在命令行中,以点开头的所有文件和目录 有点参与表示的含义有以下几种: #1、以点开头的所有东西 #2、当前目录 #3、.. 当前目录的上一级目录 #4、表示以点开头隐藏的文件或目录 #5、.bash* 所以,rm .* -fr 将摧毁一切,请慎重
添加用户
-u # 指定用户的uid -s # 指定用户使用的shell -M # 表示不创建家目录 一般常见虚拟用户使用 -g # 指定 用户属于的组(组的名字) 添加用户的时候 默认创建一个与用户名一样的家庭
-c # 添加说明信息
题目:添加一个用户xiaodao001 ,制定uid为888 禁止用户登录系统,不创建家目录
[root@learn-Linux001 home]# useradd xiaodao001 -u 888 -s /sbin/nologin -M [root@learn-Linux001 home]# grep xiaodao /etc/passwd xiaodao001:x:888:888::/home/xiaodao001:/sbin/nologin You have new mail in /var/spool/mail/root [root@learn-Linux001 home]# ll total 8 drwx------. 2 Dao Dao 4096 Feb 1 12:50 Dao drwx------. 2 pizza pizza 4096 Jan 30 23:14 pizza [root@learn-Linux001 home]#
删除用户
#一般的删除用户的操作是:把这个用户在/etc/passwd中注释 userdel默认不会删除用户的家目录和邮箱 -r 连窝端 #删除与用户相关的所有信息(家目录)
修改用户信息,他的参数和useradd 是差不多的
-s #修改用户使用的shell -g #修改属于的家庭 用户组的名字 -G #属于多个家庭 -c # 修改用户信息 [root@learn-Linux001 home]# usermod -g root pizza [root@learn-Linux001 home]# id pizza uid=500(pizza) gid=0(root) groups=0(root) [root@learn-Linux001 home]# usermod -G root,pizza pizza [root@learn-Linux001 home]# id pizza uid=500(pizza) gid=0(root) groups=0(root),500(pizza) [root@learn-Linux001 home]# usermod -c ‘a new user‘ pizza [root@learn-Linux001 home]# id pizza uid=500(pizza) gid=0(root) groups=0(root),500(pizza) [root@learn-Linux001 home]# grep pizza /etc/passwd pizza:x:500:0:a new user:/home/pizza:/bin/bash [root@learn-Linux001 home]#
修改密码
[root@learn-Linux001 home]# passwd pizza Changing password for user pizza. New password:
非交互式设置密码
[root@learn-Linux001 home]# echo ‘123456‘ | passwd --stdin pizza Changing password for user pizza. passwd: all authentication tokens updated successfully.
注:- -stdin 参数只能是root用户使用
注:这里有一个漏洞:这样设置完密码之后,通过history就可以查看到我们设置的密码
[root@learn-Linux001 home]# history |tail -5 39 passwd pizza 40 echo ‘123456‘ | passwd --stdin pizza 看到密码了 41 history 42 history |tail -2 43 history |tail -5 [root@learn-Linux001 home]# history -c 通过此命令清除历史 [root@learn-Linux001 home]# history 1 history
#1、密码要复杂12位以上字母数字特殊字符 #2、大的企业用户和密码统一管理(相当于活动目录(AD),openidap域) #3、动态密码:动态口令,第三方提供,自己开发也简单。 # 如何保存密码: keepass 相当于自己弄了一个保险柜 lastpass 相当于在别人那里租了一个保险柜,是一个在线软件
1、运维的软件一定要从官网下载,将两个文件都下好之后,开始安装使用
https://keepass.info/download.html
2、下载翻译包
3、将两个文件同时解压
4、将翻译包KeePass-1.36-Chinese_Simplified下的Chinese_Simplified.lng文件放到软件包\KeePass-1.37\Languages下
5、双击KeePass.exe使用
点击不跟新
6、进入主界面,选择view---change language,选择chinses
重启后,进入中文界面
7、文件---新建,创建一个‘’保险箱‘’
8、保险箱创建好了,可以自定义创建密码类型,右键单击常规---创建子项目server,在server下创建密码记录
创建记录
点击使用生成随机密码
如果不满意,可以一直点击生成,指导满意为止,点击接受---提交
要使用的时候,复制密码,然后在命令行中使用
9、密码记录创建好了之后,可以将这个保险箱保存在本地,下次使用时,需要输入保险箱密码
10、这个软件还有很多功能,欢迎尝试探究,并分享出来
怎么让系统更安全呢?
安装系统和软件都最小化安装
运行的软件越少越好
禁止root用户远程登录
修改远程连接端口号22
进行日志分析:failed 或者failure(/var/log/secure文件)
给系统常用命令 +i
给系统配置文件 +a
文件内容的变化 ====> 指纹变化
通过对比指纹,就可以知道文件内容有没有变化
1、给文件创建指纹
md5sum 文件
2、如何快速对比指纹
把你的指纹记录下来 md5sum 文件 > 放置指纹的文件(指纹库)
进行对比 md5sum -c 文件
3、使用定时任务+md5sum定时检查
[root@learn-Linux001 pizza]# echo pizza.com > learn.txt [root@learn-Linux001 pizza]# md5sum /pizza/learn.txt 4c9168f0838663a132a2d09f19caecfc /pizza/learn.txt [root@learn-Linux001 pizza]# md5sum /pizza/learn.txt 4c9168f0838663a132a2d09f19caecfc /pizza/learn.txt 指纹没有变化 #将文件指纹存在一个文件中 [root@learn-Linux001 pizza]# md5sum /pizza/learn.txt >police.log [root@learn-Linux001 pizza]# #对比 ## 没有改变时候,检查结果是OK [root@learn-Linux001 pizza]# md5sum -c police.log /pizza/learn.txt: OK ## 加入新内容太后,检查结果是FAILED [root@learn-Linux001 pizza]# echo ‘talk is cheap‘ >>learn.txt [root@learn-Linux001 pizza]# md5sum -c police.log /pizza/learn.txt: FAILED md5sum: WARNING: 1 of 1 computed checksum did NOT match [root@learn-Linux001 pizza]# # 文件内容已经变化了
注:我们平时在下载一些重要的文件的时候,网站会提供MD5值,下载完成后,我们用软件(notepad++中就有这个功能)生成MD5值之后,与官网给的值进行比较,如果是一样的,就说明这个软件包是完整的,或者没有被修改过的
参考:http://lidao.blog.51cto.com/3388056/1910889
批量添加10个用户stu01,stu02......stu10,并设置8位随机密码(禁止使用for,while等循环)
先想一下吧......
题目看似非常简单,实际上,对Linux基础命令要求非常高,不能使用shell循环就是为了考同学们的基础知识的。 话不多说,言归正传,说实话如果单纯为了到达这道题的结果,只要基础命令好的同学,也很简单,我先说一下我看到题目的思路吧。 1、用户名称的批量生成。 2、随机密码生成的方法。 3、因为要一条命令搞定,所以考虑构造一个命令,使之符合要求,最后交给bash执行。 思路明确之后,那我们就开始着手做吧。 <1> 用户名称的批量生成 因为我们要生成类似如下的序列: stu01 stu02 stu03 ...... stu08 stu09 stu10 法一:花括号展开{..} echo stu{01..10} stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10 因为我们需要的是竖行排列的,那怎么办呢? 这里说明一下为什么非要竖行排列的,因为我们后面构造命令,是期望一行一行的执行,所以需要让它竖列排序的。 那我们就想办法呀,看看有什么命令能搞定或者echo本身能不能搞定啊。 于是我们又有了两个思路: ①通过echo本身可以打印出竖列的效果,但是此处似乎用不上啊。 echo -e "stu01\nstu02" stu01 stu02 ②想办法把echo打印出来的序列中的空格替换成回车不就行了嘛,于是,我们想到了tr命令。 1 2 3 4 5 6 7 8 9 10 11 [root@oldboylinux ~]# echo -e stu{01..10}|tr " " "\n" stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10 法二:利用seq命令,seq本身就是干这活的呀,是不是,哈哈。 1 2 3 4 5 6 7 8 9 10 11 [root@oldboylinux ~]# seq 10 1 2 3 4 5 6 7 8 9 10 似乎不是我们想要的结果呀,我们想要的是 01 02 ... 09 10 那怎么办啊,想想老师的运维思路,你想要的结果,也许就是写程序的人想要的结果,也就是说很可能有类似参数可以用啊,结果一查帮助,果然,而且还有意外的收获。 ①seq的"-w"参数,就是专门生成类似序列需求而生的。 ②seq的"-f"参数,可以格式化输出序列,我去这不正是我们想要的效果嘛,赶紧试试看。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [root@oldboylinux ~]# seq -w 5 1 2 3 4 5 [root@oldboylinux ~]# seq -w 05 01 02 03 04 05 [root@oldboylinux ~]# seq -w 10 01 02 03 04 05 06 07 08 09 10 如果我们单纯只是用"-w"参数,那还需要配合其他命令才能达到我们想要的这样的效果。 stu01 stu02 stu03 ...... 比如:用sed替换 1 2 3 4 5 6 7 8 9 10 11 seq -w 10|sed ‘s#.*#stu&#g‘ stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10 但是我们"man seq"不是看到还有"-f"参数嘛,那还不赶紧试试看。 1 2 3 4 5 6 7 8 9 10 11 seq -f "stu%02g" 10 stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10 解释一下,后面引号里面的内容,这个是与C语言printf格式化输出类似,%号前面指定字符串,后面的02g中的2表示输出列宽为2列,0表示用0填充不足的部分,默认是用空格填充不足的部分,g是表示整数输出。 好了,序列我们有了,下一个就是想办法生成8位随机密码了。 <2> 8位随机密码的生成 Linux系统下生成随机密码的方法有很多,我们最容易想到的就是$RANDOM,这是一个由系统自动维护的随机数。我们参考网络资料,简单介绍其中的四种方法供大家参考。 ①通过时间获得随机数(date) 这个也是我们经常用到的,可以说时间是唯一的,也不会重复的,从这个里面获得同一时间的唯一值。适应所有程序里面了。 例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 [chengmo@centos5 shell]$ date +%s 1287764773 #获得时间戳,当前到:1970-01-01 00:00:00 相隔的秒数 #如果用它做随机数,相同一秒的数据是一样的。在做循环处理,多线程里面基本不能满足要求了。 [chengmo@centos5 shell]$ date +%N 738710457 #获得当前时间的纳秒数据,精确到亿分之一秒。 #这个相当精确了,就算在多cpu,大量循环里面,同一秒里面,也很难出现相同结果,不过不同时间里面还会有大量重复碰撞 [chengmo@centos5 shell]$ date +%s%N 1287764807051101270 #这个可以说比较完美了,加入了时间戳,又加上了纳秒 通过上面说明,用它来做随机数的基数了,接下来我们看怎么样获得一段数据内怎么样获得随机数。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 #!/bin/sh #写个随机函数,调用方法random min max #在min 与 max直接获得随机整数 #copyright chengmo QQ:8292669 #获得随机数返回值,shell函数里算出随机数后,更新该值 function random() { min=$1; max=$2-$1; num=$(date +%s+%N); ((retnum=num%max+min)); #进行求余数运算即可 echo $retnum; #这里通过echo 打印出来值,然后获得函数的,stdout就可以获得值 #还有一种返回,定义全价变量,然后函数改下内容,外面读取 } #得到1-10的seq数据项 for i in {1..10}; do out=$(random 2 10000); echo $i,"2-10000",$out; done; ②通过内部系统变量($RANDOM) 其实,linux已经提供有个系统环境变量了,直接就是随机数,哈哈,觉得刚学习方法,是不是白费了!! 1 2 3 4 5 6 [chengmo@centos5 shell]$ echo $RANDOM 10918 [chengmo@centos5 shell]$ echo $RANDOM 10001 #连续2次访问,结果不一样,这个数据是一个小于或等于5位的整数 可能有疑问了,如果超过5位的随机数怎么得到呢? 呵呵,加个固定10位整数,然后进行求余,跟例1 一样了。接下来的例子又是我们自立更生做了。 ③通过系统内部唯一数据生成随机数(/dev/random,urandom) 我们知道dev目录下面,是linux一些默认设备,它给我们感觉就是放的是键盘,硬盘,光驱等设备的对应文件了。 其实linux有些设备很特殊,有特殊用途。前面我们说到的:/dev/[udp|tcp]/host/port比较特殊吧。呵呵,有扯远了。 /dev/random设备,存储着系统当前运行的环境的实时数据。它可以看作是系统某个时候,唯一值数据,因此可以用作随机数元数据。我们可以通过文件读取方式,读得里面数据。/dev/urandom这个设备数据与random里面一样。只是,它是非阻塞的随机数发生器,读取操作不会产生阻塞。 得到整型数据,然后,类似一的方法就可以获得到随机数了。 题外话:在程序里面,我们经常md5得到唯一值,然后是字符串的,如果想表示成整型方式,可以通过crc函数.crc是循环冗余校验,相同数据通过运算,都会得到一串整型数据。现在这种验证应用很广。详细要了解,可以参考:crc. ④读取linux 的uuid码 在提到这个之前,有个概念,就是什么是uuid呢? UUID码全称是通用唯一识别码 (Universally Unique Identifier, UUID),它 是一个软件建构的标准,亦为自由软件基金会 (Open Software Foundation, OSF) 的组织在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部份。 UUID 的目的,是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。如此一来,每个人都可以创建不与其它人冲突的 UUID。在这样的情况下,就不需考虑数据库创建时的名称重复问题。它会让网络任何一台计算机所生成的uuid码,都是互联网整个服务器网络中唯一的。它的原信息会加入硬件,时间,机器当前运行信息等等。 UUID格式是:包含32个16进位数字,以“-”连接号分为五段,形式为8-4-4-4-12的32个字符。范例;550e8400-e29b-41d4-a716-446655440000 ,所以:UUID理论上的总数为216 x 8=2128,约等于3.4 x 1038。 也就是说若每奈秒产生1兆个UUID,要花100亿年才会将所有UUID用完。 其实,大家做数据库设计时候,肯定听说过,guid(全局唯一标识符)码,它其实是与uuid类似,由微软支持。 这里编码,基本有操作系统内核产生。大家记得把,在windows里面,无论数据库,还是其它软件,很容易得到这个uuid编码。 linux 的uuid码 linux的uuid码也是有内核提供的,在/proc/sys/kernel/random/uuid这个文件内。其实,random目录,里面还有很多其它文件,都与生成uuid有关系的。 1 2 3 4 5 6 7 8 9 [chengmo@centos5 ~/shell]$ cat /proc/sys/kernel/random/uuid dff68213-b700-4947-87b1-d9e640334196 [chengmo@centos5 ~/shell]$ cat /proc/sys/kernel/random/uuid 7b57209a-d285-4fd0-88b4-9d3162d2e1bc #连续2次读取,得到的uuid是不同的 [chengmo@centos5 ~/shell]$ cat /proc/sys/kernel/random/uuid| cksum | cut -f1 -d" " 2141807556 #同上方法得到随机整数 我们用的是方法是第二种,然后结合md5sum,最后取出8位作为密码,因为这样获取的密码是字符加数字 1 2 3 4 5 6 7 8 [root@oldboylinux ~]# echo $RANDOM|md5sum|cut -c 1-8 d8c57fd6 [root@oldboylinux ~]# echo $RANDOM|md5sum|cut -c 1-8 b6e693b6 [root@oldboylinux ~]# echo $RANDOM|md5sum|cut -c 1-8 6dbb7cac [root@oldboylinux ~]# echo $RANDOM|md5sum|cut -c 1-8 663bda06 好了,到这里为止,我们前两步都有办法解决了,那就是最后一步了,把他们拼凑成我们想要的命令效果,然后交个bash执行就可以了。 <3> 拼凑想要的语句效果提交给bash执行 #seq -f "stu%02g" 10|sed -nr ‘s#(.*)#useradd \1;random=$(echo $RANDOM|md5sum|cut -c 1-8);echo "$random"|passwd --stdin \1#gp‘|bash -x &>useradd.txt 好了,我们来分开解释一下每一部分的作用。 ①seq -f "stu%02g" 10 这一部分就是用于批量生成用户名; ②sed -nr ‘s#(.*)#useradd \1;random=$(echo $RANDOM|md5sum|cut -c 1-8);echo "$random"|passwd --stdin \1#gp‘ 这一段,就是用sed的替换功能来拼凑我们想要的命令结果,拼凑的结果类似于如下结果, \1表示前面(.*)内匹配到的字符串; useadd stu01;random=$(echo $RANDOM|md5sum|cut -c 1-8);echo "$random"|passwd --stdin stu01 ③bash -x &>useradd.txt 这一段,按道理说,只要有"bash"就可以了,结果肯定会执行了,但是我们想一下,是不是哪里还有点小问题啊,那就是我们自己创建的用户,密码是什么呢?你不会告诉我,你也不知道吧,哈哈,一开始我就是干的呀,后面想测试一下能不能用创建的用户登陆系统时,发现完蛋,不知道登录密码,所以想再交个bash执行前,把内容输出一份到文件,可是前面没有执行啊,哪里有密码呢,一度以为这条路是必定有瑕疵了,后来又转念一想,bash不是有调试参数嘛,OK,那就试试,结果很不错,可是又无法追加到文件,奇怪呀,原来调试信息是当错误信息来处理的呀,那就来个绝的,管你是标准输出还是错误输出都给我到指定文件去,这下就OK了, 完美。 你是不是以为到这里就结束了,哼,才不会呢!继续往下看哦,更多精彩还在后面呢。。。 拼凑方法大总结: ①sed替换大法,即sed ‘s#要替换的内容#替换后的内容#g‘,例子见上面和最后面的案例。 ②awk拼凑大法,例子如下: #echo -e "$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)"|awk ‘{print "echo "$1"|""passwd --stdin stu0"NR}‘|awk ‘{print "useradd " $NF";"$0}‘|tee useradd.txt|bash 1、echo -e "$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)" 这一大段,看着好吓人啊,其实就是一个目的重复10次,你分开看就是这样的 【$(echo $RANDOM|md5sum|cut -c 1-8)\n】就是用来生成8位随机密码,重复10次,还记得最开始的echo -e参数换行大法嘛,没错,这里就用上了。 2、awk ‘{print "echo "$1"|""passwd --stdin stu0"NR}‘|awk ‘{print "useradd " $NF";"$0}‘ 这一行就是用来拼凑我们想要实现的效果语句,具体类似如下: useradd stu01;echo 1b487225|passwd --stdin stu01 3、tee useradd.txt 这一行就是为了保存生成密码和用户名到文件useradd.txt 4、bash 把上面拼凑的语句交给bash,执行。 其他拼凑方法参考: 基本上都是类似上述思路,只是实现方法有所不同罢了,各位自己斟酌吧,这些都搞定,说明我们的Linux基础就真OK了,重点关注一下加红的部分的实现思路。 ①#echo a2stu{01..02}|xargs -n1|awk ‘{print"useradd "$0" && mkpasswd -l 8 >>/tmp/mima.txt;tail -1 /tmp/mima.txt|passwd --stdin "$0}‘|bash ②#echo stu{01..10} | sed "s# #\n#g" | awk ‘{print "useradd " $1 " -p " "echo $[RANDOM**3]|cut -c 1-8"}‘|bash ③#echo stu{01..10} | sed "s# #\n#g" | awk ‘{cmd="echo $[RANDOM3]|cut -c 1-8";print "useradd " $1 " -p " "`echo $[RANDOM3]|cut -c 1-8`"}‘ |bash ④echo stu{1..10}|xargs -n 1|awk ‘{print "useradd", $1,"&& " "echo date +%N|cut -c 1-8 |" "passwd --stdin",$1 }‘|bash ⑤# echo stu{01..10}|xargs -n 1|sed -n ‘s#.*#useradd & \&\& echo date +s%|cut -c 1-8|passwd --stdin & #gp‘|bash ⑥#echo stu{1..10}|xargs -n 1|awk ‘{print "useradd", $1,"&& " "echo date +%N|cut -c 1-8 |" "passwd --stdin",$1 }‘|bash ⑦#echo stu{01..10}|xargs -n1 useradd && echo stu{01..10}:date +%N|cut -c1-8|xargs -n1|tee -a pass.txt|chpasswd ⑧#echo user{01..10} | xargs -n1| sed -n ‘s/.*/useradd &\n echo &|md5sum|cut -c 1-8|passwd --stdin &/p‘|bash ⑨#echo stu{01..10}|tr " " "\n"|sed -r ‘s#(.*)#useradd \1;pass=echo $((RANDOM+123456))|md5sum|cut -c 2-9;echo $pass|passwd --stdin \1;echo "\1 echo $pass" >>/tmp/b.log#g‘|bash ⑩#echo stu{01..10}|xargs -n1|sed -nr ‘s#^(.*)$#useradd \1;echo $(date +%T)|md5sum|cut -c 1-8 >/root/\1.txt;cat /root/\1.txt|passwd --stdin \1#gp‘ >>/root/useradd.txt 2>&1 #echo stu{01..10}:$(date +%N)|sed ‘s# #\n#g‘ >/mnt/pass;awk -F ":" ‘{print $1}‘ /mnt/pass |xargs -n 1 useradd;pwunconv;chpasswd </mnt/pass;pwconv #echo stu{01..10}|tr " " "\n"|sed -r ‘s#(.*)#useradd \1;lc=$((RANDOM+10000000)); echo "$lc"|passwd --stdin \1#g‘|bash #echo stu{01..10}:$(cut -c 1-8 <<< $(md5sum <<< $RANDOM))|xargs -n1|tee useradd.txt|awk -F ‘:‘ ‘{print "useradd "$1 " && echo " $2 "|passwd --stdin " $1}‘|bash #echo stu{01..10} |tr ‘ ‘ ‘\n‘|sed -rn ‘s@^(.*)$@useradd \1 ; echo $RANDOM|md5sum|cut -c 1-8 >/data/\1;cat /data/\1|passwd --stdin \1@gp‘|bash #$echo stu{01..10}c$[$RANDOM**3] | sed ‘s# #\n#g‘ | cut -c 1-14 | awk -F‘c‘ ‘{print"useradd " $1" && echo "$2" | passwd --stdin "$1}‘ | bash #echo stu{1..10}|xargs -n1 useradd ;echo stu{1..10}:cat /dev/urandom|tr -dc 0-9|fold -w8|head -1|xargs -n1|tee -a pass.txt|chpasswd
修改文件或目录所有者和属于的用户组
-R 递归修改文件或者目录的所有者和用户组,危险的命令,没有提示
chown pizza learnLinux.txt # 只修改文件的所有者 chown pizza.pizza learnLinux.txt # 修改了文件的所有者和所属组
创建用户组
-g 指定用户组的gid数字
题目:添加一个虚拟用户mysql,指定用户的uid、gid都是999
[root@learn-Linux001 ~]# useradd -s /sbin/nologin -M -u 999 mysql [root@learn-Linux001 ~]# id mysql uid=999(mysql) gid=999(mysql) groups=999(mysql)
-u 指定了uid和gid
官方写法
[root@learn-Linux001 ~]# groupadd -g 999 mysql
[root@learn-Linux001 ~]# useradd -s /sbin/nologin -M -u 999 -g mysql mysql
id # 查看用户信息。查看用户是否存在,查看用户uid、gid,查看用户属于哪个组 /etc/group # 某个用户组下面有什么用户?(没有命令,就在这个文件中查看) w # 显示系统中已经远程登录的用户 last # 哪个用户在什么时候 从哪里 运城登陆你的系统 用户登录的信息 lastlog # 显示linux中所有用户最近一次远程登录的信息
#1、w [root@learn-Linux001 ~]# w 11:12:50 up 39 min, 1 user, load average: 0.25, 0.15, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 10.0.0.1 10:58 0.00s 0.26s 0.09s w #2、uptime [root@learn-Linux001 ~]# uptime 11:28:27 up 55 min, 1 user, load average: 0.00, 0.00, 0.00 #3、top,交互式,相当于uptime+free -h+ps -ef三个命令 [root@learn-Linux001 ~]# top top - 11:23:18 up 50 min, 1 user, load average: 0.00, 0.01, 0.00 #和w的第一行一样 Tasks: 90 total, 1 running, 89 sleeping, 0 stopped, 0 zombie Cpu(s): 0.3%us, 0.3%sy, 0.0%ni, 99.0%id, 0.0%wa, 0.0%hi, 0.3%si, 0.0%st Mem: 1894988k total, 256244k used, 1638744k free, 48392k buffers Swap: 786428k total, 0k used, 786428k free, 55980k cached # 默认按照CPU排序,按M就按照内存排序。按P回到以cpu排序 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2072 root 20 0 15036 1220 948 R 0.3 0.1 0:00.25 top 1 root 20 0 19356 1560 1236 S 0.0 0.1 0:01.76 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 4 root 20 0 0 0 0 S 0.0 0.0 0:00.05 ksoftirqd/0 ... 以下三个命令需要安装 #4、htop 增强版的top命令 #5、iotop 显示系统中每个进程使用的磁盘IO #6、iftop 显示系统网络流量
/var/log/secure 和 /var/log/messages 这样的文件,普通用户是无法查看的
[root@learn-Linux001 ~]# ll /var/log/secure -rw-------. 1 root root 0 Feb 3 11:11 /var/log/secure # 权限是600
当开发人员需要查看内容的时候,我们也不能给文间修改权限,因为修改之后所有人都能看了~!还有一个办法就是suid(运行某个命令的时候相当于命令的所有者),但是这个命令的权限太大了。
怎么做才是安全的呢?
- 是su的一个参数,表示切换用户的时候更新环境变量
开发人员,其他人员,想临时使用 看系统日志、删除软件日志、认识添加用户
普通用户想临时成为皇帝
sudo -l 查看当前用户的尚方宝剑
[pizza@learn-Linux001 ~]$ sudo -l We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility.
[sudo] password for pizza:
Sorry, user pizza may not run sudo on learn-Linux001.
visudo 给用户授予尚方宝剑
pizza ALL(ALL) /bin/ls,/bin/touch 添加的格式
[pizza@learn-Linux001 ~]$ sudo -l [sudo] password for pizza: Matching Defaults entries for pizza on this host: !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin User pizza may run the following commands on this host: (ALL) /bin/ls, (ALL) /bin/touch [pizza@learn-Linux001 ~]$
在使用命令的时候,加上sudo(带上尚方宝剑)就能生效了
[pizza@learn-Linux001 ~]$ ls /root/ ls: cannot open directory /root/: Permission denied 没有权限 [pizza@learn-Linux001 ~]$ sudo ls /root 有权限了 [sudo] password for pizza: learn.txt [pizza@learn-Linux001 ~]$
visudo ======相当于在编辑 vim /etc/sudoers 而且还有一个简单的语法检查功能 在visudo执行完了之后,相当于还执行visudo -c [root@learn-Linux001 ~]# visudo -c /etc/sudoers: parsed OK 如果你要手动编辑文件,完成之后要运行一下visudo -c crontab -e(root) ====== vi /var/log/spool/cron/root 语法检查功能 ##授权某个目录下的所有命令 pizza ALL=(ALL) /bin/* 但是这样有一个坑,就是可以执行sudo - root 而不需要密码 [pizza@learn-Linux001 ~]$ su - root 执行切换,不行 Password: su: incorrect password 带上sudo 就切过去了,因为/bin目录下有su [pizza@learn-Linux001 ~]$ sudo su - [root@learn-Linux001 ~]# ##授权某个目录下的所有命令 ,并排除su pizza ALL=(ALL) /bin/*,!/bin/su [pizza@learn-Linux001 ~]$ sudo su - Sorry, user pizza is not allowed to execute ‘/bin/su -‘ as root on learn-Linux001. ##但是还有rm vi可以使用!!!!用vi后用户自己就可以修改成ALL所以,我们在授权时,一定要指定到具体的命令,需要什么,给什么 ## 不用输入密码 (只给自己用,不要给别人) pizza ALL=(ALL) NOPASSWD: ALL ###root用户是禁止远程登陆的,我们可以使用普通用户,赋予权限,然后通过 sudo su - 直接变成root
pizza ALL=(ALL) NOPASSWD: ALL
用户名(用户组名) 可以在哪一台主机=(可以以什么身份)
用于管理多台服务器,方便运维人员查看和管理,不用去每台服务器单独查看和管理
所有用户的所有操作,都通过跳板机/堡垒机,执行到服务器
记录用户的操作 行为/日志审计
回放用户操作
常用的几种:
1、堡垒机:商业产品
2、gateone web 跳板机
3、python开发的开源的跳板机(Jumpserver、crazyEYE)
4、shell跳板机
原文:https://www.cnblogs.com/bubu99/p/12271737.html