1:mkdir 创建目录的命令 make directorys
-p 递归创建
2: ls -1(long)d(directory)显示目录或者文件 全称list
-d 只想查看文件
-ld 查看文件和内容
-a 显示所有文件
-li
-i 文件的索引号
-h 人类可读
-F 给不同类型文件结尾加不同的符号
-p 只是给目录添加/
3:cd 切换目录层次 change directory
- 回到上一次目录
~ 回到根目录
cd . 当前目录
cd .. 去上一级目录
4:pwd 查看当前目录
5: touch “摸”。就是“摸”一下文件,如果文件不存在,就建立新文件,如果文件存在,就改变文件的
反问时间atime等时间戳信息。 创建文件 cd /data;touch oldboy.txt touch/data/oldboy.txt
6:目录分割区别:
windows 的目录分隔 D:\PIC\tmp-snap-pic201407起
linux的目录分隔 /data/
7:vi 1.txt 进入VI编辑器(默认命令模式) 点击a或i 进入编辑模式,敲入内容I amstudying linux,然
后按键盘上的esc键退出编辑模式(进入到命令模式),最后敲:wq 保存并退出。wq 解释write quit.
8: vi/vim 记事本编辑器 命令模式(:wq :q :q! :wq!)<===>插入模式(esc切换命令模式)
w write q quit !强制
:set nu 显示行号,dd删除当前行,yy拷贝当前行,p粘贴。行号gg定位改行,G切换到文件尾部。gg到文件头部
9: cat 查看文件的内容
-n 显示行号
cat >>oldboy.txt<<oldboy
1
2
3
oldboy
10:tac 反转内容输出
11: :q! 什么都不改退出
12:man 查看命令及配置文件等的帮助
13:mv 移动目录或改名(renname命令)
14:touch 创建文件或者修改文件时间戳
15:{} 配合echo打印序列 echo {1..6}
16: echo 打印输出内容(printf复杂的输出)
17: echo "I am oldboy linux" >o.txt 把单行文本覆盖(清空原来内容)到文件里
18: echo "I am oldboy linux" >>oldboy.txt 追加重定项
;多个命令的分隔符
/根或者路径的分隔符。
>标准输出重定向(数据流朝着箭头的方向流动),覆盖原来的文件。
>>追加重定向(数据流朝这箭头的方向流动),再原来的文件的【结尾】 ,【追加】内容.
<或< 标准输出重定向:输入重定向用于改变命令的输入,制定输入内容,后跟文件名。
<<或<< 输入重定向:后跟字符串,用来表示“输入结束",也可用ctrl+d来结束输入
19: cp [-aifpru][源文件][目标文件] 拷贝文件或者目录
-a: 相当于 -pdr
-d: 若源文件为链接文件(link file),则复制链接文件属性而非档案本身
-f: 强制,若目标档案已经存在且无法开启,则移除后再尝试;
-i: 若目标文件已经存在时,再覆盖时会先询问;
-p: 连同档案的属性一起复制过去,而非使用默认属性;
-r: 递归,用于复制目录;
-u: 若目标文件存在,则目标文件比源文件旧时才复制;
提示:如果源文件是多个,那么目的文件在最后,且是目录。
20:rm 删除文件
rm +文件名 删除该文件。会提示你删除? 确定YES 不删除NO
rm -r +文件名 递归删除文件或目录 不会提示你
rm -f +文件名 强制删除文件 不会提示你
rm -fr +文件名 删除指定的目录和文件
rmdir 删除空目录,鸡肋命令。
21: head 头部 显示文件的头部-n 行数 -行数, 默认头部10行
22:tail 尾巴 显示文件的尾部-n 行数 -行数 ,默认尾部10行
-f 跟踪显示文件的结尾
-
23:grep 核心命令之一(三剑客的老三) 排除-v“paichu" 直接过滤“xiangyaode"
-E(同时过滤多个字符串) i(忽略大小写)
24: sed 取各种内容 (三剑客的老二) 擅长输出行
-s 指定分隔符
-n 取消默认输出 p=print 打印 d=delete
25: awk (三剑客老大) 擅长打印一列
-NF 取最后一列,表示当前记录列
-NR 显示当前行号
$1 第一个列
$NF 最后一列
26:tree 查看目录结构的命令
27:.. 上一级目录
. 当前目录
~ 用户的家目录
28:xargs 用于把find/ls的输出交给后面处理。
29:|管道 通过管道把前一个命令的输出交给后一个命令继续处理
30:history 查看历史命令记录
31:!+ 行号 执行行号命令
+ c 调出最近C开头的命令
32:alias 查看计算机已经有的别名 BASH内置命令
别名的作用:
1)通过给危险命令加一些保护参数,防止人为误操作。
2)把很多复杂的字符串变成一个简单的字符串。
unalias 取消别名
33:which 查看命令的路径 whereis,locate,fing
34:xargs 建立和执行命令行从标准输入
用于把find/ls 的输出交给后面处理
35:seq 打印数字序列
36:find 查找命令
-type (f d) -name “ddd"按名字查找
-mtime 按照时间查找
37:ifconfig 可以查看的命令就可以做临时网络配置
38:route 配置默认路由
39:yum 安装包的管理工具 yum is an interactive, rpm based, package manager
40:ROOT 下添加用户设置密码
[root@localhost ~]# useradd hubo
[root@localhost ~]# passwd hubo
更改用户 hubo 的密码 。
新的 密码:
无效的密码: 过于简单化/系统化
无效的密码: 过于简单
重新输入新的 密码:
passwd: 所有的身份验证令牌已经成功更新。
41:用户之间相互切换
1)超级用户切换普通用户不要密码,普通用户切换到root或者别的用户需要密码
[root@localhost ~]# su - hubo
[hubo@localhost ~]$ whoami
hubo
[hubo@localhost ~]$ su - root
密码:
[root@localhost ~]# su - oldboy
[oldboy@localhost ~]$ su - hubo
密码:
[hubo@localhost ~]$ su - root
密码:
[root@localhost ~]# whoami
root
42:yum install tree telnet dos2unix sysstat lrzsz -y 安装必要软件命令
43:yum grouplist 查看已经安装的软件包
44:cat /etc/selinux/config 改配置文件示例
45:runlevel 查看当前系统运行级别
46.命令 init 切换运行级别
47:vimdif - edit two, three or four versions of a file with vim and 'show differences'
48:useradd 添加用户
-u UID
-c 注释
-d 指定家目录
-G 指定多个组
-s 指定它登录的程序
-m 如果不存在,则创建用户主目录
-M 不创建家目录
-e 过期时间
-g 指定它属于的组
-D 改变默认的配置
49:passwd 修改用户密码,如果不指定用户,则修改当前用户密码,普通用户只能改自己的密码。
-k 保留即将过去的用户在期满后能仍能使用
-d 删除用户密码,仅能root权限操作
-u 解锁用户密码,仅能root权限操作
-f 强制操作,仅root权限才能操作
--stdin 从stdin读入密码。
-S 查看状态
-l 锁住用户无权更改其密码,仅能通过root权限操作
-n 多少天之内不能改密码
-x 多少天之内必须改密码
-w 过期多少天之内提醒
-i 过期多少天之内处理
50:whoami 查看当前命令行终端用户
51:su 切换用户角色,注意带上-
52:history 查看命令行 -c (清除所有) -d 行号 (清除行号那条)
53:chmod +x 脚本及文件可执行权限
54:chown -R 授予用户及组权限
55:/etc/init.d/iptables stop 关闭防火墙
56:su - root 普通用户切换到root用户
57:sudo 让普通用户可以拥有指定的root权限功能
58:yum 包管理工具,解决rpm包的依赖。
59:rpm -ivh 软件安装命令 rpm -ivh 包名.rpm
60:chkconfig 查看设置开机自动软件的命令
-add/
--list 程序名
61:echo $PATH 查看环境变量
-n 不换行输出
-e 可以指定特殊的字符
62:PATH 环境变量大写,所有包含在环境里面的路径,都可以直接敲出来执行。
全局生效/etc/profile。 普通用户生效~/.bash_profile或者~/.bashrc
63:netstat***** 查看网络状态 lntup或an
64:uname 查看系统版本,内核版本
-a -r -m
65:losf -i :port 查看端口
[--tcp -t] [--udp -u] [--listening -l] [--all -a] [--numeric -n] [--program -p]
lsof -i :port 查看端口
lsof|grep del 查看文件的占用情况
66:chattr 改变文件属性 (-i,+i)
67:lsattr 查看文件属性
68:查看磁盘空间
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 14G 2.6G 11G 20% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 33M 147M 19% /boot
[root@localhost ~]# df -hi
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 885K 83K 802K 10% /
tmpfs 123K 1 123K 1% /dev/shm
/dev/sda1 50K 38 50K 1% /boot
69:隐藏版本号
[root@localhost ~]# cat /dev//null >/etc/issue
[root@localhost ~]# cat /etc/issue
70:chattr 改变文件属性
锁定关键系统文件
[root@localhost ~]# chattr +i /etc/passwd /etc/shadow /etc/group /etc/inittab
解锁关键系统文件
[root@localhost ~]# chattr -i /etc/passwd /etc/shadow /etc/group /etc/inittab
71:lsattr 查看文件属性
[root@localhost ~]# lsattr /etc/passwd
-------------e- /etc/passwd
linux 系统的目录结构
逻辑上所有的目录只有一个顶点 /(根),所有目录的起点。
根下面类似一个倒挂的树一样的层次结构
只有一颗树
linux的目录结构也是有规律的,而且也是按照类别组织的。
应用程序 /usr/bin
数据文件 /usr/share
配置文件/etc
启动命令/etc/init.d
小结:
1)linux的所有目录结构是一个有层次的倒挂着的树形目录结构。
2)根”/“是所有目录的顶点。祖宗
3)目录结构和分区设备是没有关系的。也就是不同的目录可以跨越不同的磁盘设备或分区。、
4)所有的目录都是按照一定的类别有规律的组织和命名的。
相对路径和绝对路径:
cd /data/
相对路径:
[root@localhost ~]# cd data/
[root@localhost ~]# cd ..
/ 存放系统相关的程序,也就是At&t开发的Unix程序
/usr 用户程序,及数据,帮助文件等的目录
/boor 启动Linux的核心文件
/dev/ 设备目录
/etc/ 配置文件以及服务启动的目录
/proc 显示内核及进程信息虚拟文件系统
/tmp 临时文件目录
/home 普通用户家目录
/var 变化目录,一般是日志文件的目录
/bin 和/sbin 和/usr/sbin/ 用户命令的目录
/boot:启动Linux的核心文件;
以下是其他常用的linux操作系统目录:
/bin:存放最常用命令;
/dev:设备文件;
/etc:存放各种配置文件;
/home:用户主目录;
/lib:系统最基本的动态链接共享库;
/mnt:一般是空的,用来临时挂载别的文件系统;
/proc:虚拟目录,是内存的映射;
/sbin:系统管理员命令存放目录;
/usr:最大的目录,存许应用程序和文件;
/usr/X11R6:X-Window目录;
/usr/src:Linux源代码;
/usr/include:系统头文件;
/usr/lib:存放常用动态链接共享库、静态档案库;
/usr/bin、/usr/sbin:这是对/bin、/sbin的一个补充;
cat /proc/loadavg 查看负载信息
cat /proc/cpuinfo 查看CPU信息
cat /proc/meminfo 查看内存信息
/var
网卡的配置文件
cat /etc/sysconfig/network-scripts/ifcfg-eth0
vim /etc/sysconfig/network-scripts/ifcfg-eth0
重启网卡
/etc/init.d/network restat
查看本机的dns
cat /etc/resolv.conf
查看主机名
cat /etc/hosts
查看inoded的总量和使用量
[root@localhost ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 905760 89264 816496 10% /
tmpfs 125517 1 125516 1% /dev/shm
/dev/sda1 51200 38 51162 1% /boot
查看磁盘的使用量
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 14G 2.8G 10G 22% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 33M 147M 19% /boot
1)一个文件至少要占用一个inode和一个block
2)ext3/ext4 文件系统block大小一般1K,2K,4K。其中引导分区等为1K,其他普通分区为4K(C6)
3)查看inode和block的大小以及数量
查看block大小
[root@localhost ~]# dumpe2fs /dev/sda3|grep -i "block size"
dumpe2fs 1.41.12 (17-May-2010)
Block size: 4096
[root@localhost ~]# dumpe2fs /dev/sda1|grep -i "block size"
dumpe2fs 1.41.12 (17-May-2010)
Block size: 1024
linux扩展名的作用
1)tar, .tar.gz,.tgz,.zip,.tar.bz 表示压缩文件,创建命令一般为 tar,gzip,zip等。
2).sh 表示为shell脚本文件,通过shell语言开发的程序。
3).pl表示perl语言文件,通过perl语言开发的程序。
4).py比如使python语言文件,通过python语言开发的程序。
5).html,.htm,.php,.jsp,.do表示网页语言的文件。
6).conf 表示系统服务的配置文件。
7).rpm 表示rpm安装包文件
运维开发语言:Shekk/python/php 三者之一,至少会一个,最好会两种
硬盘要分区,然后格式化,创建文件系统。
一般分2部分 第一Inode,第二Block。
查看Inode大小
[root@localhost ~]# dumpe2fs /dev/sda1|grep -i "inode size"
dumpe2fs 1.41.12 (17-May-2010)
Inode size: 128
[root@localhost ~]# dumpe2fs /dev/sda3|grep -i "inode size"
dumpe2fs 1.41.12 (17-May-2010)
Inode size: 256
1:正则表达式:
^ 的意思是以...开头。例如:^oldboy,表示匹配以oldboy 字符串开头的内容。^属于正则表达式的技术。
grep -v ^# /etc/ssh/sshd_config
2:$ 的意思是以...结尾。例如oldboy$表示已oldboy字符串结尾。
3:^$ 意思是空行
4:[^oldboy] ^意识是非,即不是oldboy字符串。
5:\ 让一个字符串脱掉马甲,还原他本来的意义。
6:ls -lrt /etc 执行这个命令后最新的文件会在最下面。
7:ln 命令 创建链接
8:find ./ -type f -name "*.log" -mtime +7|xargs rm -f 删除7天以前的log文件
find ./ -type f -name "*.log" -mtime +3 -exec rm -f {} \; 删除3天以前的log文件
find /app/logs/ -type d -mtime +30|xargs rm -rf 删除30天以前的目录,慎用
脚本创建测试数据:
for n in `seq 10`
do
date -s "10/2$n/17"
touch access-www-`(date +%F)`.log
done
date -s "10/31/17"
9:记住并要经常查看系统日志/var/log/messages 生产环境要特别重视这个文件!
10:cat -n test.txt 查看文件
11:more 查看文件但是不能向上回滚。
12:less 查看文件可以向上回滚。
13:linux 系统运行级别一般为0-6
0 关机模式 1 单用户模式 2 无NFS的多用户模式 3 文本模式 4 无用 5 图形化 6重启模式 init6
14:LANG="zh_CN.GB18030" 解决乱码
15:tar gzip 打包组合zcvf,解包组合zxfv
bzip打包组合jcvf,解包组合jxvf
z(gzip),c(create),v(verbose).file,x(extract),j(bzip)
--exclude -X(--exclude-form),
tar zcvf etc.tar.gz ./etc 打包命令 打包gz包
tar zcvf 包名 结果
tar tf 查看包里面的东西
tar zcvf oldboy2.tar.gz --exclude=oldboy/jeacen ./oldboy 排除jeacen 打包
tar xf oldboy2.tar.gz 解包oldboy2.tar.gz
tar xf oldboy2.tar.gz -C /tmp/ 指定解压目录在tmp下
tar jcvf etc.tar.bz ./etc 打包bz压缩包
tar jxvf etc.tar.bz 解包bz 压缩包
59:rpm -ivh 软件安装命令 rpm -ivh 包名.rpm 解压缩包
16: awk ' {print $3' '$6}' oldboy.txt 过滤
17:如何查看/etc/services 文件的又多少行?
1)wc -l /etc/services 直接查看文件行数
2)cat -n file|tail -1 直接查看文件行数
3)sed -n '$=' /etc/services 直接查看文件行数
4)awk ' {print NR} /etc/services |tail -1 直接查看文件行数
5)grep -n $ /etc/services |tail -1 直接查看文件行数
18:ps -ef 查看运行进程
19:grep -E "3306|1521" /etc/services 过滤/etc/services 下的3306,1521,两数字的行的内容
1:linux权限
r read 可读权限
w write 可写权限
x (Execute ,执行权限)
- (没有任何权限)
2:硬链接
1)不同的文件名具有相同inode节点号的文件是互为硬链接文件。
2)删除硬链接文件或者删除源文件之一,文件实体并未被删除。
3)只有删除了源文件及所有对应的硬链接文件,文件实体才会被删除。
4)当所有的硬链接文件及源文件被删除后,再存放新的数据会占用这个文件的空间,或者
磁盘fsck检查的时候,数据也会被回收。
5)硬链接文件是文件的又一个人口。
6)可以通过给文件设置硬链接文件,来防止重要文件被误删。
7)通过执行命令“in源文件 硬链接”,即可完成创建硬链接。
8)rm -f 硬链接文件
3:软链接 查看软链接 readlink
1)软链接类似windows里的快捷方式,软链接里面存放的是源文件的路径,并且执行源文件。
2)删除源文件,软链接文件依然存在,但是无法访问指向的路径内容了
3)执行命令 “ln-s源文件 软链接文件”即可完成创建软链接。
4)软链接和源文件是不同类型的文件,也是不同的文件。inode 号不同。
5)rm -f 软链接文件
4:控制文件删除:以下两个条件同事具备才生效。
1)受文件的硬链接数控制,有一个硬链接i_link +1,减少一个硬链接,i_link -1,
当i_link=0时,文件被删除。
例:创建一个文件i_link=1,为这个文件创建一个硬链接,i_ling=2!删除一个硬链接,
i_ling -1, 删除源文件i_link=0了.
2)受进程占用控制,当有进程使用这个文件,有一个进程占用这个文件i_count+1,即i_count=1。
当减少一个进程占用i_count-1,即i_count=0,
当没有进程调用,i_count=0,文件就被删除了。
当i_link=0并且i_count=0的时候,文件才会被真正被删除。
1:清理磁盘空间日志文件
1)企业面试题,企业生产案例
磁盘报错“No space left on device”,但是 df -h查看磁盘空间没满,请问为什么?
df -i
实战演示:
[root@localhost ~]# yum install httpd -y
[root@localhost conf]# getenforce
Disabled
[root@localhost conf]# grep log httpd.conf
[root@localhost conf]# sed -i 's@CustomLog logs/acce_log combined@CustomLog /app/log/access_log combined@g' /etc/httpd/conf/httpd.conf
[root@localhost conf]# grep app httpd.conf
[root@localhost conf]# mkdir /app/log -p
[root@localhost conf]# dd if=dev/zero of=/dev/sdc bs=8k count=10
[root@localhost conf]# mkfs -t ext3 /dev/sdc
[root@localhost conf]# mount -o loop /dev/sdc /app/log
[root@localhost conf]# df -h
[root@localhost conf]# /etc/init.d/httpd restart
[root@localhost conf]# cd /app/log
[root@localhost conf]# tail -f access_log
[root@localhost conf]# df -h
[root@localhost conf]#pwd
[root@localhost conf]#ll
[root@localhost conf]# rm -f access_log
[root@localhost conf]# df -h
[root@localhost conf]# lsof|grep del
[root@localhost conf]# /etc/init.d/httpd restart
生产场景:最佳解决方案:
1)删除文件,重启
2)清空文件,不删除
3)不要删当天的被进程占用的文件,删以前的。
2:清空文件内容
1)[root@localhost conf]# >access_log
2)[root@localhost conf]# cat /dev/null >access_log
3:查看文件的占用情况
[root@localhost conf]# lsof|grep del
4:bash 的内置命令
alias--->
bg
break
cd--->
continue
echo--->
eval
exec
exit--->
export--->
fg
getopts
help--->
history--->
jobs
kill
let--->
logout--->
printf--->
pwd--->
read
return
shift
source--->
test
times
trap
typeset
ulimit--->
umask
unalias--->
unset
type 显示命令类型的信息
内置命令的帮助:help 命令名
检查是不是内置命令:type 命令名
5:
0超级用户
1-499 虚拟用户
500-65535 普通用户
服务运行时需要用户角色的,可以不用登陆,因此,工作中我们需要运行如mysql数据库,
可以创建如下用户:
[root@localhost conf]#groupadd mysql -g 49
[root@localhost conf]#groupadd mysql -u49 -s/sbin/nologin -g musql
[root@localhost conf]#id mysql
uid=49(mysql)gid=(mysql)组=49(mysql)
[root@localhost conf]#tail -l /etc/passwd
mysql:x:49:49::/home/mysql:/sbin/nologin
[root@localhost conf]#su - mysql
This accountis currently not available
1:正则表达式:
简单的说,正则表达式就是一套处理字符串的规则和方法,以行为单位对字符串进行处理,
通过特殊的符号的辅助,我们可以快点的过滤,替换某些特定的字符串。
运维工作中,会有大量访问日志,错误日志,大数据。如何能够快速的过滤出我们需要的内容,
这就要靠正则表达式。
awk,sed,grep(egrep) 三剑客要想能工作的更搞笑,那一定离不开正则表达式的配合的。
我们想要玩好三剑客,首先就要掌握正则表达式。
linux里正则表达式。主要是awk,sed,grep(egrep)三剑客的正则表达式。
正则表达式实际就是一些特殊字符,赋予他特定的含义
1)^word 表示以word开头的。
2)word$ 搜索以word结尾的。
3). 代表且只能代表任意一个字符。
4)\ 例\. 转移符号,让有着特殊身份意义的字符,脱掉马甲,还原原型。
5)* 例o* 重复0个或多个前面的一个字符
6).* 匹配所有字符。 ^.* 以任意字符开头。
7)[] 字符集合的重复特殊字符的符号。
8)[^word] 匹配不包含^后的任意字符串的内容。
9)a\{n,m\} 重复n到m次,前一个重复的字符。如果用egrep就不用\
\{n,\} 重复至少n次,前一个重复的字符
\{n\} 重复n次,前一个重复的字符
2:扩展的正则表达式:ERE
1)+ 重复一个或一个以上前面的字符。
2)? 重复0个或一个0前面的字符。
3)| 用或的方式查找多个符号的字符串。
4)() 找出“用户组”字符串。
3:查以I ,M开头的文件名
root@localhost ~]# vim oldboy.log
[root@localhost ~]# cat oldboy.log
I am oldboy linux teacher
I like chinese chess,table tennis
My blog is http://oldboy.blog.51cto.com
My qq is 49000448
[root@localhost ~]# grep -i "^I" oldboy.log
I am oldboy linux teacher
I like chinese chess,table tennis
[root@localhost ~]# grep -i "^M" oldboy.log
My blog is http://oldboy.blog.51cto.com
My qq is 49000448
my god,my name is not oldboy,but OLDBOY
[root@localhost ~]# grep "bl.g" oldboy.log
My blog is http://oldboy.blog.51cto.com
4:此处的点号,是正则表达式的,表示任意单个字符,-n 是给过滤出的每一行加行号。
[root@localhost ~]# grep -n . oldboy.log
1:I am oldboy linux teacher
2:I like chinese chess,table tennis
3:My blog is http://oldboy.blog.51cto.com
4:My qq is 49000448
5:my god,my name is not oldboy,but OLDBOY
5:取ip 地址
1)方法一示例:
[root@localhost ~]# ifconfig ens32
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.16.18.239 netmask 255.255.255.0 broadcast 172.16.18.255
inet6 fe80::20c:29ff:fe25:bbd prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:25:0b:bd txqueuelen 1000 (Ethernet)
RX packets 4123 bytes 436394 (426.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 5037 bytes 507439 (495.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@localhost ~]# ifconfig ens32|grep "inet"
inet 172.16.18.239 netmask 255.255.255.0 broadcast 172.16.18.255
inet6 fe80::20c:29ff:fe25:bbd prefixlen 64 scopeid 0x20<link>
[root@localhost ~]# ifconfig ens32|grep "inet 172"|awk -F " " '{print $2}'
172.16.18.239
2)方法二示例:
[root@localhost ~]# ifconfig ens32|sed -n '/inet 172/p'
inet 172.16.18.239 netmask 255.255.255.0 broadcast 172.16.18.255
[root@localhost ~]# ifconfig ens32|sed -n '/inet 172/p'|sed 's#^.*inet ##g'
172.16.18.239 netmask 255.255.255.0 broadcast 172.16.18.255
[root@localhost ~]# ifconfig ens32|sed -n '/inet 172/p'|sed 's#^.*inet ##g'|sed 's# ne.*$##g'
172.16.18.239
3)方法三示例:
[root@localhost ~]# ifconfig ens32|grep "inet"
inet 172.16.18.239 netmask 255.255.255.0 broadcast 172.16.18.255
inet6 fe80::20c:29ff:fe25:bbd prefixlen 64 scopeid 0x20<link>
[root@localhost ~]# ifconfig ens32|grep "inet 172"|awk -F "[ ]+" '{print $3}'
172.16.18.239
4)方法四示例:
[root@localhost ~]# ifconfig ens32|sed -n '2p'
inet 172.16.18.239 netmask 255.255.255.0 broadcast 172.16.18.255
[root@localhost ~]# ifconfig ens32|sed -n '2p'|awk -F "[ ]+" '{print$3}'
172.16.18.239
5)方法五示例:
[root@localhost ~]# ifconfig ens32|awk -F "[ ]+" 'NR==2 {print $3}'
172.16.18.239
6)方法六示例:
[root@localhost ~]# ifconfig ens32|sed -n 's#^.*inet \(.*\) netmask.*$# \1#gp'
172.16.18.239
6:sed小括号()分组功能
示例:
[root@localhost ~]# echo "ddd kkk" >b.txt
[root@localhost ~]# cat b.txt
ddd kkk
[root@localhost ~]# sed 's#(ddd) (kkk)##g' b.txt
ddd kkk
[root@localhost ~]# sed 's#\(ddd\) \(kkk\)#\1#g' b.txt
ddd
[root@localhost ~]# sed 's#\(ddd\) \(kkk\)#\1 \2#g' b.txt
ddd kkk
7:文件的权限数字内容
r read 可读 用4表示
w write 可写 用2表示
- 没有 用0表示
x 执行 用1表示
示例一
[root@localhost ~]# touch /etiantian
[root@localhost ~]# ls -l /etiantian
-rw-r--r-- 1 root root 0 11月 2 22:04 /etiantian
[root@localhost ~]# stat /etiantian
文件:"/etiantian"
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:1008044 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2017-11-02 22:04:46.103015422 +0800
最近更改:2017-11-02 22:04:46.103015422 +0800
最近改动:2017-11-02 22:04:46.103015422 +0800
创建时间:-
[root@localhost ~]# stat /etiantian|sed -n 4p|awk -F "[(/]" '{print $2}'
0644
示例二
[root@localhost ~]# stat -c %a /etiantian
644
本题的四点思路:
1.通过 stat 输出包含目标的内容。
2.通过head,tail,sed,awk,grep 定位到单行====>这是取行惯用命令。
3.通过cut,awk 等设置分隔符取出需要段内容====>这是取列的惯用命令。
4.当命令结果包含我们需要的内容的时候,我们要想到命令的参数是否有具体的参数能够一步达到我们需要的
结果呢?这样就会去 man stat了。
1:echo -n 不换行输出
-e 激活反斜线 功能
2:看日期时间
[root@localhost ~]# echo `date +%F`
2017-11-04
3:打包日志
1)不带时间打包
[root@localhost ~]# tar zcvf oldboy1.tar.gz ./oldboy
[root@localhost ~]# ll
-rw-r--r-- 1 root root 295 11月 4 09:55 oldboy1.tar.gz
2)带时间打包
[root@localhost ~]# tar zcvf oldboy1-$(date +%F).tar.gz ./oldboy
[root@localhost ~]# ll
-rw-r--r-- 1 root root 295 11月 4 09:57 oldboy1-2017-11-04.tar.gz
3)打包3天前的内容
[root@localhost ~]# echo $(date +%F -d '-3 day')
2017-11-01
[root@localhost ~]# tar zcvf oldboy-$(date +%F -d '-3 day').tar.gz ./oldboy
[root@localhost ~]# ll
-rw-r--r-- 1 root root 295 11月 4 09:57 oldboy1-2017-11-04.tar.gz
-rw-r--r-- 1 root root 295 11月 4 10:30 oldboy-2017-11-01.tar.gz
4)保留最近7天的内容
find/log -type f -name"*.log"-mtime +7|xg
4:cut 按列切割 -d指定分隔符,-f数字选列,-c 按字符
5:date 命令 -s 修改时间。
cal 日历
6:查看3天前的
[root@localhost ~]# date +%F -d '3 day ago'
2017-11-01
7:排除空行
1)用grep方法
[root@localhost ~]# vi test.txt
[root@localhost ~]# cat test.txt
test
liyao
oldboy
[root@localhost ~]# grep -v "^$" test.txt
test
liyao
oldboy
2)用sed方法
[root@localhost ~]# vi test.txt
[root@localhost ~]# cat test.txt
test
liyao
oldboy
[root@localhost ~]# sed '/^$/d' test.txt
test
liyao
oldboy
3)awk的方法
[root@localhost ~]# vi test.txt
[root@localhost ~]# cat test.txt
test
liyao
oldboy
[root@localhost ~]# awk /^[^$]/ test.txt
test
liyao
oldboy
8:以下路径的内容解答
/var/log/messages 系统日志
/var/log/secure 系统日志安全
/car/spool/clientmqueue 邮件临时目录
/proc/interrupts 查看中断文件
/etc/fstab 磁盘文件系统开机自动挂载文件
/etc/profile 全局的环境配置文件
9:如何快递查到ifconfig的全路径。
1)
[root@localhost ~]# which ifconfig
/usr/sbin/ifconfig
2)
[root@localhost ~]# whereis ifconfig
ifconfig: /usr/sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
3)
[root@localhost ~]# find / -name ifconfig
/usr/sbin/ifconfig
10:关机重启命令
关机
shudown -h now ----->立刻关机(生产常用)
shhutdown -h +1 ----->1分钟以后关机
init 0 ----->关机
halt ----->立即停止系统,需要人工关闭电源
halt -p
poweroff ----->立即停止系统,并且关闭电源
重启
reboot ---->生产常用
shutdown -r now ---->生产常用
shhutdown -r +1 ---->1分钟以后重启
init 6
注销
logout
exit ---->生产常用
ctl +d ---->快捷键(生产常用)
11:下面命令的功能
Ctrl +a 切换到命令行开始
Ctrl +e 切换到命令行末尾
Ctrl +c 终止当前命令或脚本
Ctrl +d 退出当前shell,相当于exit。
Ctrl +l 清除屏幕内容,相当于clear。
Ctrl +u 清除(剪切)光标之前的内容
Ctrl +k 删除光标以后的内容
Ctrl +r 查看最近的命令
tab 命令补全工具
12:属组的数字算法
[root@localhost ~]# ls -l oldboy
-rw-r--r-- 1 root root 0 10月 22 00:00 access-www-2017-10-22.log
属组:root rw- =4+2+0=6
其他组:root r-- =4+0+0=4
其他: r-- =4+0+0=4
oldboy 文件的权限 644
r=4 w=2 x=1
13:权限 chmod 改变文件访问权限 分为数字和字符表示法 -R 递归
u 代表属主用户
g 代表属组
o 代表其他用户
a 代表属主,属组和其他用户,也就是上面三个用户(或组)的所有;
权限定义字母
r 代表读权限 表示具有读取阅读文件内容的权限
w 代表写权限 表示具有新增,修改文件内容的权限
(特别提示:删除文件(修改文件名等)的权限是受父目录的权限控制,和文件本身权限无关)
x 代表执行权限 表示具有执行文件的权限(文件本身要能够执行,普通用户同时还需要具备r 的权限,root用
户不需要权限也能执行,当然文件本身也需要能够执行)
权限增减符
+ 添加某个权限
- 取消某个权限
= 取消其他所有权限赋予给定的权限。
用字符式语法比较灵活组合起来方便:例如:
u=r+x 为文件属主添加读写权限
ug=rwx,o=r 为属主和属组添加读,写,执行权限,为其他用户设置读权限。
a+x 为文件的属主,属组和其他童虎添加执行权限:
g=u 让文件的属组和属主的权限相同;
u=rwx,g=rw,o=rw 为属主添加读,写,执行权限,属组添加读,写权限,为其他用户设置读,写权限
1)给test.txt575权限
[root@localhost oldboy]# chmod 575 test.txt
[root@localhost oldboy]# ls -l test.txt
-r-xrwxr-x 1 root root 13 10月 29 02:24 test.txt
2)给oldboy 里面的文件给 755权限
[root@localhost ~]# chmod -R 755 oldboy
[root@localhost ~]# ll oldboy
-rwxr-xr-x 1 root root 0 10月 22 00:00 access-www-2017-10-22.log
-rwxr-xr-x 1 root root 0 10月 23 00:00 access-www-2017-10-23.log
-rwxr-xr-x 1 root root 0 10月 24 00:00 access-www-2017-10-24.log
14:改变文件所属关系命令 chown改变文件拥有者以及用户组,-R递归
#chown [选项]... [所有者][:[组]] 文件...
方法
chown 用户 文件或目录 <===仅仅授权用户。
chown :组 文件或目录 <===仅仅授权组。 等同于chgrp组 文件或目录
chown 用户:组 文件或目录 <====表示授权用户和组
强调:其中的冒号“:”可以用点号“.”替代。要授权的用户和组名,必须是系统里实际存在的。
15:
演示环境:
一个家庭(用户组)incahome:成员oldboy,oldgirl
[root@localhost ~]# groupadd incahome
[root@localhost ~]# useradd oldboy -g incahome
[root@localhost ~]# useradd oldgirl -g incahome
[root@localhost ~]# id oldgirl
uid=1002(oldgirl) gid=1000(incahome) 组=1000(incahome)
[root@localhost ~]# id oldboy
uid=1000(oldboy) gid=1000(incahome) 组=1000(incahome)
给权限
[root@localhost ~]# chown -R oldboy /home/oldboy
[root@localhost ~]# chown -R oldgirl /home/oldgirl
16:为什么默认权限是755,644 而不是其他值呢?
网站目录安全权限:目录755,文件644是相对安全的权限,并且用户为root以及用户组root。生产工作中
一定要尽量要我们的文件和目录达到以上默认权限,包括属组。
示例
[root@localhost ~]# mkdir newdir
[root@localhost ~]# touch newfile
[root@localhost ~]# ls -lrt
drwxr-xr-x 2 root root 6 11月 6 12:49 newdir
-rw-r--r-- 1 root root 0 11月 6 12:49 newfile
[root@localhost ~]# umask
0022
[oldboy@localhost root]$ umask
0002
17
1)用户对应的前三位的x位上如果有s就表示,suid.当x位上没有x的时候,suid就是S
[root@localhost ~]# ls -l `which passwd`
-rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd
[root@localhost ~]# chmod 4644 abc
[root@localhost ~]# ls -l abc
-rwSr--r-- 1 root root 0 11月 6 14:47 abc
2)setuid位是让普通用户可以以root(或其他)用户的角色运行只有root(或其他)账号才能运行的程序或命令
,或程序命令对应本来没有权限操作的文件等。(注意和su及sudo的区别)
希望oldboy命令设置suid 加深对suid的理解
oleboy用户能够删除本来无权删除的文件
1)sudu
2) suid
chmod u+s `which rm|tail -1`
1:程序概念
简单的说:我们使用的命令就是程序,QQ程序,听歌MP3,MP4软件,linux系统也是程序。
基本特征:一堆代码,一个文件,一个命令。程序静态的,放在电脑里还没有被运行
程序:磁盘里。
2:进程概念
简单的说,把系统中的程序运行起来就是进程。 进程放在内存中
所谓进程(Processes)就是指现在系统正在执行程序,每当输入一个命令时,Shell也会同时启动一个进程。
每个进程启动时,系统会指定一个唯一的数值给每个进程,数值称为进程(ID)。
每个进程都可能以两种方式存在:一个前台和一个后台。
一般的系统网络服务都是以后台方式存在,且都会常驻在系统中,直至关机或者主动杀死时才结束,例如sshd。
3:linux的定时任务crond (crontab)服务
1)crond时linux系统中用来定期执行命令和或者指定程序任务的一种服务或软件。
一般在我们安装co5/co6系统的时候,crond就会默认存在了。
我们优化开机自启动服务的时候,第一个就是crond。
Crond服务默认情况(每分钟),会检查系统中是否有需要执行的定时任务,如果有,
就会根据事先定义好的规则来执行这个定时任务。
秒级任务:
1)crond 自身无能为力
2)为自己写守护进程shell循环
3)Quartz也可实现秒级任务
4:为什么需要定时任务?
服务器:7*24小时开机提供服务是网站的基本特征。
有重要数据:1天备一次,5份以上。
服务器上的数据一般最低1天备一次,每分钟(实时备份)再增量备份。
半夜1点备份:我们每天爬起来备份,然后睡觉,假设一次备份持续5小时。
定时任务就产生了。定时任务可以实现帮助我们自动备份数据。
crond服务====闹钟
5:linux定时任务分类:
1)系统自身的定期执行的任务
[root@localhost ~]# ll /etc/|grep cron
-rw-------. 1 root root 541 Aug 3 23:33 anacrontab
drwxr-xr-x. 2 root root 54 Oct 23 21:54 cron.d
drwxr-xr-x. 2 root root 57 Oct 23 21:54 cron.daily
-rw-------. 1 root root 0 Aug 3 23:33 cron.deny
drwxr-xr-x. 2 root root 22 Jun 10 2014 cron.hourly
drwxr-xr-x. 2 root root 6 Jun 10 2014 cron.monthly
drwxr-xr-x. 2 root root 6 Jun 10 2014 cron.weekly
-rw-r--r--. 1 root root 451 Jun 10 2014 crontab
2)用户执行的定时任务
6:linux的定时任务分类:
1)at适合执行一次就结束的调度任务。突发性的任务,每天晚上。了解即可。
依赖服务atd
2)anacron 适用于非7*24小时开机的服务器准备的。开机执行的,检测停机期间没有执行的任务,
在开机后一次性执行一遍。
3)Crond,Crond服务默认情况(每分钟),会检查系统中是否有需要执行的定时任务,如果有,
就会根据事先定义好的规则来执行这个定时任务。*****
crond依赖的服务,crond
提示:我们说的crond是一个定时任务守护进程,而crontab是用户用来设置定时任务规则的命令。
7:定时任务的使用格式
用户的定时任务规则一般分为6个段(每个段通过空格来分隔,系统的定时任务为/etc/crontab,分为7段,
空格来分隔),前五段为时间的设定段,第六段为所执行的命令或脚本任务段。
基本命令格式如下:
01 * * * * cmd
02 4 * * * cmd
22 4 * * 0 cmd
42 4 1 * * cmd
提示:
1,cmd为要执行的命令或脚本。
2,每个列之间必须要有空格。
系统定时任务:
时间记忆口诀:分时日月周
[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
8:crontab语法格式中特殊符号的含义
1)*号 示任意时间都,实际就是“每”时间的意思。举例:如 00 23 * * *cmd表示每月每周每日的23:00都
执行cmd任务。需要注意的是:每隔时间上的*表示每,如果位上是*就是该位上时间的取值范围,
例如:小时上的*等价于 00-23。
经验技巧:定时任务规则如果到小时,就最多提每天。
分位上的*就等价于0-59,表示没分。
2)-号 表示分隔符,表示一个时间范围,区间段,如17-19点,每天的17,18,19的00分执行任务。
00 17-19 * * * cmd。就是17,18,19点整点分别执行的意思。
3),号 表示分隔时段的意思。30 17,18,19 * * * /bin/sh/scripts/oldboy.sh表示每天17,18和19点的半点
时刻执行/bin/sh/scripts/oldboy.sh脚本。也可以和“-”结合使用,例如:30 3-5,17-19 * * *
/bin/sh/scripts/oldboy.sh
4)/n n代表数字,即“每隔n单位时间”,例如:每10分钟执行一次任务可以写成*/10 * * * * cmd,其中,
*/10,*的范围是0-59,因此,也可以写成0-59/10。
9:定时任务
每分钟打印一次自己名字拼音到“/server/log/自己的名字命名的文件”中。
[root@localhost ~]# crontab -e
[root@localhost ~]# crontab -l
#print a name
* * * * * echo lodboy >> /server/log/oldboy.log
[root@localhost ~]# mkdir /server/log -p
[root@localhost ~]# tail -f /server/log/oldboy.log
lodboy
lodboy
10:vi命令考察,根据中文给出命令
退出保存 :wq
退出并强制保存,!为强制的意思 :wq!
强制退出,不保存 :q! 或ZZ
光标移动到文件的最后一行 G shift+g
光标移动到文件的第一行 gg
从光标所在位置讲光标移动到当前行的开头 ^ home键
从光标所在位置讲光标移动到当前行的结尾 $ end键
取消上一次的动作 u
删除一行 dd 删n行 ndd
向下搜索 /字符
向上搜索 ?字符
11:定时任务的回顾
1)定时任务要加必要你的注释
2)执行shell脚本任务前加/bin/sh
3)定时任务命令或脚本的结尾要加>/dev/null 2>&1
4)定时任务命令的执行,超过2条的命令执行,最好用脚本文件
5)在指定的用户下执行相关的定时任务
6)生产任务程序不要随意打印输出信息 tar zcf echo 123 >a.log
7)定时任务执行的脚本要规范路径
8)配置定时任务规范操作过程,防止出错
1,增加执行任务频率调试任务(某些任务不能用于生产环境)
2,调整系统时间调试任务(不能用于生产环境)
3,通过脚本日志输出调试定时任务
4,注意一些任务命令带来的问题(*/1 * * * * echo "==" >> /tmp/oldboy.log >/dev/null 2>&1)
5,注意环境变量导致的定时任务故障
6,通过crond定时任务日志调试定时任务
7,其他稀奇古怪的问题调试的方法
1,系统环境,变量问题
2,定时任务要用绝对路径
3,脚本前线问题加/bin/sh
4,时间变量问题用反斜线\%
5,>/dev/null 2>&1问题 (1>dev/null 2>/dev/null)
6,定时任务规则之前加注释
7,使用脚本程序替代命令行定时任务
8,避免不必要的程序及命令输出
9,切到目标目录的上一级目录打包
10,定时任务脚本中的程序命令尽量用全路径
两种删除方法
1)
ls|xargs rm -f
find ./ -type -f
1:管理用户命令汇总
命令
useradd ***** 同adduser命令,执行此命令可在系统中添加用户。
userdel ***** 执行此命令可删除用户及相关用户的配置或文件。
passwd ***** 执行此命令可为用户设置密码。
chage 修改用户密码有效期限。
usermod ***** 修改用户的命令,可以通过usermod来修改登录名,用户的家目录等等。
id ***** 查看用户的UID,GID及所归属的用户组
su ***** 用户切换工具
sudo ***** 是通过另一个用户来执行命令,su 是用来切换用户,然后通过切换到的用户来完成相应的任务
但sudo能在命令后面直接接命令执行,比如 sudo ls /root,不需要root密码就可以执行只有
root才能执行相应的命令或具备的目录权限:这个权限需要通过visudo命令或者直接编辑
/etc/sudoers来实现。
visudo ***** 配置sudo权限的编辑命令;也可以不用这个命令,直接用vi来编辑/etc/sudoers实现。
但推荐用visudo来炒作(会自动检查语法)。
finger 查看用户信息工具
2:组管理命令汇总
groupadd ***** 添加用户组
-g
groupdel 删除用户组
gpasswd 为用户组设置密码
groups 显示用户所属的用户组
newgrp 更改用户所属的有效用户组
3:/etc/skel 目录
/etc/skel 目录是用来存放新用户配置文件的目录。当我们添加一个用户时,系统会从/etc/skel目录里面拷贝文件
4:/etc/default/useradd文件
/etc/default/useradd文件是在使用useradd添加用户时一个需要调用的一个默认的配置文件,可以
使用“useradd -D 参数”,这样的命令格式来修改文件里面的内容。
5:账号过期
[root@devops-zabbix oldboy]# useradd -e "2017/11/18" m1
[root@devops-zabbix oldboy]# chage -l m1
最近一次密码修改时间 :11月 08, 2017
密码过期时间 :从不
密码失效时间 :从不
帐户过期时间 :11月 18, 2017
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :99999
在密码过期之前警告的天数 :7
6:修改默认权限
[root@devops-zabbix ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
[root@devops-zabbix ~]# useradd -D -s /bin/sh
[root@devops-zabbix ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/sh
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
7:--stdin 改密码
[root@devops-zabbix ~]# echo "12345678"|passwd --stdin m1
更改用户 m1 的密码 。
passwd:所有的身份验证令牌已经成功更新。
8:7天内不能更改密码,60天以后必须修改密码,过期10天通知oldboy用户,过期后30天后禁止用户登录。
[root@devops-zabbix ~]# chage -l oldboy
最近一次密码修改时间 :11月 04, 2017
密码过期时间 :从不
密码失效时间 :从不
帐户过期时间 :从不
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :99999
在密码过期之前警告的天数 :7
[root@devops-zabbix ~]# passwd -n 7 -x 60 -w 10 -i 30 oldboy
调整用户密码老化数据oldboy。
passwd: 操作成功
[root@devops-zabbix ~]# chage -l oldboy
最近一次密码修改时间 :11月 04, 2017
密码过期时间 :1月 03, 2018
密码失效时间 :2月 02, 2018
帐户过期时间 :从不
两次改变密码之间相距的最小天数 :7
两次改变密码之间相距的最大天数 :60
在密码过期之前警告的天数 :10
9:chage 用法
[root@devops-zabbix ~]# chage -l m1
最近一次密码修改时间 :11月 08, 2017 <=====-d 将最近一次密码设置时间设为最近日期
密码过期时间 :从不 <=====
密码失效时间 :从不 <=====-I 密码过期后多久停权
帐户过期时间 :11月 18, 2017 <=====-E 帐户过期时间
两次改变密码之间相距的最小天数 :0 <=====-m 改变密码最小天数
两次改变密码之间相距的最大天数 :99999 <=====-M 改变密码最大天数
在密码过期之前警告的天数 :7 <=====-W 密码过期之前警告的天数
10:删除用户的相关命令
userdel -r 删除用户连带家目录删除
vi /etc/passwd 生产环境用这个停账号
./etc/passwd -用户账号资料文件
./etc/shadow -用户账号资讯加密文件
./etc/group -用户组资讯文件
11:用户信息修改相关命令
usermod -c 修改注释
-d 修改目录
-e 账号停止日期
-f 账号停权日期
-g 修改它的组组
-G 修改它的多个组
-l 更改登录名
-s 更改shell
-u 更改UID
-L 冻结密码
-U 取消冻结
./etc/passwd -用户账号资料文件
./etc/shadow -用户账号资讯加密文件
./etc/group -用户组资讯文件
12:查询相关的命令
id命令 查看用户信息
[root@devops-zabbix ~]# id oldboy
uid=1000(oldboy) gid=1000(incahome) 组=1000(incahome)
w命令
[root@devops-zabbix ~]# w
21:02:56 up 3:34, 1 user, load average: 0.03, 0.05, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 172.16.18.1 17:28 0.00s 0.76s 0.01s w
who命令 只是显示那个登录了
[root@devops-zabbix ~]# who
root pts/0 2017-11-08 17:28 (172.16.18.1)
last命令 显示那个在登录
lastlog 显示谁登录我的机器
[root@devops-zabbix ~]# last
root pts/0 172.16.18.1 Wed Nov 8 17:28 still logged in
reboot system boot 3.10.0-693.el7.x Wed Nov 8 17:28 - 21:04 (03:36)
root pts/0 172.16.18.1 Wed Nov 8 17:06 - crash (00:21)
reboot system boot 3.10.0-693.el7.x Wed Nov 8 17:02 - 21:04 (04:01)
root pts/0 172.16.18.1 Wed Nov 8 09:32 - down (07:09)
reboot system boot 3.10.0-693.el7.x Wed Nov 8 09:28 - 16:41 (07:13)
root pts/0 172.16.18.238 Tue Nov 7 22:54 - 22:54 (00:00)
root pts/0 172.16.18.238 Tue Nov 7 22:54 - 22:54 (00:00)
13:su 命令用法
su - 使一个shell成为登录的shell,如执行su - oldboy是,表示该用户想改变身份为oldboy,并且使用
oldboy用户的环境变量配置。
-c 切换到一个shell下,执行一个命令,然后退出所切换的用户环境
14:sudo命令用法
sudo -l 列出用户在主机上可用的和被禁止的命令;当配置好sudo授权规则后,可用这个参数来查看授权情况。
-v 验证用户的时间戳:当用户运行sudo,输入用户密码后,在短时间内可以
-u 指定以某个用户身份执行特定的命令操作。
-k 删除时间戳,下一个sudo命令要求提供密码。前提是该用户授权中不能有NOPASSWD参数。
1:用户权限集中管理方案
1)建立3个初级运维,一个高级运维,一个网络工程师,一个运维经理,密码同意111111
批量创建用户,给密码
for user in chuji001 chuji002 chuji003 net001 senior001 manager001
do
useradd $user
echo "111111"|passwd --stdin $user
done
更改用户 chuji001 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 chuji002 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 chuji003 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 net001 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 senior001 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 manager001 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@devops-zabbix ~]# tail -6 /etc/passwd
chuji001:x:1007:1007::/home/chuji001:/bin/bash
chuji002:x:1008:1008::/home/chuji002:/bin/bash
chuji003:x:1009:1009::/home/chuji003:/bin/bash
net001:x:1010:1010::/home/net001:/bin/bash
senior001:x:1011:1011::/home/senior001:/bin/bash
manager001:x:1012:1012::/home/manager001:/bin/bash
建立5个开发人员,属于phpers组
groupadd -g 999 phpers
for n in `seq 5`
do
useradd -g phpers php00$n
echo '111111'|passwd --stdin $user
done
for user in kaifamanager001 seniorphpers
do
useradd $user
echo "111111"|passwd --stdin $user
done
1)安装sudo命令,syslog服务
查询sudo和rsyslog安装没有
[root@devops-zabbix ~]# rpm -qa|egrep "sudo|rsyslog"
rsyslog-8.24.0-12.el7.x86_64
sudo-1.8.19p2-10.el7.x86_64
如果没有安装则执行下面命令安装
yum install sudo syslog -y
2)配置/etc/sudoers
增加配置"Defaults logfile=/var/log/sudo.log"到/etc/sudoers中,注意:不包含引号
[root@devops-zabbix ~]# echo "Defaults logfile=/var/log/sudo.log">>/etc/sudoers
[root@devops-zabbix ~]# tail -1 /etc/sudoers
Defaults logfile=/var/log/sudo.log
[root@devops-zabbix ~]# visudo -c #检查sudoers文件语法
/etc/sudoers:解析正确
1:配置DNS
[root@devops-zabbix ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 114.114.114.114
[root@devops-zabbix ~]# vim /etc/resolv.conf
2:查看网关
route -n 命令
[root@devops-zabbix ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.16.18.2 0.0.0.0 UG 100 0 0 ens32
172.16.18.0 0.0.0.0 255.255.255.0 U 100 0 0 ens32
3:删除默认网关
[root@devops-zabbix ~]# route del default gw 172.16.18.2
[root@devops-zabbix ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
172.16.18.0 0.0.0.0 255.255.255.0 U 100 0 0 ens32
4:添加默认网关
[root@devops-zabbix ~]# route add default gw 172.16.18.2
[root@devops-zabbix ~]# route -n
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.16.18.2 0.0.0.0 UG 100 0 0 ens32
172.16.18.0 0.0.0.0 255.255.255.0 U 100 0 0 ens32
5:修改主机名的步骤
a)hostname hubo
b)vi /etc/sysconfig/network
c)vi /etc/hosts
6:修改网卡:
编辑配置文件 vi /etc/sysconfig/network-scripts/ifcfg-ens32,
然后/etc/init.d/network restart
ifup ens32 启动网卡
ifdown ens32 停掉网卡
ifconfig 查看配置别名ip等
ifconfig ens32:x 10.0.0.25/24 up 配置别名IP,VIP
ifconfig ens32:x down 停掉别名IP
7:查看设备
ifconfig 查看IP
route -n 查看默认网关
hostname 查看主机名
netstat -rn 查看路由
8:网络检查:
1)ping www.baidu.com icmp协议基础。
2)traceroute www.baidu.com 基础检查
3)telnet 10.0.0.25 80 检查服务器web有没有开启,服务开没开,以及防火墙有没有挡住
4)nmap 10.0.0.25 -p 80
5)win:跟踪路由
tracert -d www.baidu.com
9:抓包工具:
tcpdump
tcpdump -n icmp -i ens32
10:DNS域名解析:
dig
nslookup
host
11:排错
如果win32和linux服务器无法连接网络,分别描述排查方法?
提示:基本检查思路:
a.物理链接是否通畅
b.本机IP,路由,DNS的设置情况是否达标。
c.测试到网关或路由的通畅情况。先测试网关然后再测路由器一级一级的测试。
d.测试ping公网ip的通畅情况(平时要记几个外部ip)
e.测试DNS的通畅,可以ping baidu.com 看是否出对应IP。
12:网站服务器访问慢,打不开的排错
1)ping www.baidu.com icmp协议基础。
2)traceroute www.baidu.com 基础检查
3)telnet 10.0.0.25 80 检查服务器web有没有开启,服务开没开,以及防火墙有没有挡住
4)nmap 10.0.0.25 -p 80
-p 递归创建
2: ls -1(long)d(directory)显示目录或者文件 全称list
-d 只想查看文件
-ld 查看文件和内容
-a 显示所有文件
-li
-i 文件的索引号
-h 人类可读
-F 给不同类型文件结尾加不同的符号
-p 只是给目录添加/
3:cd 切换目录层次 change directory
- 回到上一次目录
~ 回到根目录
cd . 当前目录
cd .. 去上一级目录
4:pwd 查看当前目录
5: touch “摸”。就是“摸”一下文件,如果文件不存在,就建立新文件,如果文件存在,就改变文件的
反问时间atime等时间戳信息。 创建文件 cd /data;touch oldboy.txt touch/data/oldboy.txt
6:目录分割区别:
windows 的目录分隔 D:\PIC\tmp-snap-pic201407起
linux的目录分隔 /data/
7:vi 1.txt 进入VI编辑器(默认命令模式) 点击a或i 进入编辑模式,敲入内容I amstudying linux,然
后按键盘上的esc键退出编辑模式(进入到命令模式),最后敲:wq 保存并退出。wq 解释write quit.
8: vi/vim 记事本编辑器 命令模式(:wq :q :q! :wq!)<===>插入模式(esc切换命令模式)
w write q quit !强制
:set nu 显示行号,dd删除当前行,yy拷贝当前行,p粘贴。行号gg定位改行,G切换到文件尾部。gg到文件头部
9: cat 查看文件的内容
-n 显示行号
cat >>oldboy.txt<<oldboy
1
2
3
oldboy
10:tac 反转内容输出
11: :q! 什么都不改退出
12:man 查看命令及配置文件等的帮助
13:mv 移动目录或改名(renname命令)
14:touch 创建文件或者修改文件时间戳
15:{} 配合echo打印序列 echo {1..6}
16: echo 打印输出内容(printf复杂的输出)
17: echo "I am oldboy linux" >o.txt 把单行文本覆盖(清空原来内容)到文件里
18: echo "I am oldboy linux" >>oldboy.txt 追加重定项
;多个命令的分隔符
/根或者路径的分隔符。
>标准输出重定向(数据流朝着箭头的方向流动),覆盖原来的文件。
>>追加重定向(数据流朝这箭头的方向流动),再原来的文件的【结尾】 ,【追加】内容.
<或< 标准输出重定向:输入重定向用于改变命令的输入,制定输入内容,后跟文件名。
<<或<< 输入重定向:后跟字符串,用来表示“输入结束",也可用ctrl+d来结束输入
19: cp [-aifpru][源文件][目标文件] 拷贝文件或者目录
-a: 相当于 -pdr
-d: 若源文件为链接文件(link file),则复制链接文件属性而非档案本身
-f: 强制,若目标档案已经存在且无法开启,则移除后再尝试;
-i: 若目标文件已经存在时,再覆盖时会先询问;
-p: 连同档案的属性一起复制过去,而非使用默认属性;
-r: 递归,用于复制目录;
-u: 若目标文件存在,则目标文件比源文件旧时才复制;
提示:如果源文件是多个,那么目的文件在最后,且是目录。
20:rm 删除文件
rm +文件名 删除该文件。会提示你删除? 确定YES 不删除NO
rm -r +文件名 递归删除文件或目录 不会提示你
rm -f +文件名 强制删除文件 不会提示你
rm -fr +文件名 删除指定的目录和文件
rmdir 删除空目录,鸡肋命令。
21: head 头部 显示文件的头部-n 行数 -行数, 默认头部10行
22:tail 尾巴 显示文件的尾部-n 行数 -行数 ,默认尾部10行
-f 跟踪显示文件的结尾
-
23:grep 核心命令之一(三剑客的老三) 排除-v“paichu" 直接过滤“xiangyaode"
-E(同时过滤多个字符串) i(忽略大小写)
24: sed 取各种内容 (三剑客的老二) 擅长输出行
-s 指定分隔符
-n 取消默认输出 p=print 打印 d=delete
25: awk (三剑客老大) 擅长打印一列
-NF 取最后一列,表示当前记录列
-NR 显示当前行号
$1 第一个列
$NF 最后一列
26:tree 查看目录结构的命令
27:.. 上一级目录
. 当前目录
~ 用户的家目录
28:xargs 用于把find/ls的输出交给后面处理。
29:|管道 通过管道把前一个命令的输出交给后一个命令继续处理
30:history 查看历史命令记录
31:!+ 行号 执行行号命令
+ c 调出最近C开头的命令
32:alias 查看计算机已经有的别名 BASH内置命令
别名的作用:
1)通过给危险命令加一些保护参数,防止人为误操作。
2)把很多复杂的字符串变成一个简单的字符串。
unalias 取消别名
33:which 查看命令的路径 whereis,locate,fing
34:xargs 建立和执行命令行从标准输入
用于把find/ls 的输出交给后面处理
35:seq 打印数字序列
36:find 查找命令
-type (f d) -name “ddd"按名字查找
-mtime 按照时间查找
37:ifconfig 可以查看的命令就可以做临时网络配置
38:route 配置默认路由
39:yum 安装包的管理工具 yum is an interactive, rpm based, package manager
40:ROOT 下添加用户设置密码
[root@localhost ~]# useradd hubo
[root@localhost ~]# passwd hubo
更改用户 hubo 的密码 。
新的 密码:
无效的密码: 过于简单化/系统化
无效的密码: 过于简单
重新输入新的 密码:
passwd: 所有的身份验证令牌已经成功更新。
41:用户之间相互切换
1)超级用户切换普通用户不要密码,普通用户切换到root或者别的用户需要密码
[root@localhost ~]# su - hubo
[hubo@localhost ~]$ whoami
hubo
[hubo@localhost ~]$ su - root
密码:
[root@localhost ~]# su - oldboy
[oldboy@localhost ~]$ su - hubo
密码:
[hubo@localhost ~]$ su - root
密码:
[root@localhost ~]# whoami
root
42:yum install tree telnet dos2unix sysstat lrzsz -y 安装必要软件命令
43:yum grouplist 查看已经安装的软件包
44:cat /etc/selinux/config 改配置文件示例
45:runlevel 查看当前系统运行级别
46.命令 init 切换运行级别
47:vimdif - edit two, three or four versions of a file with vim and 'show differences'
48:useradd 添加用户
-u UID
-c 注释
-d 指定家目录
-G 指定多个组
-s 指定它登录的程序
-m 如果不存在,则创建用户主目录
-M 不创建家目录
-e 过期时间
-g 指定它属于的组
-D 改变默认的配置
49:passwd 修改用户密码,如果不指定用户,则修改当前用户密码,普通用户只能改自己的密码。
-k 保留即将过去的用户在期满后能仍能使用
-d 删除用户密码,仅能root权限操作
-u 解锁用户密码,仅能root权限操作
-f 强制操作,仅root权限才能操作
--stdin 从stdin读入密码。
-S 查看状态
-l 锁住用户无权更改其密码,仅能通过root权限操作
-n 多少天之内不能改密码
-x 多少天之内必须改密码
-w 过期多少天之内提醒
-i 过期多少天之内处理
50:whoami 查看当前命令行终端用户
51:su 切换用户角色,注意带上-
52:history 查看命令行 -c (清除所有) -d 行号 (清除行号那条)
53:chmod +x 脚本及文件可执行权限
54:chown -R 授予用户及组权限
55:/etc/init.d/iptables stop 关闭防火墙
56:su - root 普通用户切换到root用户
57:sudo 让普通用户可以拥有指定的root权限功能
58:yum 包管理工具,解决rpm包的依赖。
59:rpm -ivh 软件安装命令 rpm -ivh 包名.rpm
60:chkconfig 查看设置开机自动软件的命令
-add/
--list 程序名
61:echo $PATH 查看环境变量
-n 不换行输出
-e 可以指定特殊的字符
62:PATH 环境变量大写,所有包含在环境里面的路径,都可以直接敲出来执行。
全局生效/etc/profile。 普通用户生效~/.bash_profile或者~/.bashrc
63:netstat***** 查看网络状态 lntup或an
64:uname 查看系统版本,内核版本
-a -r -m
65:losf -i :port 查看端口
[--tcp -t] [--udp -u] [--listening -l] [--all -a] [--numeric -n] [--program -p]
lsof -i :port 查看端口
lsof|grep del 查看文件的占用情况
66:chattr 改变文件属性 (-i,+i)
67:lsattr 查看文件属性
68:查看磁盘空间
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 14G 2.6G 11G 20% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 33M 147M 19% /boot
[root@localhost ~]# df -hi
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 885K 83K 802K 10% /
tmpfs 123K 1 123K 1% /dev/shm
/dev/sda1 50K 38 50K 1% /boot
69:隐藏版本号
[root@localhost ~]# cat /dev//null >/etc/issue
[root@localhost ~]# cat /etc/issue
70:chattr 改变文件属性
锁定关键系统文件
[root@localhost ~]# chattr +i /etc/passwd /etc/shadow /etc/group /etc/inittab
解锁关键系统文件
[root@localhost ~]# chattr -i /etc/passwd /etc/shadow /etc/group /etc/inittab
71:lsattr 查看文件属性
[root@localhost ~]# lsattr /etc/passwd
-------------e- /etc/passwd
linux 系统的目录结构
逻辑上所有的目录只有一个顶点 /(根),所有目录的起点。
根下面类似一个倒挂的树一样的层次结构
只有一颗树
linux的目录结构也是有规律的,而且也是按照类别组织的。
应用程序 /usr/bin
数据文件 /usr/share
配置文件/etc
启动命令/etc/init.d
小结:
1)linux的所有目录结构是一个有层次的倒挂着的树形目录结构。
2)根”/“是所有目录的顶点。祖宗
3)目录结构和分区设备是没有关系的。也就是不同的目录可以跨越不同的磁盘设备或分区。、
4)所有的目录都是按照一定的类别有规律的组织和命名的。
相对路径和绝对路径:
cd /data/
相对路径:
[root@localhost ~]# cd data/
[root@localhost ~]# cd ..
/ 存放系统相关的程序,也就是At&t开发的Unix程序
/usr 用户程序,及数据,帮助文件等的目录
/boor 启动Linux的核心文件
/dev/ 设备目录
/etc/ 配置文件以及服务启动的目录
/proc 显示内核及进程信息虚拟文件系统
/tmp 临时文件目录
/home 普通用户家目录
/var 变化目录,一般是日志文件的目录
/bin 和/sbin 和/usr/sbin/ 用户命令的目录
/boot:启动Linux的核心文件;
以下是其他常用的linux操作系统目录:
/bin:存放最常用命令;
/dev:设备文件;
/etc:存放各种配置文件;
/home:用户主目录;
/lib:系统最基本的动态链接共享库;
/mnt:一般是空的,用来临时挂载别的文件系统;
/proc:虚拟目录,是内存的映射;
/sbin:系统管理员命令存放目录;
/usr:最大的目录,存许应用程序和文件;
/usr/X11R6:X-Window目录;
/usr/src:Linux源代码;
/usr/include:系统头文件;
/usr/lib:存放常用动态链接共享库、静态档案库;
/usr/bin、/usr/sbin:这是对/bin、/sbin的一个补充;
cat /proc/loadavg 查看负载信息
cat /proc/cpuinfo 查看CPU信息
cat /proc/meminfo 查看内存信息
/var
网卡的配置文件
cat /etc/sysconfig/network-scripts/ifcfg-eth0
vim /etc/sysconfig/network-scripts/ifcfg-eth0
重启网卡
/etc/init.d/network restat
查看本机的dns
cat /etc/resolv.conf
查看主机名
cat /etc/hosts
查看inoded的总量和使用量
[root@localhost ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 905760 89264 816496 10% /
tmpfs 125517 1 125516 1% /dev/shm
/dev/sda1 51200 38 51162 1% /boot
查看磁盘的使用量
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 14G 2.8G 10G 22% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 33M 147M 19% /boot
1)一个文件至少要占用一个inode和一个block
2)ext3/ext4 文件系统block大小一般1K,2K,4K。其中引导分区等为1K,其他普通分区为4K(C6)
3)查看inode和block的大小以及数量
查看block大小
[root@localhost ~]# dumpe2fs /dev/sda3|grep -i "block size"
dumpe2fs 1.41.12 (17-May-2010)
Block size: 4096
[root@localhost ~]# dumpe2fs /dev/sda1|grep -i "block size"
dumpe2fs 1.41.12 (17-May-2010)
Block size: 1024
linux扩展名的作用
1)tar, .tar.gz,.tgz,.zip,.tar.bz 表示压缩文件,创建命令一般为 tar,gzip,zip等。
2).sh 表示为shell脚本文件,通过shell语言开发的程序。
3).pl表示perl语言文件,通过perl语言开发的程序。
4).py比如使python语言文件,通过python语言开发的程序。
5).html,.htm,.php,.jsp,.do表示网页语言的文件。
6).conf 表示系统服务的配置文件。
7).rpm 表示rpm安装包文件
运维开发语言:Shekk/python/php 三者之一,至少会一个,最好会两种
硬盘要分区,然后格式化,创建文件系统。
一般分2部分 第一Inode,第二Block。
查看Inode大小
[root@localhost ~]# dumpe2fs /dev/sda1|grep -i "inode size"
dumpe2fs 1.41.12 (17-May-2010)
Inode size: 128
[root@localhost ~]# dumpe2fs /dev/sda3|grep -i "inode size"
dumpe2fs 1.41.12 (17-May-2010)
Inode size: 256
1:正则表达式:
^ 的意思是以...开头。例如:^oldboy,表示匹配以oldboy 字符串开头的内容。^属于正则表达式的技术。
grep -v ^# /etc/ssh/sshd_config
2:$ 的意思是以...结尾。例如oldboy$表示已oldboy字符串结尾。
3:^$ 意思是空行
4:[^oldboy] ^意识是非,即不是oldboy字符串。
5:\ 让一个字符串脱掉马甲,还原他本来的意义。
6:ls -lrt /etc 执行这个命令后最新的文件会在最下面。
7:ln 命令 创建链接
8:find ./ -type f -name "*.log" -mtime +7|xargs rm -f 删除7天以前的log文件
find ./ -type f -name "*.log" -mtime +3 -exec rm -f {} \; 删除3天以前的log文件
find /app/logs/ -type d -mtime +30|xargs rm -rf 删除30天以前的目录,慎用
脚本创建测试数据:
for n in `seq 10`
do
date -s "10/2$n/17"
touch access-www-`(date +%F)`.log
done
date -s "10/31/17"
9:记住并要经常查看系统日志/var/log/messages 生产环境要特别重视这个文件!
10:cat -n test.txt 查看文件
11:more 查看文件但是不能向上回滚。
12:less 查看文件可以向上回滚。
13:linux 系统运行级别一般为0-6
0 关机模式 1 单用户模式 2 无NFS的多用户模式 3 文本模式 4 无用 5 图形化 6重启模式 init6
14:LANG="zh_CN.GB18030" 解决乱码
15:tar gzip 打包组合zcvf,解包组合zxfv
bzip打包组合jcvf,解包组合jxvf
z(gzip),c(create),v(verbose).file,x(extract),j(bzip)
--exclude -X(--exclude-form),
tar zcvf etc.tar.gz ./etc 打包命令 打包gz包
tar zcvf 包名 结果
tar tf 查看包里面的东西
tar zcvf oldboy2.tar.gz --exclude=oldboy/jeacen ./oldboy 排除jeacen 打包
tar xf oldboy2.tar.gz 解包oldboy2.tar.gz
tar xf oldboy2.tar.gz -C /tmp/ 指定解压目录在tmp下
tar jcvf etc.tar.bz ./etc 打包bz压缩包
tar jxvf etc.tar.bz 解包bz 压缩包
59:rpm -ivh 软件安装命令 rpm -ivh 包名.rpm 解压缩包
16: awk ' {print $3' '$6}' oldboy.txt 过滤
17:如何查看/etc/services 文件的又多少行?
1)wc -l /etc/services 直接查看文件行数
2)cat -n file|tail -1 直接查看文件行数
3)sed -n '$=' /etc/services 直接查看文件行数
4)awk ' {print NR} /etc/services |tail -1 直接查看文件行数
5)grep -n $ /etc/services |tail -1 直接查看文件行数
18:ps -ef 查看运行进程
19:grep -E "3306|1521" /etc/services 过滤/etc/services 下的3306,1521,两数字的行的内容
1:linux权限
r read 可读权限
w write 可写权限
x (Execute ,执行权限)
- (没有任何权限)
2:硬链接
1)不同的文件名具有相同inode节点号的文件是互为硬链接文件。
2)删除硬链接文件或者删除源文件之一,文件实体并未被删除。
3)只有删除了源文件及所有对应的硬链接文件,文件实体才会被删除。
4)当所有的硬链接文件及源文件被删除后,再存放新的数据会占用这个文件的空间,或者
磁盘fsck检查的时候,数据也会被回收。
5)硬链接文件是文件的又一个人口。
6)可以通过给文件设置硬链接文件,来防止重要文件被误删。
7)通过执行命令“in源文件 硬链接”,即可完成创建硬链接。
8)rm -f 硬链接文件
3:软链接 查看软链接 readlink
1)软链接类似windows里的快捷方式,软链接里面存放的是源文件的路径,并且执行源文件。
2)删除源文件,软链接文件依然存在,但是无法访问指向的路径内容了
3)执行命令 “ln-s源文件 软链接文件”即可完成创建软链接。
4)软链接和源文件是不同类型的文件,也是不同的文件。inode 号不同。
5)rm -f 软链接文件
4:控制文件删除:以下两个条件同事具备才生效。
1)受文件的硬链接数控制,有一个硬链接i_link +1,减少一个硬链接,i_link -1,
当i_link=0时,文件被删除。
例:创建一个文件i_link=1,为这个文件创建一个硬链接,i_ling=2!删除一个硬链接,
i_ling -1, 删除源文件i_link=0了.
2)受进程占用控制,当有进程使用这个文件,有一个进程占用这个文件i_count+1,即i_count=1。
当减少一个进程占用i_count-1,即i_count=0,
当没有进程调用,i_count=0,文件就被删除了。
当i_link=0并且i_count=0的时候,文件才会被真正被删除。
1:清理磁盘空间日志文件
1)企业面试题,企业生产案例
磁盘报错“No space left on device”,但是 df -h查看磁盘空间没满,请问为什么?
df -i
实战演示:
[root@localhost ~]# yum install httpd -y
[root@localhost conf]# getenforce
Disabled
[root@localhost conf]# grep log httpd.conf
[root@localhost conf]# sed -i 's@CustomLog logs/acce_log combined@CustomLog /app/log/access_log combined@g' /etc/httpd/conf/httpd.conf
[root@localhost conf]# grep app httpd.conf
[root@localhost conf]# mkdir /app/log -p
[root@localhost conf]# dd if=dev/zero of=/dev/sdc bs=8k count=10
[root@localhost conf]# mkfs -t ext3 /dev/sdc
[root@localhost conf]# mount -o loop /dev/sdc /app/log
[root@localhost conf]# df -h
[root@localhost conf]# /etc/init.d/httpd restart
[root@localhost conf]# cd /app/log
[root@localhost conf]# tail -f access_log
[root@localhost conf]# df -h
[root@localhost conf]#pwd
[root@localhost conf]#ll
[root@localhost conf]# rm -f access_log
[root@localhost conf]# df -h
[root@localhost conf]# lsof|grep del
[root@localhost conf]# /etc/init.d/httpd restart
生产场景:最佳解决方案:
1)删除文件,重启
2)清空文件,不删除
3)不要删当天的被进程占用的文件,删以前的。
2:清空文件内容
1)[root@localhost conf]# >access_log
2)[root@localhost conf]# cat /dev/null >access_log
3:查看文件的占用情况
[root@localhost conf]# lsof|grep del
4:bash 的内置命令
alias--->
bg
break
cd--->
continue
echo--->
eval
exec
exit--->
export--->
fg
getopts
help--->
history--->
jobs
kill
let--->
logout--->
printf--->
pwd--->
read
return
shift
source--->
test
times
trap
typeset
ulimit--->
umask
unalias--->
unset
type 显示命令类型的信息
内置命令的帮助:help 命令名
检查是不是内置命令:type 命令名
5:
0超级用户
1-499 虚拟用户
500-65535 普通用户
服务运行时需要用户角色的,可以不用登陆,因此,工作中我们需要运行如mysql数据库,
可以创建如下用户:
[root@localhost conf]#groupadd mysql -g 49
[root@localhost conf]#groupadd mysql -u49 -s/sbin/nologin -g musql
[root@localhost conf]#id mysql
uid=49(mysql)gid=(mysql)组=49(mysql)
[root@localhost conf]#tail -l /etc/passwd
mysql:x:49:49::/home/mysql:/sbin/nologin
[root@localhost conf]#su - mysql
This accountis currently not available
1:正则表达式:
简单的说,正则表达式就是一套处理字符串的规则和方法,以行为单位对字符串进行处理,
通过特殊的符号的辅助,我们可以快点的过滤,替换某些特定的字符串。
运维工作中,会有大量访问日志,错误日志,大数据。如何能够快速的过滤出我们需要的内容,
这就要靠正则表达式。
awk,sed,grep(egrep) 三剑客要想能工作的更搞笑,那一定离不开正则表达式的配合的。
我们想要玩好三剑客,首先就要掌握正则表达式。
linux里正则表达式。主要是awk,sed,grep(egrep)三剑客的正则表达式。
正则表达式实际就是一些特殊字符,赋予他特定的含义
1)^word 表示以word开头的。
2)word$ 搜索以word结尾的。
3). 代表且只能代表任意一个字符。
4)\ 例\. 转移符号,让有着特殊身份意义的字符,脱掉马甲,还原原型。
5)* 例o* 重复0个或多个前面的一个字符
6).* 匹配所有字符。 ^.* 以任意字符开头。
7)[] 字符集合的重复特殊字符的符号。
8)[^word] 匹配不包含^后的任意字符串的内容。
9)a\{n,m\} 重复n到m次,前一个重复的字符。如果用egrep就不用\
\{n,\} 重复至少n次,前一个重复的字符
\{n\} 重复n次,前一个重复的字符
2:扩展的正则表达式:ERE
1)+ 重复一个或一个以上前面的字符。
2)? 重复0个或一个0前面的字符。
3)| 用或的方式查找多个符号的字符串。
4)() 找出“用户组”字符串。
3:查以I ,M开头的文件名
root@localhost ~]# vim oldboy.log
[root@localhost ~]# cat oldboy.log
I am oldboy linux teacher
I like chinese chess,table tennis
My blog is http://oldboy.blog.51cto.com
My qq is 49000448
[root@localhost ~]# grep -i "^I" oldboy.log
I am oldboy linux teacher
I like chinese chess,table tennis
[root@localhost ~]# grep -i "^M" oldboy.log
My blog is http://oldboy.blog.51cto.com
My qq is 49000448
my god,my name is not oldboy,but OLDBOY
[root@localhost ~]# grep "bl.g" oldboy.log
My blog is http://oldboy.blog.51cto.com
4:此处的点号,是正则表达式的,表示任意单个字符,-n 是给过滤出的每一行加行号。
[root@localhost ~]# grep -n . oldboy.log
1:I am oldboy linux teacher
2:I like chinese chess,table tennis
3:My blog is http://oldboy.blog.51cto.com
4:My qq is 49000448
5:my god,my name is not oldboy,but OLDBOY
5:取ip 地址
1)方法一示例:
[root@localhost ~]# ifconfig ens32
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.16.18.239 netmask 255.255.255.0 broadcast 172.16.18.255
inet6 fe80::20c:29ff:fe25:bbd prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:25:0b:bd txqueuelen 1000 (Ethernet)
RX packets 4123 bytes 436394 (426.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 5037 bytes 507439 (495.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@localhost ~]# ifconfig ens32|grep "inet"
inet 172.16.18.239 netmask 255.255.255.0 broadcast 172.16.18.255
inet6 fe80::20c:29ff:fe25:bbd prefixlen 64 scopeid 0x20<link>
[root@localhost ~]# ifconfig ens32|grep "inet 172"|awk -F " " '{print $2}'
172.16.18.239
2)方法二示例:
[root@localhost ~]# ifconfig ens32|sed -n '/inet 172/p'
inet 172.16.18.239 netmask 255.255.255.0 broadcast 172.16.18.255
[root@localhost ~]# ifconfig ens32|sed -n '/inet 172/p'|sed 's#^.*inet ##g'
172.16.18.239 netmask 255.255.255.0 broadcast 172.16.18.255
[root@localhost ~]# ifconfig ens32|sed -n '/inet 172/p'|sed 's#^.*inet ##g'|sed 's# ne.*$##g'
172.16.18.239
3)方法三示例:
[root@localhost ~]# ifconfig ens32|grep "inet"
inet 172.16.18.239 netmask 255.255.255.0 broadcast 172.16.18.255
inet6 fe80::20c:29ff:fe25:bbd prefixlen 64 scopeid 0x20<link>
[root@localhost ~]# ifconfig ens32|grep "inet 172"|awk -F "[ ]+" '{print $3}'
172.16.18.239
4)方法四示例:
[root@localhost ~]# ifconfig ens32|sed -n '2p'
inet 172.16.18.239 netmask 255.255.255.0 broadcast 172.16.18.255
[root@localhost ~]# ifconfig ens32|sed -n '2p'|awk -F "[ ]+" '{print$3}'
172.16.18.239
5)方法五示例:
[root@localhost ~]# ifconfig ens32|awk -F "[ ]+" 'NR==2 {print $3}'
172.16.18.239
6)方法六示例:
[root@localhost ~]# ifconfig ens32|sed -n 's#^.*inet \(.*\) netmask.*$# \1#gp'
172.16.18.239
6:sed小括号()分组功能
示例:
[root@localhost ~]# echo "ddd kkk" >b.txt
[root@localhost ~]# cat b.txt
ddd kkk
[root@localhost ~]# sed 's#(ddd) (kkk)##g' b.txt
ddd kkk
[root@localhost ~]# sed 's#\(ddd\) \(kkk\)#\1#g' b.txt
ddd
[root@localhost ~]# sed 's#\(ddd\) \(kkk\)#\1 \2#g' b.txt
ddd kkk
7:文件的权限数字内容
r read 可读 用4表示
w write 可写 用2表示
- 没有 用0表示
x 执行 用1表示
示例一
[root@localhost ~]# touch /etiantian
[root@localhost ~]# ls -l /etiantian
-rw-r--r-- 1 root root 0 11月 2 22:04 /etiantian
[root@localhost ~]# stat /etiantian
文件:"/etiantian"
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:1008044 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2017-11-02 22:04:46.103015422 +0800
最近更改:2017-11-02 22:04:46.103015422 +0800
最近改动:2017-11-02 22:04:46.103015422 +0800
创建时间:-
[root@localhost ~]# stat /etiantian|sed -n 4p|awk -F "[(/]" '{print $2}'
0644
示例二
[root@localhost ~]# stat -c %a /etiantian
644
本题的四点思路:
1.通过 stat 输出包含目标的内容。
2.通过head,tail,sed,awk,grep 定位到单行====>这是取行惯用命令。
3.通过cut,awk 等设置分隔符取出需要段内容====>这是取列的惯用命令。
4.当命令结果包含我们需要的内容的时候,我们要想到命令的参数是否有具体的参数能够一步达到我们需要的
结果呢?这样就会去 man stat了。
1:echo -n 不换行输出
-e 激活反斜线 功能
2:看日期时间
[root@localhost ~]# echo `date +%F`
2017-11-04
3:打包日志
1)不带时间打包
[root@localhost ~]# tar zcvf oldboy1.tar.gz ./oldboy
[root@localhost ~]# ll
-rw-r--r-- 1 root root 295 11月 4 09:55 oldboy1.tar.gz
2)带时间打包
[root@localhost ~]# tar zcvf oldboy1-$(date +%F).tar.gz ./oldboy
[root@localhost ~]# ll
-rw-r--r-- 1 root root 295 11月 4 09:57 oldboy1-2017-11-04.tar.gz
3)打包3天前的内容
[root@localhost ~]# echo $(date +%F -d '-3 day')
2017-11-01
[root@localhost ~]# tar zcvf oldboy-$(date +%F -d '-3 day').tar.gz ./oldboy
[root@localhost ~]# ll
-rw-r--r-- 1 root root 295 11月 4 09:57 oldboy1-2017-11-04.tar.gz
-rw-r--r-- 1 root root 295 11月 4 10:30 oldboy-2017-11-01.tar.gz
4)保留最近7天的内容
find/log -type f -name"*.log"-mtime +7|xg
4:cut 按列切割 -d指定分隔符,-f数字选列,-c 按字符
5:date 命令 -s 修改时间。
cal 日历
6:查看3天前的
[root@localhost ~]# date +%F -d '3 day ago'
2017-11-01
7:排除空行
1)用grep方法
[root@localhost ~]# vi test.txt
[root@localhost ~]# cat test.txt
test
liyao
oldboy
[root@localhost ~]# grep -v "^$" test.txt
test
liyao
oldboy
2)用sed方法
[root@localhost ~]# vi test.txt
[root@localhost ~]# cat test.txt
test
liyao
oldboy
[root@localhost ~]# sed '/^$/d' test.txt
test
liyao
oldboy
3)awk的方法
[root@localhost ~]# vi test.txt
[root@localhost ~]# cat test.txt
test
liyao
oldboy
[root@localhost ~]# awk /^[^$]/ test.txt
test
liyao
oldboy
8:以下路径的内容解答
/var/log/messages 系统日志
/var/log/secure 系统日志安全
/car/spool/clientmqueue 邮件临时目录
/proc/interrupts 查看中断文件
/etc/fstab 磁盘文件系统开机自动挂载文件
/etc/profile 全局的环境配置文件
9:如何快递查到ifconfig的全路径。
1)
[root@localhost ~]# which ifconfig
/usr/sbin/ifconfig
2)
[root@localhost ~]# whereis ifconfig
ifconfig: /usr/sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
3)
[root@localhost ~]# find / -name ifconfig
/usr/sbin/ifconfig
10:关机重启命令
关机
shudown -h now ----->立刻关机(生产常用)
shhutdown -h +1 ----->1分钟以后关机
init 0 ----->关机
halt ----->立即停止系统,需要人工关闭电源
halt -p
poweroff ----->立即停止系统,并且关闭电源
重启
reboot ---->生产常用
shutdown -r now ---->生产常用
shhutdown -r +1 ---->1分钟以后重启
init 6
注销
logout
exit ---->生产常用
ctl +d ---->快捷键(生产常用)
11:下面命令的功能
Ctrl +a 切换到命令行开始
Ctrl +e 切换到命令行末尾
Ctrl +c 终止当前命令或脚本
Ctrl +d 退出当前shell,相当于exit。
Ctrl +l 清除屏幕内容,相当于clear。
Ctrl +u 清除(剪切)光标之前的内容
Ctrl +k 删除光标以后的内容
Ctrl +r 查看最近的命令
tab 命令补全工具
12:属组的数字算法
[root@localhost ~]# ls -l oldboy
-rw-r--r-- 1 root root 0 10月 22 00:00 access-www-2017-10-22.log
属组:root rw- =4+2+0=6
其他组:root r-- =4+0+0=4
其他: r-- =4+0+0=4
oldboy 文件的权限 644
r=4 w=2 x=1
13:权限 chmod 改变文件访问权限 分为数字和字符表示法 -R 递归
u 代表属主用户
g 代表属组
o 代表其他用户
a 代表属主,属组和其他用户,也就是上面三个用户(或组)的所有;
权限定义字母
r 代表读权限 表示具有读取阅读文件内容的权限
w 代表写权限 表示具有新增,修改文件内容的权限
(特别提示:删除文件(修改文件名等)的权限是受父目录的权限控制,和文件本身权限无关)
x 代表执行权限 表示具有执行文件的权限(文件本身要能够执行,普通用户同时还需要具备r 的权限,root用
户不需要权限也能执行,当然文件本身也需要能够执行)
权限增减符
+ 添加某个权限
- 取消某个权限
= 取消其他所有权限赋予给定的权限。
用字符式语法比较灵活组合起来方便:例如:
u=r+x 为文件属主添加读写权限
ug=rwx,o=r 为属主和属组添加读,写,执行权限,为其他用户设置读权限。
a+x 为文件的属主,属组和其他童虎添加执行权限:
g=u 让文件的属组和属主的权限相同;
u=rwx,g=rw,o=rw 为属主添加读,写,执行权限,属组添加读,写权限,为其他用户设置读,写权限
1)给test.txt575权限
[root@localhost oldboy]# chmod 575 test.txt
[root@localhost oldboy]# ls -l test.txt
-r-xrwxr-x 1 root root 13 10月 29 02:24 test.txt
2)给oldboy 里面的文件给 755权限
[root@localhost ~]# chmod -R 755 oldboy
[root@localhost ~]# ll oldboy
-rwxr-xr-x 1 root root 0 10月 22 00:00 access-www-2017-10-22.log
-rwxr-xr-x 1 root root 0 10月 23 00:00 access-www-2017-10-23.log
-rwxr-xr-x 1 root root 0 10月 24 00:00 access-www-2017-10-24.log
14:改变文件所属关系命令 chown改变文件拥有者以及用户组,-R递归
#chown [选项]... [所有者][:[组]] 文件...
方法
chown 用户 文件或目录 <===仅仅授权用户。
chown :组 文件或目录 <===仅仅授权组。 等同于chgrp组 文件或目录
chown 用户:组 文件或目录 <====表示授权用户和组
强调:其中的冒号“:”可以用点号“.”替代。要授权的用户和组名,必须是系统里实际存在的。
15:
演示环境:
一个家庭(用户组)incahome:成员oldboy,oldgirl
[root@localhost ~]# groupadd incahome
[root@localhost ~]# useradd oldboy -g incahome
[root@localhost ~]# useradd oldgirl -g incahome
[root@localhost ~]# id oldgirl
uid=1002(oldgirl) gid=1000(incahome) 组=1000(incahome)
[root@localhost ~]# id oldboy
uid=1000(oldboy) gid=1000(incahome) 组=1000(incahome)
给权限
[root@localhost ~]# chown -R oldboy /home/oldboy
[root@localhost ~]# chown -R oldgirl /home/oldgirl
16:为什么默认权限是755,644 而不是其他值呢?
网站目录安全权限:目录755,文件644是相对安全的权限,并且用户为root以及用户组root。生产工作中
一定要尽量要我们的文件和目录达到以上默认权限,包括属组。
示例
[root@localhost ~]# mkdir newdir
[root@localhost ~]# touch newfile
[root@localhost ~]# ls -lrt
drwxr-xr-x 2 root root 6 11月 6 12:49 newdir
-rw-r--r-- 1 root root 0 11月 6 12:49 newfile
[root@localhost ~]# umask
0022
[oldboy@localhost root]$ umask
0002
17
1)用户对应的前三位的x位上如果有s就表示,suid.当x位上没有x的时候,suid就是S
[root@localhost ~]# ls -l `which passwd`
-rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd
[root@localhost ~]# chmod 4644 abc
[root@localhost ~]# ls -l abc
-rwSr--r-- 1 root root 0 11月 6 14:47 abc
2)setuid位是让普通用户可以以root(或其他)用户的角色运行只有root(或其他)账号才能运行的程序或命令
,或程序命令对应本来没有权限操作的文件等。(注意和su及sudo的区别)
希望oldboy命令设置suid 加深对suid的理解
oleboy用户能够删除本来无权删除的文件
1)sudu
2) suid
chmod u+s `which rm|tail -1`
1:程序概念
简单的说:我们使用的命令就是程序,QQ程序,听歌MP3,MP4软件,linux系统也是程序。
基本特征:一堆代码,一个文件,一个命令。程序静态的,放在电脑里还没有被运行
程序:磁盘里。
2:进程概念
简单的说,把系统中的程序运行起来就是进程。 进程放在内存中
所谓进程(Processes)就是指现在系统正在执行程序,每当输入一个命令时,Shell也会同时启动一个进程。
每个进程启动时,系统会指定一个唯一的数值给每个进程,数值称为进程(ID)。
每个进程都可能以两种方式存在:一个前台和一个后台。
一般的系统网络服务都是以后台方式存在,且都会常驻在系统中,直至关机或者主动杀死时才结束,例如sshd。
3:linux的定时任务crond (crontab)服务
1)crond时linux系统中用来定期执行命令和或者指定程序任务的一种服务或软件。
一般在我们安装co5/co6系统的时候,crond就会默认存在了。
我们优化开机自启动服务的时候,第一个就是crond。
Crond服务默认情况(每分钟),会检查系统中是否有需要执行的定时任务,如果有,
就会根据事先定义好的规则来执行这个定时任务。
秒级任务:
1)crond 自身无能为力
2)为自己写守护进程shell循环
3)Quartz也可实现秒级任务
4:为什么需要定时任务?
服务器:7*24小时开机提供服务是网站的基本特征。
有重要数据:1天备一次,5份以上。
服务器上的数据一般最低1天备一次,每分钟(实时备份)再增量备份。
半夜1点备份:我们每天爬起来备份,然后睡觉,假设一次备份持续5小时。
定时任务就产生了。定时任务可以实现帮助我们自动备份数据。
crond服务====闹钟
5:linux定时任务分类:
1)系统自身的定期执行的任务
[root@localhost ~]# ll /etc/|grep cron
-rw-------. 1 root root 541 Aug 3 23:33 anacrontab
drwxr-xr-x. 2 root root 54 Oct 23 21:54 cron.d
drwxr-xr-x. 2 root root 57 Oct 23 21:54 cron.daily
-rw-------. 1 root root 0 Aug 3 23:33 cron.deny
drwxr-xr-x. 2 root root 22 Jun 10 2014 cron.hourly
drwxr-xr-x. 2 root root 6 Jun 10 2014 cron.monthly
drwxr-xr-x. 2 root root 6 Jun 10 2014 cron.weekly
-rw-r--r--. 1 root root 451 Jun 10 2014 crontab
2)用户执行的定时任务
6:linux的定时任务分类:
1)at适合执行一次就结束的调度任务。突发性的任务,每天晚上。了解即可。
依赖服务atd
2)anacron 适用于非7*24小时开机的服务器准备的。开机执行的,检测停机期间没有执行的任务,
在开机后一次性执行一遍。
3)Crond,Crond服务默认情况(每分钟),会检查系统中是否有需要执行的定时任务,如果有,
就会根据事先定义好的规则来执行这个定时任务。*****
crond依赖的服务,crond
提示:我们说的crond是一个定时任务守护进程,而crontab是用户用来设置定时任务规则的命令。
7:定时任务的使用格式
用户的定时任务规则一般分为6个段(每个段通过空格来分隔,系统的定时任务为/etc/crontab,分为7段,
空格来分隔),前五段为时间的设定段,第六段为所执行的命令或脚本任务段。
基本命令格式如下:
01 * * * * cmd
02 4 * * * cmd
22 4 * * 0 cmd
42 4 1 * * cmd
提示:
1,cmd为要执行的命令或脚本。
2,每个列之间必须要有空格。
系统定时任务:
时间记忆口诀:分时日月周
[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
8:crontab语法格式中特殊符号的含义
1)*号 示任意时间都,实际就是“每”时间的意思。举例:如 00 23 * * *cmd表示每月每周每日的23:00都
执行cmd任务。需要注意的是:每隔时间上的*表示每,如果位上是*就是该位上时间的取值范围,
例如:小时上的*等价于 00-23。
经验技巧:定时任务规则如果到小时,就最多提每天。
分位上的*就等价于0-59,表示没分。
2)-号 表示分隔符,表示一个时间范围,区间段,如17-19点,每天的17,18,19的00分执行任务。
00 17-19 * * * cmd。就是17,18,19点整点分别执行的意思。
3),号 表示分隔时段的意思。30 17,18,19 * * * /bin/sh/scripts/oldboy.sh表示每天17,18和19点的半点
时刻执行/bin/sh/scripts/oldboy.sh脚本。也可以和“-”结合使用,例如:30 3-5,17-19 * * *
/bin/sh/scripts/oldboy.sh
4)/n n代表数字,即“每隔n单位时间”,例如:每10分钟执行一次任务可以写成*/10 * * * * cmd,其中,
*/10,*的范围是0-59,因此,也可以写成0-59/10。
9:定时任务
每分钟打印一次自己名字拼音到“/server/log/自己的名字命名的文件”中。
[root@localhost ~]# crontab -e
[root@localhost ~]# crontab -l
#print a name
* * * * * echo lodboy >> /server/log/oldboy.log
[root@localhost ~]# mkdir /server/log -p
[root@localhost ~]# tail -f /server/log/oldboy.log
lodboy
lodboy
10:vi命令考察,根据中文给出命令
退出保存 :wq
退出并强制保存,!为强制的意思 :wq!
强制退出,不保存 :q! 或ZZ
光标移动到文件的最后一行 G shift+g
光标移动到文件的第一行 gg
从光标所在位置讲光标移动到当前行的开头 ^ home键
从光标所在位置讲光标移动到当前行的结尾 $ end键
取消上一次的动作 u
删除一行 dd 删n行 ndd
向下搜索 /字符
向上搜索 ?字符
11:定时任务的回顾
1)定时任务要加必要你的注释
2)执行shell脚本任务前加/bin/sh
3)定时任务命令或脚本的结尾要加>/dev/null 2>&1
4)定时任务命令的执行,超过2条的命令执行,最好用脚本文件
5)在指定的用户下执行相关的定时任务
6)生产任务程序不要随意打印输出信息 tar zcf echo 123 >a.log
7)定时任务执行的脚本要规范路径
8)配置定时任务规范操作过程,防止出错
1,增加执行任务频率调试任务(某些任务不能用于生产环境)
2,调整系统时间调试任务(不能用于生产环境)
3,通过脚本日志输出调试定时任务
4,注意一些任务命令带来的问题(*/1 * * * * echo "==" >> /tmp/oldboy.log >/dev/null 2>&1)
5,注意环境变量导致的定时任务故障
6,通过crond定时任务日志调试定时任务
7,其他稀奇古怪的问题调试的方法
1,系统环境,变量问题
2,定时任务要用绝对路径
3,脚本前线问题加/bin/sh
4,时间变量问题用反斜线\%
5,>/dev/null 2>&1问题 (1>dev/null 2>/dev/null)
6,定时任务规则之前加注释
7,使用脚本程序替代命令行定时任务
8,避免不必要的程序及命令输出
9,切到目标目录的上一级目录打包
10,定时任务脚本中的程序命令尽量用全路径
两种删除方法
1)
ls|xargs rm -f
find ./ -type -f
1:管理用户命令汇总
命令
useradd ***** 同adduser命令,执行此命令可在系统中添加用户。
userdel ***** 执行此命令可删除用户及相关用户的配置或文件。
passwd ***** 执行此命令可为用户设置密码。
chage 修改用户密码有效期限。
usermod ***** 修改用户的命令,可以通过usermod来修改登录名,用户的家目录等等。
id ***** 查看用户的UID,GID及所归属的用户组
su ***** 用户切换工具
sudo ***** 是通过另一个用户来执行命令,su 是用来切换用户,然后通过切换到的用户来完成相应的任务
但sudo能在命令后面直接接命令执行,比如 sudo ls /root,不需要root密码就可以执行只有
root才能执行相应的命令或具备的目录权限:这个权限需要通过visudo命令或者直接编辑
/etc/sudoers来实现。
visudo ***** 配置sudo权限的编辑命令;也可以不用这个命令,直接用vi来编辑/etc/sudoers实现。
但推荐用visudo来炒作(会自动检查语法)。
finger 查看用户信息工具
2:组管理命令汇总
groupadd ***** 添加用户组
-g
groupdel 删除用户组
gpasswd 为用户组设置密码
groups 显示用户所属的用户组
newgrp 更改用户所属的有效用户组
3:/etc/skel 目录
/etc/skel 目录是用来存放新用户配置文件的目录。当我们添加一个用户时,系统会从/etc/skel目录里面拷贝文件
4:/etc/default/useradd文件
/etc/default/useradd文件是在使用useradd添加用户时一个需要调用的一个默认的配置文件,可以
使用“useradd -D 参数”,这样的命令格式来修改文件里面的内容。
5:账号过期
[root@devops-zabbix oldboy]# useradd -e "2017/11/18" m1
[root@devops-zabbix oldboy]# chage -l m1
最近一次密码修改时间 :11月 08, 2017
密码过期时间 :从不
密码失效时间 :从不
帐户过期时间 :11月 18, 2017
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :99999
在密码过期之前警告的天数 :7
6:修改默认权限
[root@devops-zabbix ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
[root@devops-zabbix ~]# useradd -D -s /bin/sh
[root@devops-zabbix ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/sh
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
7:--stdin 改密码
[root@devops-zabbix ~]# echo "12345678"|passwd --stdin m1
更改用户 m1 的密码 。
passwd:所有的身份验证令牌已经成功更新。
8:7天内不能更改密码,60天以后必须修改密码,过期10天通知oldboy用户,过期后30天后禁止用户登录。
[root@devops-zabbix ~]# chage -l oldboy
最近一次密码修改时间 :11月 04, 2017
密码过期时间 :从不
密码失效时间 :从不
帐户过期时间 :从不
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :99999
在密码过期之前警告的天数 :7
[root@devops-zabbix ~]# passwd -n 7 -x 60 -w 10 -i 30 oldboy
调整用户密码老化数据oldboy。
passwd: 操作成功
[root@devops-zabbix ~]# chage -l oldboy
最近一次密码修改时间 :11月 04, 2017
密码过期时间 :1月 03, 2018
密码失效时间 :2月 02, 2018
帐户过期时间 :从不
两次改变密码之间相距的最小天数 :7
两次改变密码之间相距的最大天数 :60
在密码过期之前警告的天数 :10
9:chage 用法
[root@devops-zabbix ~]# chage -l m1
最近一次密码修改时间 :11月 08, 2017 <=====-d 将最近一次密码设置时间设为最近日期
密码过期时间 :从不 <=====
密码失效时间 :从不 <=====-I 密码过期后多久停权
帐户过期时间 :11月 18, 2017 <=====-E 帐户过期时间
两次改变密码之间相距的最小天数 :0 <=====-m 改变密码最小天数
两次改变密码之间相距的最大天数 :99999 <=====-M 改变密码最大天数
在密码过期之前警告的天数 :7 <=====-W 密码过期之前警告的天数
10:删除用户的相关命令
userdel -r 删除用户连带家目录删除
vi /etc/passwd 生产环境用这个停账号
./etc/passwd -用户账号资料文件
./etc/shadow -用户账号资讯加密文件
./etc/group -用户组资讯文件
11:用户信息修改相关命令
usermod -c 修改注释
-d 修改目录
-e 账号停止日期
-f 账号停权日期
-g 修改它的组组
-G 修改它的多个组
-l 更改登录名
-s 更改shell
-u 更改UID
-L 冻结密码
-U 取消冻结
./etc/passwd -用户账号资料文件
./etc/shadow -用户账号资讯加密文件
./etc/group -用户组资讯文件
12:查询相关的命令
id命令 查看用户信息
[root@devops-zabbix ~]# id oldboy
uid=1000(oldboy) gid=1000(incahome) 组=1000(incahome)
w命令
[root@devops-zabbix ~]# w
21:02:56 up 3:34, 1 user, load average: 0.03, 0.05, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 172.16.18.1 17:28 0.00s 0.76s 0.01s w
who命令 只是显示那个登录了
[root@devops-zabbix ~]# who
root pts/0 2017-11-08 17:28 (172.16.18.1)
last命令 显示那个在登录
lastlog 显示谁登录我的机器
[root@devops-zabbix ~]# last
root pts/0 172.16.18.1 Wed Nov 8 17:28 still logged in
reboot system boot 3.10.0-693.el7.x Wed Nov 8 17:28 - 21:04 (03:36)
root pts/0 172.16.18.1 Wed Nov 8 17:06 - crash (00:21)
reboot system boot 3.10.0-693.el7.x Wed Nov 8 17:02 - 21:04 (04:01)
root pts/0 172.16.18.1 Wed Nov 8 09:32 - down (07:09)
reboot system boot 3.10.0-693.el7.x Wed Nov 8 09:28 - 16:41 (07:13)
root pts/0 172.16.18.238 Tue Nov 7 22:54 - 22:54 (00:00)
root pts/0 172.16.18.238 Tue Nov 7 22:54 - 22:54 (00:00)
13:su 命令用法
su - 使一个shell成为登录的shell,如执行su - oldboy是,表示该用户想改变身份为oldboy,并且使用
oldboy用户的环境变量配置。
-c 切换到一个shell下,执行一个命令,然后退出所切换的用户环境
14:sudo命令用法
sudo -l 列出用户在主机上可用的和被禁止的命令;当配置好sudo授权规则后,可用这个参数来查看授权情况。
-v 验证用户的时间戳:当用户运行sudo,输入用户密码后,在短时间内可以
-u 指定以某个用户身份执行特定的命令操作。
-k 删除时间戳,下一个sudo命令要求提供密码。前提是该用户授权中不能有NOPASSWD参数。
1:用户权限集中管理方案
1)建立3个初级运维,一个高级运维,一个网络工程师,一个运维经理,密码同意111111
批量创建用户,给密码
for user in chuji001 chuji002 chuji003 net001 senior001 manager001
do
useradd $user
echo "111111"|passwd --stdin $user
done
更改用户 chuji001 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 chuji002 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 chuji003 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 net001 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 senior001 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 manager001 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@devops-zabbix ~]# tail -6 /etc/passwd
chuji001:x:1007:1007::/home/chuji001:/bin/bash
chuji002:x:1008:1008::/home/chuji002:/bin/bash
chuji003:x:1009:1009::/home/chuji003:/bin/bash
net001:x:1010:1010::/home/net001:/bin/bash
senior001:x:1011:1011::/home/senior001:/bin/bash
manager001:x:1012:1012::/home/manager001:/bin/bash
建立5个开发人员,属于phpers组
groupadd -g 999 phpers
for n in `seq 5`
do
useradd -g phpers php00$n
echo '111111'|passwd --stdin $user
done
for user in kaifamanager001 seniorphpers
do
useradd $user
echo "111111"|passwd --stdin $user
done
1)安装sudo命令,syslog服务
查询sudo和rsyslog安装没有
[root@devops-zabbix ~]# rpm -qa|egrep "sudo|rsyslog"
rsyslog-8.24.0-12.el7.x86_64
sudo-1.8.19p2-10.el7.x86_64
如果没有安装则执行下面命令安装
yum install sudo syslog -y
2)配置/etc/sudoers
增加配置"Defaults logfile=/var/log/sudo.log"到/etc/sudoers中,注意:不包含引号
[root@devops-zabbix ~]# echo "Defaults logfile=/var/log/sudo.log">>/etc/sudoers
[root@devops-zabbix ~]# tail -1 /etc/sudoers
Defaults logfile=/var/log/sudo.log
[root@devops-zabbix ~]# visudo -c #检查sudoers文件语法
/etc/sudoers:解析正确
1:配置DNS
[root@devops-zabbix ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 114.114.114.114
[root@devops-zabbix ~]# vim /etc/resolv.conf
2:查看网关
route -n 命令
[root@devops-zabbix ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.16.18.2 0.0.0.0 UG 100 0 0 ens32
172.16.18.0 0.0.0.0 255.255.255.0 U 100 0 0 ens32
3:删除默认网关
[root@devops-zabbix ~]# route del default gw 172.16.18.2
[root@devops-zabbix ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
172.16.18.0 0.0.0.0 255.255.255.0 U 100 0 0 ens32
4:添加默认网关
[root@devops-zabbix ~]# route add default gw 172.16.18.2
[root@devops-zabbix ~]# route -n
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.16.18.2 0.0.0.0 UG 100 0 0 ens32
172.16.18.0 0.0.0.0 255.255.255.0 U 100 0 0 ens32
5:修改主机名的步骤
a)hostname hubo
b)vi /etc/sysconfig/network
c)vi /etc/hosts
6:修改网卡:
编辑配置文件 vi /etc/sysconfig/network-scripts/ifcfg-ens32,
然后/etc/init.d/network restart
ifup ens32 启动网卡
ifdown ens32 停掉网卡
ifconfig 查看配置别名ip等
ifconfig ens32:x 10.0.0.25/24 up 配置别名IP,VIP
ifconfig ens32:x down 停掉别名IP
7:查看设备
ifconfig 查看IP
route -n 查看默认网关
hostname 查看主机名
netstat -rn 查看路由
8:网络检查:
1)ping www.baidu.com icmp协议基础。
2)traceroute www.baidu.com 基础检查
3)telnet 10.0.0.25 80 检查服务器web有没有开启,服务开没开,以及防火墙有没有挡住
4)nmap 10.0.0.25 -p 80
5)win:跟踪路由
tracert -d www.baidu.com
9:抓包工具:
tcpdump
tcpdump -n icmp -i ens32
10:DNS域名解析:
dig
nslookup
host
11:排错
如果win32和linux服务器无法连接网络,分别描述排查方法?
提示:基本检查思路:
a.物理链接是否通畅
b.本机IP,路由,DNS的设置情况是否达标。
c.测试到网关或路由的通畅情况。先测试网关然后再测路由器一级一级的测试。
d.测试ping公网ip的通畅情况(平时要记几个外部ip)
e.测试DNS的通畅,可以ping baidu.com 看是否出对应IP。
12:网站服务器访问慢,打不开的排错
1)ping www.baidu.com icmp协议基础。
2)traceroute www.baidu.com 基础检查
3)telnet 10.0.0.25 80 检查服务器web有没有开启,服务开没开,以及防火墙有没有挡住
4)nmap 10.0.0.25 -p 80