linux常用命令
Linux文件处理命令
命令格式:命令 [-选项] [参数]
Linux严格区分大小写
/etc/是默认安装服务的配置文件夹
/tem/是临时文件夹
/dev/是设备文件夹
/usr/是系统文件夹
/proc/是系统内存挂载文件夹
ctrl +c 退出状态
clear 清屏
tab命令、文件补全
双引号括起来有空格的整体
Ubuntu的chkconfig替换为**sysv-rc-conf **
lsb_release -a 查询Ubuntu版本
虚拟机连接:sudo service ssh start
sudo /etc/init.d/ssh start
#服务器间传输文件
scp [参数] [原路径] [目标路径]
-r----递归复制整个目录
#例子
scp -r /home/myfile username@192.000.000.000:/home/myfile
ls #显示目录文件(list)
ls -a #显示隐藏文件
ls -l #l>>long,长格式显示
ls -h #显示文件大小
ls -ld +目录名 #查看文件目录本身的信息
ls -i #查看目录下所有文件的i节点(类似文件的身份证号),每个文件只有一个i节点,但是一个i节点可以映射多个文件
- #文件
d #目录
l #软链接
r:读 w:写 x:执行#权限
u:所有者 g:所属组 o:其他人 a=所有人#用户
mkdir +目录名 #创建新目录(make directories)
mkdir -p +目录名/目录名 #递归创建目录
rmdir +目录名 #删除空目录(remove empty directories)
rm +文件名 #删除文件
rm -f #强制执行(不需询问直接删除)
rm -r #删除目录(不管目录是否为空)
rm -rf * #表示删除当前目录下所有文件
cd +/目录名 #目录切换
cd .. #返回上一级目录
cd ~ #回到主目录,家目录
cd / #回到根目录
pwd #显示当前路径
cp -rp 原文件 目标文件目录 #复制文件或者目录(copy)
-r #复制目录
-p #保留文件属性,比如保留文件修改时间
mv 原文件或目录 目标目录 #剪切文件、改名(move)
touch #在当前目录创建空文件,或者指明路径创建,可用“……”表示整体
cat #显示文件内容
cat -n #显示行号
cat -A #查看隐藏字符
tac #倒序显示文件内容
more +文件名 #分页显示文件内容,空格或f翻页,回车换行,q或Q退出
less +文件名 #分页显示文件内容,可向上翻页
head -n 行数 文件名 #显示文件前面几行(默认前十行)
tail -n 行数 文件名 #显示文件最后几行(默认后十行)
tail -f 文件名 #动态显示文件末尾内容
ln 原文件 目标文件 #生成硬链接文件(相当于保存文件属性的拷贝,而且还可以同步更新),原文件被删除时,硬链接文件依然存在,原文件与硬链接文件的i节点相同,硬链接不能跨分区,硬链接不能针对目录使用
ln -s 原文件 目标文件 #创建软链接(类似于Windows的快捷方式),用l标记,所有权限全部开放;文件很小,只是一个符号链接;有箭头指向原文件,原文件如果被删除,则软链接失去定位,直接无效,软链接可以跨分区,可以针对目录使用
权限管理命令
chmod #改变文件或者目录权限(change the permissions mode of a file)
chmod [{ugoa}{+-=}{rwx}][文件或目录] #语法,+-=为权限增减等
chmod [mode=421][文件或目录] #数字权限表示
r---4 #读权限 可以查看文件内容(cat/more/head/tail/less) 可以列出目录中的内容(ls)
w---2 #写权限 可以修改文件内容(vim) 可以在目录中创建、删除文件(touch/mkdir/rm)
x---1 #执行权限 可以执行文件(script command) 可以进入目录(cd) 有r权限基本上一定有x权限
例子:rwxrw-r--
7 6 4
-R #递归修改,改变目录权限的同时,也会更改所有子目录的权限
useradd #添加用户
passwd #设置密码
******删除一个文件的前提条件是对其所在目录有写权限******
chown [用户][文件或目录] #变更文件或目录的所有者(change file ownership),只有root能操作
文件的所有者为文件的创建者,文件的所属组为文件创建者的缺省组
chgrp [用户组][文件或目录] #变更文件或目录的所属组(change file group ownership)
groupadd #添加组
umask -S #显示、设置文件的缺省权限(the user file-creation mask)
-------------在Linux中,任何新建的文件都会去掉x执行权限,防止木马病毒文件执行-----------
umask #若只输入命令umask,则如下显示
例: 输出:0022
0----特殊权限
022 --- -w- -w-
逻辑与运算 777 rwx rwx rwx
-------------------------------
目录 755 rwx r-x r-x
文件 644 rw- r-- r-- 文件新建时总是移除了x执行权限
意味着只要输入umask 022 ,则创建的目录权限为755,文件权限为644
文件搜索命令
find [搜索范围] [匹配条件] #文件搜索
/ #全盘搜索
. #当前目录
-name #根据文件查找,精准搜索,只匹配跟名字一模一样的文件
-name *……* #模糊搜索,含有关键字的目标都会被检索
-name ……* #以关键字开头的文件
-name ……??? #问好“?”匹配单个字符
-iname #不区分大小写
------搜索的范围越小越好,搜索的条件越精准越好,避免在服务器运行高峰期大范围模糊检索-------
-size #根据文件大小查找,+表示大于多少,-表示小于,=字面意思,量化单位是数据块(512字节=0.5k)
-user #根据所有者查找
-group #根据所属组查找
-cmin #文件属性
-mmin #文件内容
-amin #访问时间
-a #表示and,两个条件同时满足
-o #表示or,两个条件满足一个就行
-type #根据文件类型查找
-exec/-ok 命令 {} \; #对搜索结果执行操作,exec直接执行,ok则需要询问操作
-inum #根据i节点查找
locate 文件名 #在文件资料库中查找文件
-i #不区分大小写
updatedb #更新文件资料库,/tem(临时文件)不会被收录在文件资料库中
which 命令 #搜索命令所在目录及别名信息
whereis 命令 #搜索命令所在目录及帮助文档
grep -iv [指定字串] [文件] #在文件中搜寻字符串匹配的行并输出
-i #不区分大小写
-v #排除指定字串,^#以井号开头
帮助命令
man [命令或配置信息] #获得帮助信息,man后面不加绝对路径,帮助类型:1为命令,5为配置文件,直接按wq退出界面
例子:man 5 passwd #查找配置文件psaawd的帮助信息
whatis 命令 #查看命令是干什么用的
apropos 配置文件 #查看配置文件的简易信息(不要加绝对路径)
命令 --help #查看命令使用方式及介绍
info #获得帮助信息(information)
help #获得shell(命令解释器)内置命令的帮助信息
用户管理命令
useradd 用户名 #添加新用户
passwd 用户名 #设置用户密码,普通用户更改密码必须符合密码严格度的要求,root则随便
who #查看登录用户信息
输出: 登录用户名 登录终端(tty本地终端,pts远程终端) 登录时间 登录主机的ip地址
w #查看更多登录用户信息
输出:用户名 累计运行时间 用户数量 负载 登录空闲时间 累计占用cpu时间 当前命令占用cpu时间 当前输入命令
userdel -r 用户名 #删除用户
压缩解压命令
#压缩格式
#.gz(linux常用)
#.zip(最古老的格式,Windows,Linux都可直接使用)
#.bz2
gzip [文件] #压缩文件(5倍?),压缩为.gz,只能压缩文件,不能压缩目录,而且压缩完毕后原文件会消失
gunzip [文件] 或者 gzip -d [文件] #解压缩.gz文件
tar #打包目录,压缩为.tar.gz
-z #打包同时压缩压缩为.tar.gz
-c #打包为.tar
-v #显示详细信息
-f #指定文件名
tar #解包目录
-z #解包同时解压缩.tar.gz
-x #解包.tar
-v #显示详细信息
-f #指定文件名
zip 选项[-r] [压缩后文件名] [文件或目录] #压缩文件或者目录,压缩为.zip,保留原文件
-r #压缩目录
unzip 压缩文件名 #解压缩
bzip2 选项[-k] [文件] #压缩文件(压缩比很惊人),压缩为.bz2
-k #产生压缩文件后保留原文件
tar -cjf 压缩后文件名 想压缩的文件名 #压缩为.tar.bz2
bunzip2 选项[-k] [压缩文件] #解压缩
-k #解压缩后保留压缩包
tar -xjf 压缩包文件名 #解压缩.tar.bz2
网络命令
write 用户名 #给用户发信息,以ctrl+d保存结束(前提是所有用户要登录到同一台服务器)
wall 信息 #发广播信息(自己也会收到)
ping 选项[-c 次数] ip地址 #测试网络连通性,会一直ping下去
-c #指定发送次数
ifconfig 网卡名称 ip地址 #查看和设置网卡信息,eth0本地真实网卡,lo回环网卡
mail [用户] #查看、发送电子邮件,h查看邮件列表,d+序列号删除邮件,q退出
last #查看目前与过去的登录信息
lastlog 选项[-u uid] #列出所有用户,列出是否登录选项
traceroute 网址 #显示数据包到主机间的路径,跟踪路由
netstat [选项] #显示网络相关信息
-t #TCP协议(传输控制协议,安全可靠,三次握手)
-u #UDP协议(用户数据报协议,没有三次握手,但是快)
-l #监听
-r #路由
-n #显示ip地址与端口号
范例:netstat -tlun #查询计算机下开了哪些端口
netstat -an #查看所有的监听信息,哪些连接了本机服务器
netstat -rn #查询路由列表
setup #永久生效配置ip地址,红帽专有命令Redhat
mount [-t 文件系统] 设备文件名 挂载点 #挂载命令
例:mount -t iso9660 /dev/sr0 /mnt/cdrom/
umount 设备文件名或者挂载点 #卸载命令,不能在挂载点当前目录执行卸载命令
关机重启命令
shutdown #关机命令
-c #取消前一个关机命令
-h +时间(now,18:30) #关机
-r #重启
#其他关机命令
halt
poweroff #相当于直接断电,最后别用
init 0
#其他重启命令
reboot
init 6
#系统运行级别
0 #关机
1 #root单用户模式,启动最小的核心程序
2 #不完全多用户,不含NFS(网络文件系统)服务
3 #完全多用户
4 #未分配
5 #图形界面
6 #重启
cat /etc/inittab #修改系统默认运行级别
runlevel #查询系统运行级别
logout #***************退出登录*****************************
windows键+l #切换锁屏
文本编辑器
vim常用操作
#vim是一个功能强大的全屏幕文本编辑器,是Linux上最常用的文本编辑器,作用是建立、编辑、显示文本文件,vim没有菜单,只有命令
vi 文本文件 #创建、进入文件
#插入模式
i----在光标所在字符前插入
a----在光标所在字符后插入
o----在光标下插入新行
I----在光标所在行行首插入
A----在光标所在行尾插入
O----在光标上插入新行
#回到命令模式esc
gg----到第一行
G----到最后一行
nG----到第n行
$----移至行尾
0----移至行首
x----删除光标所在处字符
nx----删除光标所在处字符
dd----删除光标所在行,ndd删除n行
dG----删除光标所在行到文件末尾内容
D----删除光标所在处到行尾内容
yy----复制当前行
nyy----复制当前行以下n行
dd----剪切当前行
ndd----剪切当前行以下n行
p、P----粘贴在当前光标所在行下或行上
r----取代光标所在处字符
R----从光标所在处开始替换,按esc结束
u----撤销
/字串----搜索字串,区分大小写
n----下一个
ZZ----快捷键,保存并退出
#编辑模式:
:set nu----设置行号
:set nonu----取消行号
:n----到第n行
:n1,n2d----删除指定范围的行
:set ic----不区分大小写
:%s/old/new/g----全文替换指定字符串
:n1,n2s/old/new/g----在一定范围被替换指定字符串
:w----保存修改
:w new_filename----另存为指定文件
:wq----保存并退出
:q!----不保存并退出
:wq!----保存并退出(文件所有者及root可用)
vim使用技巧
r ! #导入命令执行结果
map 快捷键 触发命令 #定义快捷键
:n1(开始行),n2(结束行)s/^(行首)/#(替换为的字符)/g(执行) #连续行注释
ab 输入行内容 输出行内容 #替换
软件包管理
软件包管理简介
linux能识别的软件包分类:
源码包(开源,脚本安装包)----编译安装缓慢步骤较多但是更加稳定且代码开放,安装过程与Windows差不多,选项相对自由且卸载方便(直接删目录),但是脚本安装包并不多
二进制包(经过编译后的,RPM包、系统默认包)----快速安装,包管理系统简单,只通过几个命令就可以实现包的安装、升级、查询、卸载,但是看不见代码内核且功能选择不如源码灵活,而且有依赖性
RPM包管理-rpm命令管理
RPM包的命名规则
包全名:操作的包是没有安装的软件包时,使用包全名,且要注意路径
包名:操作的包是已经安装的软件包时,使用包名
例:rpm包包全名:httpd-2.2.15.e16.centos.1.i686.rpm
httpd----软件包名
2.2.15----软件版本
15----软件发布次数
e16.centos----适合的Linux平台
i686----适合的硬件平台
rpm----rpm包扩展名(供管理员观看)
RPM包的依赖性
树形依赖:a–>b–>c
环形依赖:a–>b–>c–>a,把abc用一个命令全部安装可解决
模块依赖:www.rpmfind.net模块依赖查询网站
安装升级与卸载
rpm -ivh 包全名 #rpm包安装,注意安装路径
-i----安装(install)
-v----显示详细信息(verbose)
-h----显示进度(hash)
--nodeps----不检测依赖性
rpm -Uvh 包全名 #升级
rpm -e 包名 #卸载
-e----卸载(erase)
--nodeps----不检测依赖性
RPM包的查询
rpm -q 包名 #查询,不需要进入指定路径
-a----所有(all)
rpm -qa | grep 关键字 #查询所有包含关键字的rpm包
rpm -qi 包名 #查询包的详细信息
-i----查询软件信息(information)
-p----查询未安装包信息+包全名
rpm -ql 包名 #查询包中文件安装位置
-l----列表(list)
-p----查询未安装包信息+包全名
rpm -qf 系统文件名 #查询系统文件属于哪个rpm包
-f----系统文件属于哪个rpm包(file)
rpm -qR 包名 #查询软件包的依赖性
-R----依赖性(requires)
-p----查询未安装包信息+包全名
RPM包的校验与文件提取
rpm -V 已安装的包名 #校验,与原文件相比是否被更改
-V----校验指定rpm包中的文件(verify)
#验证内容中的8个信息
S----文件大小是否改变
M----文件类型或权限是否被改变
5----文件MD5校验和是否改变(可看作文件内容是否改变)
D----设备的中、从代码是否改变
L----文件路径是否改变
U----文件所有者是否改变
G----文件所属组是否改变
T----文件修改时间是否改变
#文件类型
c----配置文件
d----普通文档
g----鬼文件,指包里不应该出现的文件,但是万一出现需认真对待
l----授权文件
r----描述文件
rpm2cpio 包全名 | \ cpio -idv .文件绝对路径 #文件提取,cpio用于创建档案文件和从档案文件中提取文件
-i----copy-in模式,还原
-d----还原时自动新建目录
-v----显示还原过程
例子:
rpm -qf /bin/ls #查询ls命令属于哪个软件包
mv /bin/ls /tmp/ #造成ls命令误删除的假象
rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.e16.i686.rpm | \ cpio -idv ./bin/ls #提取rpm包中的ls命令到当前目录的/bin/ls下
cp /root/bin/ls /bin/ #把ls命令复制到/bin/目录。修复文件丢失
RPM包管理-yum在线管理
IP地址配置与网络yum源
vi /etc/sysconfig/network-scripts/ifcfg-eth0 #修改网卡文件中的ONBOOT="no"--->ONBOOT="yes"
service network restart #重启网络服务
vi/etc/yum.repos.d/CentOS-Base.repo #yum源
yum命令
yum list #查询网络上可用的软件安装包
yum -y install 包名 #不用询问默认yes,安装软件包
yum -y update 包名 #升级,慎用
yum -y remove 包名 #卸载,尽量别用
yum grouplist #列出所有可用的软件组
yum groupinstall 软件组名 #安装软件组
yum groupremove 软件组名 #卸载软件组
光盘yum源搭建
mount /dev/cdrom /mnt/cdrom #光盘挂载
#让网络yum源失效,更改repo后缀为bak就行
#让自己的光盘yum源生效,进文件改挂载地址
源码包管理
源码包与rpm包的区别(……)
安装位置的不同
rpm包:/etc/之类的
源码包:/usr/local/软件名/
脚本安装包管理与软件包选择
脚本安装包不是独立的软件包,常见的安装的是源码包
是人为吧安装过程写成了自动安装的脚本,只要执行脚本,定义简单的参数,就可以完成安装
非常类似于Windows下软件的安装方式
shell脚本基础
shell概述
shell是一个命令行解释器,为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动、挂起、停止甚至编写一些程序。
外层应用—>shell命令解释器—>内核—>硬件
shell就是人机交互界面,就是命令行
shell还是一个功能强大的编程语言,易编写、易调试、灵活性强
shell是解释执行的脚本语言,在shell中可以直接调用Linux系统命令
shell分类
Bourne shell:sh,ksh,Bash,psh,zsh
C shell:csh,tcsh
shell脚本的执行方式
echo 输出内容 #输出命令,"\"是转义符
-e----支持反斜线控制字符转换
\\----输出\
\a----输出警告音
\b----退格键,也就是向左删除键
\c----取消输出行末的换行符,同“-n”
\e----escape键
\f----换页符
\n----换行符
\r----回车
\t----制表符,tab键
\v----垂直制表符
\0nnn----按照八进制ASCLL码表输出,其中0为数字零,nnn是三位八进制数
\xnn----按照十六进制ASCLL码表输出,其中nn是两位十六进制数
脚本编写
#!/bin/bash #标志以下为shell脚本
#The first program #此为注释
#Author:chen (2096814276@qq.com)
echo -e "hello world" #此为正文
赋予执行权限,直接运行
chmod 755 hello.sh
./hello.sh
通过bash调用脚本
bash hello.sh
dos2unix 文件名 #将Windows的shell脚本文件转换为Linux版本
unix2dos 文件名 #将Linux的shell脚本文件转换为Windows版本
bash的基本功能
历史命令
history [选项] [历史命令保存文件] #历史命令
-c----清空历史命令
-w----把缓存中的历史命令写入历史命令保存文件~/bash_history
历史命令默认保留一千条,可以在环境配置中更改
历史命令的调用上下箭头
!+历史命令编号----表示重复执行此命令
!!----表示重复执行上一条命令
!+字串----表示重复执行最后一条以该字符开头的命令
命令与文件补全
tab键补全命令和文件
命令别名与常用快捷键
alias 别名=原名 #设置别名
alias #查询别名
vi /root/.bashrc #让别名永久生效
unalias 别名 #删除别名
命令执行顺序
第一序列:绝对路径、相对路径
第二序列:别名
第三序列:bash内部命令
第四序列:按照$pash环境变量定义的目录查找顺序找到的第一个命令
快捷键
ctrl+A----光标移到命令行开头
ctrl+E----光标移到命令行结尾
#ctrl+C----强行终止当前命令
#ctrl+L----清屏
#ctrl+U----删除或者剪切光标之前的命令
ctrl+K----删除或者剪切光标之后的命令
#ctrl+Y----粘贴ctrl+U或ctrl+K剪切的内容
#ctrl+R----在历史命令中搜索
#ctrl+D----退出当前终端
ctrl+Z----暂停并放入后台
ctrl+S----暂停屏幕输出
ctrl+Q----恢复屏幕输出
输入输出重定向
设备 | 设备文件名 | 文件描述符 | 类型 |
---|---|---|---|
键盘 | /dev/stdin | 0 | 标准输入 |
显示器 | /dev/stdout | 1 | 标准输出 |
显示器 | /dev/stderr | 2 | 标准错误输出 |
#不再把命令输入到屏幕上,而是命令输出到文件中,输出重定向
命令 > 文件 #覆盖文件内容
命令 >> 文件 #追加文件内容
#命令输出到文件中,标准错误输出重定向
命令 2> 文件 #覆盖文件内容
命令 2>> 文件 #追加文件内容
#命令输出到文件中,正确与错误都保存
命令 &> 文件 或 命令 > 文件 2>&1 #覆盖文件内容
命令 &>> 文件 或 命令 >> 文件 2>&1 #追加文件内容
#命令输出到文件中,正确与错误分开保存
命令 >> 文件a 2>> 文件b #正确的保存在文件中,错误的保存至b文件中
#不再通过键盘输入内容,而是通过文件输入命令,输入重定向
命令 < 文件 #把文件作为命令的输入
wc [选项] [文件名] #统计命令
-c----统计字节数
-w----统计单词数
-l----统计行数
多命令顺序执行与管道符
多命令执行符 | 格式 | 作用 |
---|---|---|
; | 命令1;命令2 | 多个命令顺序执行,命令间没有逻辑关系 |
&& | 命令1&&命令2 | 当命令1正确执行,命令2才会执行;命令1执行错误,则命令2不会执行 |
|| | 命令1||命令2 | 当命令1错误执行,命令2才会执行;命令1正确执行,则命令2不会执行 |
dd if=输入文件 of=输出文件 bs=字节数 count=个数 #磁盘复制命令,不仅拷贝文件内容,还拷贝系统
if=输入文件 #指定源文件或源设备
of=输出文件 #指定目标文件或目标设备
bs=字节数 #指定依次输入输出多少字节,即把这些字节看作一个数据块
count=个数 #指定输入输出多少个数据块
命令1 | 命令2 #命令1的正确输出作为命令2的操作对象
grep [选项] "搜索内容" 文件名 #查询文件内包含搜索内容的行
-i----忽略大小写
-n----输出行号
-v----反向查找
--color=auto----搜索出的关键字用颜色表示
通配符与其他特殊符号
通配符 | 作用(完全匹配,多了少了都不行) |
---|---|
? | 匹配任意一个字符 |
* | 匹配0个或者任意多个字符,即匹配任何内容 |
[] | 匹配中括号中的任意一个字符 |
[-] | 匹配中括号中的任意一个字符,“-”表示一个范围 |
[^] | 逻辑非,表示匹配的不是括号内的字符 |
特殊符号 | 作用 |
---|---|
‘’ | 括起来的整体里面的特殊符号当普通符号对待 |
“” | 括起来的整体里面的特殊符号当普通符号对待,$、``、\、例外 |
$ | 调用变量的值,如需要调用变量name的值时,要用$name的方式得到变量name的值 |
\ | 转义符,跟在\之后的特殊符号失去特殊含义,变为普通字符 |
``或$() | 括起来的内容是系统命令,会执行括起来的命令并调用结果 |
bash变量
用户自定义变量
变量是计算机内存的单元,其中存放的值可以改变。当shell脚本需要保存一些信息时,如一个文件名或一个数字,就把它存在一个变量中。每个变量都有名字,可以很容易的引用它。使用变量可以保存有用信息,使系统获知用户的相关设置,变量也可以保存暂时信息。
变量设置规则
变量名称可以用字母、数字、下划线组成,但是不能用数字开头
在bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须修改指定变量类型为数值型
变量用等号连接,等号左右两侧不能有空格
变量的值如果有空格,要用引号包括
在变量的值中可以使用 \ 转义符
变量的叠加要用“ ” 或者{ } 把内层变量括起来
环境变量名建议大写,便于区分
变量分类
用户自定义变量
环境变量:和操作系统环境相关的数据
位置参数变量:用来向脚本传递参数或数据的,变量名不能自定义,变量作用固定
预定义变量:是bash中已经定义好的变量,不能自定义,作用也是固定的
#变量调用
echo $name
#变量查看
set
#变量删除
unset name
环境变量
用户自定义变量只在当前shell生效
环境变量在当前shell和该shell的所有子shell中生效,如果把环境变量写入相应的配置文件中,那么该环境变量就会在所有的shell中生效
#申明变量
export 变量名=变量值
#查询环境变量
env
#删除变量
unset 变量名
位置参数变量
位置参数变量 | 作用 |
---|---|
$n | n为数字,$0代表命令本身,$1~ 9 代表第一到第九个参数,十以上的参数要用大括号包含,如 9代表第一到第九个参数,十以上的参数要用大括号包含,如 9代表第一到第九个参数,十以上的参数要用大括号包含,如{10} |
$* | 这个变量代表命令行中的所有参数,$*把所有的参数看成一个整体 |
$@ | 这个变量代表命令行中的所有参数,$@把每个参数区别对待 |
$# | 这个变量代表命令行中的所有参数的个数 |
#shell脚本
-----------------------------------------------------------
#!/bin/bash
echo '$*与$@的区别'
for i in "$*"
do
echo '($*)'"第一个参数:$i"
done
x=1
for j in "$@"
do
echo '($@)'"参数$x:$j"
x=$(($x+1))
done
-------------------------------------------------------------
#输出结果 运行./canshu2.sh 12 53 35 26
$*与$@的区别
($*)第一个参数:12 53 35 26
($@)参数1:12
($@)参数2:53
($@)参数3:35
($@)参数4:26
预定义变量
预定义变量 | 作用 |
---|---|
$? | 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个命令的值为非0,则证明上一个命令的执行错误 |
$$ | 当前进程的进程号(PID) |
$! | 后台运行的最后一个进程的进程号(PID) |
#接受键盘输入
read [选项][变量] #监听键盘的输入结果
-p “提示信息”----在等待read输入时,输出提示信息
-t 秒数----read命令会一直等待用户输入,该选项可指定时间
-n 字符数----接受指定的字符数就会执行
-s----隐藏输入的信息
#shell脚本
-------------------------------------------------------------
#!/bin/bash
#Author:chen
#提示输入姓名并等待30秒,然后将输入结果保存在变量name中
read -t 30 -p "Please input your name:" name
echo "Name is $name"
#年龄用隐私输入
read -s -t 30 -p "Please enter your age:" age
echo "\n"
echo "Age is $age"
#接受一个字符的性别就会执行
read -n 1 -t 30 -p "Please select your gender[M/F]:" gender
echo "\n"
echo "Sex is $gender"
--------------------------------------------------------------
#输出结果,运行./canshu3.sh
Please input your name:c
Name is c
Please enter your age:\n
Age is 18
Please select your gender[M/F]:m\n
Sex is m
数值运算与运算符
declare [+/-][选项] 变量名 #声明变量类型
-: ----给变量设定类型属性
+: ----取消变量的类型属性
-i: ----将变量声明为整数型
-x: ----将变量声明为环境变量
-p: ----显式指定变量的被声明类型
#运算方法
aa=11
bb=22
declare -i cc=$aa+$bb #打印输出cc=33
dd=$(expr $aa + $bb) #打印输出dd=33,注意+左右有空格,不常用
ee=$(($aa+$bb)) #打印输出ee=33
ff=$[$aa+$bb] #打印输出ff=33
优先级:数值越大,优先级越高
优先级 | 运算符 | 说明 |
---|---|---|
13 | -,+ | 单目负,单目正 |
12 | !,~ | 逻辑非,按位取反或补码 |
11 | *,/,% | 乘,除,取模 |
10 | +,- | 加,减 |
9 | <<, >> | 按位左移,按位右移 |
8 | < =, > =, < , > | 小于等于,大于等于,小于,大于 |
7 | ==,!= | 等于,不等于 |
6 | & | 按位与 |
5 | ^ | 按位异或 |
4 | | | 按位或 |
3 | && | 逻辑与 |
2 | || | 逻辑或 |
1 | =, += , -= , *= , /= , %= , &= , ^= , |= , <<= , >>= | 赋值、运算且赋值 |
变量测试与内容替换
变量置换方式 | 变量y没有设置 | 变量y为空 | 变量y设置值 |
---|---|---|---|
x=${y-新值} | x=新值 | x为空 | x=$y |
x=${y:-新值} | x=新值 | x=新值 | x=$y |
x=${y+新值} | x为空 | x=新值 | x=新值 |
x=${y:+新值} | x为空 | x为空 | x=新值 |
x=${y=新值} | x=新值 y=新值 | x为空 y值不变 | x=$y y值不变 |
x=${y:=新值} | x=新值 y=新值 | x=新值 y=新值 | x=$y y值不变 |
x=${y?新值} | 新值输出到标准错误输出(就是屏幕) | x为空 | x=$y |
x=${y:?新值} | 新值输出到标准错误输出 | 新值输出到标准错误输出 | x=$y |
环境变量配置文件
简介
source 配置文件 #使配置文件直接生效
. 配置文件 #作用与“source 配置文件”相同,‘.’是source的缩写
环境变量配置文件中主要是定义对系统操作环境生效的系统默认环境变量,比如PATH(查找命令的路径)、HISTSIZE(历史命令条数)、PSI(提示符)、HOSTNAME(主机名)等默认环境变量。
保存在/etc下的文件对全局生效,~/只对当前用户生效,“.”开头为隐藏文件
- /etc/profile
- /etc/profile.d/*.sh
- ~/.bash_profile
- ~/.bashrc
- /etc/bashrc
作用
/etc/profile的作用
- USER变量
- LOGNAME变量
- MAIL变量
- PATH变量
- HOSTNAME变量
- HISTSIZE变量
- umask
- 调用/etc/profile.d/*.sh文件
其他配置文件和登录信息
~/.bash_logout 注销时生效的环境变量配置文件
~/.bash_history 历史命令配置文件
shell登录欢迎信息
转义符 | 作用 |
---|---|
\d | 显示系统日期 |
\s | 显示操作系统名称 |
\l | 显示登录的终端号 |
\m | 显示硬件体系结构 |
\n | 显示主机名 |
\o | 显示域名 |
\r | 显示内核版本 |
\t | 显示系统时间 |
\u | 显示当前登录用户的序列号 |
shell编程
基础正则表达式
正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep,awk,sed等命令可以支持正则表达式
通配符用来匹配符合条件的文件名,通配符是完全匹配。ls、find、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配
元字符 | 作用 |
---|---|
* | 前一个字符匹配0次或多次 |
. | 匹配除了换行符外的任意一个字符 |
^ | 匹配行首 |
$ | 匹配行尾 |
[] | 匹配中括号中指定的任意一个字符,只匹配一个字符 |
[^] | 匹配除中括号的字符以外的任意字符 |
\ | 转义符,取消特殊字符的意义 |
\ {n \ } | 表示其前面的字符恰好出现n次 |
\ {n,\ } | 表示其前面的字符出现不小于n次 |
\ {n,m\ } | 表示其前面的字符至少出现n次,最多出现m次 |
grep -n "^$" 文件名 #表示匹配空白行
grep “[a-z]” 文件名 #表示匹配任意小写字母
字符截取命令
cut命令
适用于分隔符为tab或者:的文档
cut -d ":" -f n,m 文件名 #表示截取分隔符为冒号的第n列、m列的数据,-d指定分隔符,-f指定列号
cat /etc/passwd | grep /bin/bash | grep -v root | cut -d ":" -f 1 #-v为取反
printf命令
printf '输出类型输出格式' 输出内容 #格式化输出命令
%ns----输出字符串,n为数字代表输出几个字符
%ni----输出整数,n代表输出几个数字
%m.nf----输出浮点数,m和n指代输出的浮点位数与小数位数
#例子
printf '%s\t %s\t %s\t %s\n' $(cat test.txt)
#输出
ID NAME GENDER AGE
1 zhao m 21
2 qian f 20
3 sun m 18
printf 命令需手工调整格式
awk命令
#awk语句(行处理)(可以识别空格作为分隔符)
awk '条件1{动作1}条件2{动作2}……' 文件名
#条件
一般使用关系表达式作为条件
x>10----判断变量是否大于10
x>=10----大于等于
x<=10----小于等于
#动作
格式化输出语句
流程控制语句
#例子
awk '{printf $2 "\t" $4"\n"}' test.txt
#输出
NAME AGE
zhao 21
qian 20
sun 18
#BEGIN命令,在正式命令执行前强制执行一条命令
awk 'BEGIN{FS=":"}{printf $1 "\t" $3"\n"}' /etc/passwd
#END命令,在正式命令执行后强制执行一条命令
awk 'BEGIN{FS=":"}END{print "end"}{printf $1 "\t" $3"\n"}' /etc/passwd
#FS内置变量
FS=":" #指定分隔符
sed命令
sed是一种几乎包括在所有Unix平台的轻量级流编辑器(可以用管道符接收处理结果)。sed主要是用来将数据进行选取、替换、删除、新增的命令。
sed [选项] '[动作]' 文件名 #处理数据
#选项
-n----把经过sed命令处理的行输出到屏幕
-e----允许对输入数据应用多条sed命令编辑
-i----用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出
#动作
a\----追加,除最后一行外,每行末尾需要用“\”表示数据未完结
c\----行替换
i\----插入
d----删除
p----打印
s----字符替换
#字串替换
sed 's/旧字串/新字串/g' 文件名
#例子(没有修改文件本身的数据)
sed -n '2p' test.txt #打印输出第二行
sed '2,4d' test.txt #删除2到4行
sed '2a hello' test.txt #在第二行后追加hello
sed '2i hello \ world' test.txt #在第二行前插入两行数据
sed '2c nobody' test.txt #替换第二行
sed '3s/20/24/g' test.txt #把第三行的20改为24
sed -i '3s/20/24/g' test.txt #把第三行的20改为24,并修改对应文件
sed -e 's/zhao//g ; s/qian//g' test.txt #将zhao,qian的字符串修改为空
字符处理命令
#排序命令
sort [选项] 文件名
-f----忽略大小写
-n----以数值型进行排序,默认使用字符串型排序
-r----反向排序
-t----指定分隔符,默认为制表符
-k n[,m]----按照指定的字段范围排序。从第n字段开始,m字段结束(默认到行尾)
#统计命令
wc [选项] 文件名
-l----只统计行数
-w----只统计单词数
-m----只统计字符数
条件判断
测试文件类型 | 作用(是为真,否为假) |
---|---|
-b 文件 | 判断文件是否存在,并且是否为块设备文件 |
-c 文件 | 判断文件是否存在,并且是否为字符设备文件 |
-d 文件 | 判断文件是否存在,并且是否为目录文件 |
-e 文件 | 判断文件是否存在 |
-f 文件 | 判断文件是否存在,并且是否为普通文件 |
-L 文件 | 判断文件是否存在,并且是否为符号链接文件 |
-p 文件 | 判断文件是否存在,并且是否为管道文件 |
-s 文件 | 判断文件是否存在,并且是否为非空 |
-S 文件 | 判断文件是否存在,并且是否为套接字文件 |
两种判断格式
test [选项] 文件名 #判断文件是否存在,且文件是否为该类型
[ 选项 文件名 ] #中括号与参数之间要有空格
测试文件权限 | 作用(有为真,无为假) |
---|---|
-r 文件 | 判断文件是否存在,并且是否有读权限 |
-w文件 | 判断文件是否存在,并且是否有写权限 |
-x 文件 | 判断文件是否存在,并且是否有执行权限 |
-u 文件 | 判断文件是否存在,并且是否有SUID权限 |
-g 文件 | 判断文件是否存在,并且是否有SGID权限 |
-k 文件 | 判断文件是否存在,并且是否有SBit权限 |
文件比较 | 作用(是为真,否为假) |
---|---|
文件1 -nt 文件2 | 判断文件1的修改时间是否比文件2的新 |
文件1 -ot 文件2 | 判断文件1的修改时间是否比文件2的旧 |
文件1 -ef 文件2 | 判断文件1是否和文件2 的Inode号(i节点)一致,可以理解为两个文件是否为同一文件。这个判断可用于硬链接 |
数值比较 | 作用(是为真,否为假) |
---|---|
整数1 -eq 整数2 | 判断整数1是否和整数2相等 |
整数1 -ne 整数2 | 判断整数1是否和整数2不相等 |
整数1 -gt 整数2 | 判断整数1是否大于整数2 |
整数1 -lt 整数2 | 判断整数1是否小于整数2 |
整数1 -ge 整数2 | 判断整数1是否大于等于整数2 |
整数1 -le 整数2 | 判断整数1是否小于等于整数2 |
字符串判断 | 作用(是为真,否为假) |
---|---|
-z 字符串 | 判断字符串是否为空 |
-n 字符串 | 判断字符串是否为非空 |
字串1 == 字串2 | 判断字符串1是否和字符串2相等 |
字串1 !== 字串2 | 判断字符串1是否和字符串2不相等 |
多重条件判断 | 作用(都真且为真,有真或为真) |
---|---|
判断1 -a 判断2 | 逻辑与,判断1与判断2都成立,最终结果才为真 |
判断1 -o 判断2 | 逻辑或,判断1与判断2有一个成立,最终结果就为真 |
!判断 | 逻辑非,取反 |
流程控制
if语句
单分支if条件语句
#注意[]的空格
if [ 条件判断式 ]; then
程序
fi
#----------------或者-------------------
if [ 条件判断式 ]
then
程序
fi
双分支if条件语句
if [ 条件判断式 ]
then
条件成立时,执行程序1
else
条件不成立时,执行程序2
fi
多分支if语句
if [ 条件判断式1 ]
then
条件1成立时,执行程序1
elif [ 条件判断式2 ]
then
条件2成立时,执行程序2
……略……
else
当所有条件都不满足时,执行程序n
fi
#----------------------例子--------------------------
#!/bin/bash
#author:chen
#判断用户输入的是什么文件
read -p "Please input a filename:" file
#接收键盘输入,并将其赋予变量file
if [ -z "$file" ]
#判断输入是否为空
then
echo "Error! please input a filename!"
exit 1
elif [ ! -e "$file" ]
#判断file的值是否存在
then
echo "Your input is not a file"
exit 2
elif [ -f "$file" ]
#判断file的值是否为普通文件
then
echo "$file is a regulare file"
elif [ -d "$file" ]
#判断file的值是否为目录文件
then
echo "$file is a directory"
else
echo "$file is an other file"
fi
case语句
case语句和if……elif……else语句一样是多分支条件语句,但是case语句只能判断一种关系。
case $变量名 in
"值1")
如果变量的值等于1,则执行程序1
;;
"值2")
如果变量的值等于2,则执行程序2
;;
……省略其他分支……
*)
如果变量的值等于1,则执行程序1
;;
esac
#---------------例子------------------
#!/bin/bash
#判断用户输入
#author: chen
read -p "Please choose yes/no:" -t 30 cho
case $cho in
"yes")
echo "Your choose is yes!"
;;
"no")
echo "Your choose is no!"
;;
*)
echo "Your choose is error!"
;;
esac
for循环
语法1
for 变量 in 值1 值2 值3……
do
程序
done
#-------------------例子-------------------
#!/bin/bash
#打印时间
for time in morning noon afternoon evening
do
echo "Now time is $time!"
done
#---------------------例子----------------------
#!/bin/bash
#批量解压缩包
cd /lamp #到压缩包所在的文件夹
ls *.tar.gz > ls.log #查看所有的.tar.gz压缩包,将查看结果放入ls.log文件中
for i in $(cat ls.log) #循环解压缩
do
tar -zxf $i &>/dev/null #将解压缩的文件传到null
done
rm -rf /lamp/ls.log #删除记录文件
语法2
for ((初始值;循环控制条件;变量变化))
do
程序
done
#-------------------例子-----------------------
#!/bin/bash
#从1累加到100
s=0
for ((i=1;i<=100;i=i+1))
do
s= $(( $s+$i ))
done
echo "The sum of 1+2+……+100 is:$s"
while循环与until循环
while循环是不定循环,也称作条件循环。只要条件判断式成立,循环就会一直继续,直到条件判断式不成立,循环才会停止。
while [条件判断式]
do
程序
done
#-------------------例子----------------------
#!/bin/bash
#从1累加到100
i=1
s=0
while [ $i -le 100 ] #如果i小于等于100
do
s=$(( $s+$i ))
i=$(( $i+1 ))
done
echo "The sum is: $s"
until循环,和while循环相反,until循环时只要条件判断式不成立则进行循环,并执行循环程序。一旦循环条件成立,则立即终止循环。
until [条件判断式]
do
程序
done
#--------------------例子----------------------
#!/bin/bash
#从1累加到100
i=1
s=0
until [ $i -gt 100 ] #如果i大于等于100
do
s=$(( $s+$i ))
i=$(( $i+1 ))
done
echo "The sum is: $s"
Linux服务管理
服务分类
- rpm包安装的服务(默认安装的服务):独立服务(被直接访问,独立的个体),基于xinetd服务(xinetd本身独立,但是通过其访问的服务不独立)
- 源码包安装的服务
chkconfig --list #查看服务自启动状态,只能看到所有rpm包安装的服务
ps aux #查看进程
直接进入/usr/local下查看源码包服务安装位置
RPM服务的管理
- /etc/init.d/: 启动脚本位置
- /etc/sysconfig/: 初始化环境配置文件位置
- /etc/: 配置文件位置
- /etc/xinetd.conf: xinetd配置文件
- /etc/xinetd.d/: 基于xinetd服务的启动脚本
- /var/lib/: 服务产生的数据放在在这里
- /var/log/: 日志
#独立服务的启动
/etc/init.d/独立服务名 start|stop|status|restart|
service 独立服务名 start|stop|status|restart|
service --status-all #查询所有服务的状态
chkconfig --level 2345 on/off #开机自启动,禁用
0 #关机
1 #root单用户模式,启动最小的核心程序
2 #不完全多用户,不含NFS(网络文件系统)服务
3 #完全多用户
4 #未分配
5 #图形界面
6 #重启
修改/etc/rc.d/rc.local文件
使用ntsysv命令管理自启动
xinetd–超级守护进程
yum -y install xinetd
yum -y install telnet-server
源码包服务的管理
使用绝对路径,调用启动脚本进行启动。不同源码包的启动脚本不同,可以查看源码包的安装说明,来查看启动脚本的方法。
Linux系统管理
进程管理
判断服务器健康状态
top [选项] -d 秒数----指定top命令每隔几秒更新,默认3秒 #在top命令的交互模式中执行 ?或h----显示交互模式的帮助 P----以cpu使用率排序,默认就是此项 M----以内存使用率排序 N----以PID排序 q----退出top #-------------------------例子---------------------------- root@LAPTOP-IGHM692L:/etc# top top - 11:36:03 up 2:24, 0 users, load average: 0.00, 0.00, 0.00 Tasks: 10 total, 1 running, 9 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st MiB Mem : 7806.3 total, 7039.5 free, 339.2 used, 427.6 buff/cache MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 7240.5 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 2328 1512 1408 S 0.0 0.0 0:00.00 init(Ubuntu) 4 root 20 0 2344 68 68 S 0.0 0.0 0:00.00 init 9 root 20 0 2348 112 0 S 0.0 0.0 0:00.00 Relay(10) 67 root 20 0 15420 5352 3720 S 0.0 0.1 0:00.00 sshd 70 root 20 0 17148 10480 8332 S 0.0 0.1 0:00.02 sshd 96 chen 20 0 17404 7696 5292 S 0.0 0.1 0:00.11 sshd 97 chen 20 0 6204 5208 3432 S 0.0 0.1 0:00.01 bash 135 root 20 0 8000 4500 3688 S 0.0 0.1 0:00.02 su 136 root 20 0 5164 4132 3412 S 0.0 0.1 0:00.06 bash 728 root 20 0 7804 3740 3144 R 0.0 0.0 0:00.00 top #------------------------解析---------------------------- #第一行信息:任务队列信息 11:36:03----系统当前时间 up 2:24----已经运行时间 0 users----当前登录用户个数 load average: 0.00, 0.00, 0.00----系统在1分钟,5分钟,15分钟的平均负载(单核:一般认为小于1正常,大于1异常) #第二行信息:进程信息 Tasks: 10 total----系统中进程数目 1 running----正在运行的数目 9 sleeping----睡眠的进程数目 0 stopped----停止的进程数 0 zombie----僵尸进程(正在终止,还没有完全终止),如果不是0,需手工检查僵尸进程 #第三行信息:cpu信息 %Cpu(s): 0.0 us----用户模式占用的cpu百分比 0.0 sy----系统模式占用的cpu百分比 0.0 ni----改变过优先级的用户进程占用的cpu百分比 100.0 i----空闲cpu的百分比 0.0 wa----等待输入/输出的进程占用的cpu百分比 0.0 hi----硬中断请求服务占用的cpu百分比 0.0 si----软中断请求服务占用的cpu百分比 0.0 st----虚拟时间百分比,就是当有虚拟机时,虚拟cpu等待实际cpu的时间百分比 #第四行信息:物理内存信息 MiB Mem : 7806.3 total----物理内存的总量 7039.5 free----空闲的物理内存 339.2 used----已经使用的物理内存数量 427.6 buff/cache----作为缓冲的内存数量 #第五行信息:交换分区的信息 MiB Swap: 2048.0 total----交换分区(虚拟内存)总大小 2048.0 free----空闲交换分区大小 0.0 used----已经使用的交换分区大小 7240.5 avail Mem----作为缓存的交换分区大小
查看系统中所有进程
pstree -p #显示进程树及id ps aux #查看系统中所有进程,使用BSD操作系统格式 ps -le #查看系统中所有进程,使用Linux标准命令格式 #---------------------例子------------------------- root@LAPTOP-IGHM692L:/etc# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND chen 97 0.0 0.0 6204 5208 pts/0 Ss 09:12 0:00 -bash root 135 0.0 0.0 8000 4500 pts/0 S 09:27 0:00 su root root 136 0.0 0.0 5164 4132 pts/0 S 09:27 0:00 bash root 727 0.0 0.0 7480 3156 pts/0 R+ 11:16 0:00 ps aux #--------------------------解析------------------------- PID:进程的id号 %CPU:该进程占用cpu的百分比 %MEM:该进程占用物理内存的百分比 VSZ:该进程占用虚拟内存的大小 RSS:该进程占用实际物理内存的大小 TTY:该进程是在哪个终端运行的。tty1~tty7代表本地控制终端,pts/0~255代表虚拟终端 STAT:进程状态。R:运行,S:睡眠,T:停止,s:包含子进程,+:位于后台 START:该进程的启动时间 TIME:该进程占用的cpu时间 COMMAND:产生此进程的命令
杀死进程
kill -l #查看可用的进程信号 kill [-数字] 进程id号 #对进程进行操作 killall [选项][信号] 进程名 #按照进程名杀死进程 -i----交互式,询问是否杀死某个进程 -I----忽略大小写 pkill [选项][信号] 进程名 #按照进程名杀死进程 -t 终端号----按照终端号踢出用户 w #查询本机登录用户
信号代号 | 信号名称 | 说明 |
---|---|---|
1 | SIGHUP | 让进程立即关闭,然后重新读取配置文件后重启 |
2 | SIGINT | 程序终止信号,终止前台进程 |
8 | SIGFPE | 在发生致命算术运算错误时发出 |
9 | SIGKILL | 强制终止进程,不能被阻断 |
14 | SIGALRM | 时钟定时信号,计算实际的时钟时间 |
15 | SIGTERM | 正常结束进程的信号 |
18 | SIGCONT | 让暂停的进程恢复执行,本信号不能被阻断 |
19 | SIGSTOP | 暂停前台进程,不能被阻断 |
工作管理
#进程放入后台
#方法1
命令 & #后台运行
#方法2
ctrl+z #暂停到后台
ctrl+c #强制终止
jobs [-l] #查看后台进程
fg %工作号 #将后台暂停的工作恢复到前台执行
bg %工作号 #将后台暂停的工作恢复到后台执行,不能恢复交互进程
系统资源查看
vmstat [刷新延时 刷新次数] #监控系统资源
dmesg #查看开机时内核检查信息(查看硬件情况)
free [选项] #查看内存使用状态
-b----以字节B为单位显示
-k----KB
-m----MB
-g----GB
cat /proc/cpuinfo #查看cpu信息
uptime #显示系统的启动时间和平均负载,和w命令效果相同
uname [选项] #查看系统内核信息
-a----系统相关信息
-r----内核版本
-s----内核名称
file /bin/ls #查看当前系统位数
lsb_release -a #查看当前系统发行版本
lsof [选项] #列出进程打开或使用的文件信息
-c 字符串----只列出以字符串开头的进程打开的文件
-u 用户名----只列出某个用户的进程打开的文件
-p PID----列出某个PID进程打开的文件
缓存(cache):加速读取硬盘数据
缓冲(buffer):加速写入硬盘数据
系统定时任务
service crond restart #其实在系统中crond是开机启动的,crond有的也是cron
chkconfig crond on
#用户的crontab设置,定时任务
crontab [选项]
-e----编辑crontab定时任务
-l----查询crontab任务
-r----删除当前用户所有的crontab任务
-u----指定用户(默认为当前用户)
#格式(识别的最小时间精度为分钟)
* * * * * 命令
#第一个*表示:分钟0-59
#第二个*表示:小时0-23
#第三个*表示:日期1-31
#第四个*表示:月份1-12
#第五个*表示:星期0-7(0和7都是星期天)
"*"----任意时间
","----代表不连续的时间
"-"----代表连续的时间范围
"*/n"----代表每隔多久执行一次
#-------------------例子-------------------
0 0 1,15 * 1 命令 #每个月的1号与15号,或每个月星期一的时候在凌晨0时0分执行命令(星期与日期时和的关系,也就是并集,不过设置的时候最好不要同时出现,避免混乱)
#在定时任务中使用%命令时要加转义符\
日志管理
日志简介
目录路径不一定准确,按各自系统查找
常见日志 | 说明 |
---|---|
/var/log/cron或/var/spool/cron | 记录了系统定时任务相关信息 |
/var/log/cups/ | 打印信息 |
/var/log/dmesg | 开机自检信息 |
/var/log/btmp | 错误登录,这个文件是二进制文件,用lastb命令查看 |
/var/log/lastlog | 所有用户最后一次登录的时间,也是二进制文件,使用lastlog查看 |
/var/log/mailog | 邮件信息 |
/var/log/message | 系统重要信息的日志 |
/var/log/secure | 验证和授权方面的信息 |
/var/log/wtmp | 永久记录所有用户的登录、注销信息,记录系统的启动、重启、关机事件。last命令查看 |
/var/log/utmp | 当前用户信息,用w、who、users命令查看 |
除了系统默认的日志之外,采用RPM包安装的服务也会默认把日志记录放在/var/log中
rsyslogd服务
rsyslogd的新特点
- 基于tcp网络协议传输日志信息
- 更安全的网络传输协议
- 有日志消息的及时分析框架
- 后台数据库
- 配置文件可以写简单的逻辑判断
- 与syslogd配置文件兼容
#/etc/rsyslogd配置文件
authpriv.* /var/log/secure
#服务名称:authpriv
#连接符号:"."
#日志等级:*
#记录位置:/var/log/secure
*----所有等级
.----大于
.----等于
.!----不等于
等级 | 说明 |
---|---|
debug | 一般调试信息 |
info | 通知信息 |
notice | 普通信息 |
warning | 警告信息 |
err | 报错信息 |
crit | 临界状况信息 |
alert | 警告状态信息,必须立即采取行动 |
emerg | 疼痛信息,系统已经无法使用 |
日志轮替
logrotate配置文件/etc/logrotate.conf
#在/etc/logrotate.conf文件中加入以下命令,实现日志轮替
#以apache为例
/usr/local/apache2/logs/access_log {
daily
create
rotate 30
}
#日志轮替命令
logrotate [选项] 配置文件名
-v----显示轮替过程
-f----强制进行日志轮替
启动管理
启动流程
#运行级别
0 #关机
1 #root单用户模式,启动最小的核心程序
2 #不完全多用户,不含NFS(网络文件系统)服务
3 #完全多用户
4 #未分配
5 #图形界面
6 #重启
runlevel #查看运行级别
init [运行级别] #改变运行级别命令
vim /etc/inittab #改变开机启动的默认级别,id:3:initdefault:
启动流程图
启动引导程序grub
硬盘 | 分区 | Linux中设备文件名 | grub中设备文件名 |
---|---|---|---|
第一个主分区 | /dev/sda1 | hd(0,0) | |
第一块SCSI硬盘 | 第二个主分区 | /dev/sda2 | hd(0,1) |
扩展分区 | /dev/sda3 | hd(0,2) | |
第一个逻辑分区 | /dev/sda5 | hd(0,4) | |
第一个主分区 | /dev/sdb1 | hd(1,0) | |
第二块SCSI硬盘 | 第二个主分区 | /dev/sdb2 | hd(1,1) |
扩展分区 | /dev/sdb3 | hd(1,2) | |
第一个逻辑分区 | /dev/sdb5 | hd(1,4) |
备份与恢复
Linux需要备份的数据
- /root/
- /home/
- /var/spool/mail/
- /etc/
- 其他目录
完全备份,差异备份,增量备份
#备份
dump [选项] 备份之后的文件名 要备份的文件或目录
-level----0~9十个备份级别
-f 文件名----指定文件名
-u----备份成功后,把备份时间记录在/etc/dumpdates文件
-v----显示更多输出信息
-j----调用bzlib库压缩备份文件,就是压缩为.bz2格式
-W----显示允许被dump的分区的备份等级和备份时间
#恢复
restore [模式选项] [选项]
模式选项:
-C----比较备份与实际的变化
-i----交互
-t----查看
-r----还原
选项:
-f----指定文件名