Linux基础
1.目录结构
bin:指令
dev:管理设备
etc:配置文件
lib:动态连接共享库
media:挂载,识别光驱之类
opt:需要安装的软件
root:root用户的文件
sbin:高级用户能使用的指令
selinux:安全相关
home:存放普通用户的目录
lost-found:一般为空,非法关机后会存放一些文件
usr:用户安装的软件之类,类似program file
tmp:临时文件
mnt:临时挂在别的文件系统
var:不断变化的文件。类似日志
proc:内核相关,不要动
srv:内核相关,不要动
sys:内核相关,不要动
2.常用指令
vim指令快捷键
拷贝当前行:yy
拷贝当前行向下5行:5yy
粘贴:p
删除当前行:dd
删除当前行向下5行:5dd
显示/取消显示文件行行号:命令行下,:set nu/:set nonu
到文档最底行/最首行:G/gg
撤销输入的文本:u
将光标移到20行:先按20,然后按shift+g
不管是重启还是关闭系统,要先运行sync,防止数据丢失
shutdown -h now 立刻进行关机
shutdown -h 1 1分钟后关机
shutdown -r now 立刻重启计算机
halt 立刻关机
reboot 立刻重启计算机
sync 把内存的数据同步到磁盘
用户和用户组
注销用户:logout
添加用户:useradd 【选项】 用户名 或 useradd -d 目录 用户名 或 useradd -g 用户组 用户名
设置密码:passwd 用户名
删除用户保留家目录:userdel 用户名
删除用户删除家目录:userdel -r 用户名
查询用户信息:id 用户名
高权限用户到低权限用户不用输密码,反之需要
当需要返回原来用户时,用exit
用户组:类似于角色
增加组:groupadd 组名
删除组:groupdel 组名
修改用户组:usermod -g 用户组 用户名
运行级别
0:关机
1:单用户【可以用来找回丢失密码】
2:多用户状态没有网络服务
3:多用户状态有网络服务
4:系统未使用,保留给用户
5:图形界面
6:系统重启
常用运行级别是3和5
修改默认运行级别文件:/etc/inittab/
命令:init[0123456]
如何找回密码:切换到单用户模式(不用输入密码),然后修改root用户密码
文件操作指令
帮助命令:man 命令,help 命令
创建目录:mkdir 目录结构
创建多级目录:mkdir -p 目录结构
删除空目录:rmdir
删除非空目录:rm -rf
创建空文件:touch
拷贝文件:cp 源 目标
拷贝文件夹(递归拷贝):cp -r 源 目标
强制拷贝(覆盖):\cp
删除整个文件夹:rm -r
强制删除不提示:rm -rf
文件重命名:在文件当前目录 mv 文件名 新文件名
移动文件:mv 文件路径 新路径
浏览文件(只能看,不能改):cat 文件名 ; 显示行号 cat -n ;分页 cat -n 文件名 | more (按空格下翻)
more指令:浏览文本,空格:向下翻一页;回车:向下一行;q:立刻离开;Ctrl+F向下滚动一屏;Ctrl+B:向上滚动一屏;=:输出当前行号;:f:输出文件名和当前行号
less指令:也是分页浏览文件指令,但是不会直接加载整个文件
>指令和>>指令:覆盖和追加
当前日历:cal 2020年日历:cal 2020
输出文本到控制台:echo
head指令:显示文件头,默认显示前10行。head -n 5 显示前5行
tail指令:tail 文件 默认显示后10行;tail -n 5 显示后5行;tail -f 实时追踪改文档更新
软连接(类似快捷方式):ln -s 目录 连接名
删除软连接:rm -rf
history:显示执行命令行历史;history 5 显示倒数5行; !行号 执行第几行命令
date指令:
date:显示时间
date +%Y显示年份
date "+%Y-%m-%d %H:%M:%S"
设置系统日期:date -s "日期"
find指令:find 【范围】 【选项】
find /home -name hello.txt
find /home -user root
find /home -size +20M 或-20M 或 20M(大于、小于、等于)
locate指令:快速定位文件
updatedb
locate hello.txt
grep命令和管道符 |
grep命令和管道符 |
grep:过滤查找 -n显示行号 -i忽略大小写
管道符:将前一个命令得处理结果交给后面的指令处理
cat hello.txt | grep -ni yes
* : 表示当前目录所有文件,也可以是某个文件名
-r 是递归查找
-n 是显示行号
-R 查找所有文件包含子目录
-i 忽略大小写
下面是一些有意思的命令行参数:
grep -i pattern files :不区分大小写地搜索。默认情况区分大小写,
grep -l pattern files :只列出匹配的文件名,
grep -L pattern files :列出不匹配的文件名,
grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),
grep -C number pattern files :匹配的上下文分别显示[number]行,
grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行,
grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。
这里还有些用于搜索的特殊符号:
\< 和 \> 分别标注单词的开始与结尾。
例如:
grep man * 会匹配 ‘Batman’、‘manic’、‘man’等,
grep '\<man' * 匹配‘manic’和‘man’,但不是‘Batman’,
grep '\<man\>' 只匹配‘man’,而不是‘Batman’或‘manic’等其他的字符串。
'^':指匹配的字符串在行首,
'$':指匹配的字符串在行尾,
2,xargs配合grep查找
find -type f -name '*.php'|xargs grep 'GroupRecord'
压缩和解压
1、gzip/gunzip:只能压缩成.gz文件(压缩完文件之后,源文件不保留)
2、zip/unzip:zip 选项 文件
zip -r :压缩目录
unzip -d 路径 文件:解压到指定路径
tar指令:打包指令
-c:产生tar打包文件
-v:显示详细信息
-f:指定压缩后的文件名
-z:打包同时压缩
-x:解包tar文件
ps:tar -zcvf a.tar.gz 1.txt 2.txt 、tar -zcvf a.tar.gz /home 、tar -zxvf a.tar.gz /opt
组管理和权限管理
文件有:所有者、所在组、其他组
查看所有者:ls -ahl
修改文件所有者:chown 用户名 文件名
修改文件所在组:chgrp 组名 文件名
改变用户所在组:usermod -g 组名 用户名 usermod -d 目录名 用户名 改变用户登录初始目录
文件类型:-:普通文件;d:目录;l:软连接;c:字符设备(键盘、鼠标);b:块文件(硬盘)
chmod 755 文件名:
定时任务:crontab
-e 编辑
-l 查询
-r 删除当前用户定时任务
cron表达式占位符说明:共5位
分钟 小时 天 月 星期
特殊符号:
*:通配符
,:代表不连续的时间
-:范围时间
*/n:代表每隔多久执行一次
重启任务调度:service crond restart
3.分区基础知识
-c:列出明细同时,增加汇总值
查询一个目录下文件的个数
ls -l /home | grep "^-" | wc -l
查询一个目录下文件的个数(包括子文件夹)
ls -lr /home | grep "^-" | wc -l
4.网络配置
/etc/sysconfig/network-scripts/ifcfg-eth0
进程管理
1、 每个执行的程序都叫做一个进程,有一个进程号
2、每个进程都有一个父进程,父进程可以复制多个子进程
3、每个进程都可能以两种方式存在,前台和后台
4、一般系统的服务都是以后台进程的形式存在,一般都常驻在系统中,直到关机才结束
ps指令:
查看父进程id ps -ef
终止进程:kill 【进程号】、killall 【进程名】(可以用通配符)
-9:强制杀死
pstree:数状显示进程信息
-p:显示进程id
-u:显示所属用户
5.服务管理
CentOS7以前关闭防火墙:
进入家目录:cd ~
关闭虚拟机防火墙:
关闭命令: service iptables stop
永久关闭防火墙:chkconfig iptables off
两个命令同时运行,运行完成后查看防火墙关闭状态
service iptables status
1 关闭防火墙-----service iptables stop
2 启动防火墙-----service iptables start
3 重启防火墙-----service iptables restart
4 查看防火墙状态--service iptables status
5 永久关闭防火墙--chkconfig iptables off
6 永久关闭后启用--chkconfig iptables on
查看linux有哪些服务
查看/etc/init.d/
服务运行级别
chkconfig指令:
此命令可以给服务的各个运行级别设置是否自启动
查看服务:chkconfig --list | grep xxx
chkconfig 服务名 --list
chkconfig --level 5 服务名 on/off
6.进程监控
动态监控:top 【选项】
-d:秒数,指定top每几秒更新,默认3秒
-i:不显示任何闲置或者僵死进程
-p:通过指定进程id来监控某个进程的状态
交互操作说明:
P:按CPU使用率排序,默认就是这个
M:按内存使用率排序
N:按PID排序
q:退出top
输入u:然后输入用户名,只查这个用户的进程
输入k:代表要杀死哪个进程id
7.网络服务
netstat
-an:按照一定顺序输出
-p:显示哪个进程在调用
8.RPM和YUM
RPM:一种包的管理标准
查询已经安装的rpm列表:rpm -qa | grep xx
安装
卸载rpm包:rpm -e 包名称
强制删除:rpm -e --nodeps 包名称(不推荐)
安装:rpm ivh 包全路径名称
i:installanzh
v:verbos提示
h:hash进度条
yum
是一个shell前端软件包管理器,能从指定服务器自动下载包,并自动处理依赖关系。
yum list | grep xxx
yum install xxx
开放8080端口:vim /etc/sysconfig/iptables
shell编程
应用程序 > shell > linux内核 > 硬件
1.脚本以#!/bin/bash开头
2.linux shell变量分为:系统变量和用户自定义变量
系统变量:$HOME $PWD $SHELL $USER等;显示当前所有系统变量:set
3.shell变量的定义
定义变量:变量=值
撤销变量:unset=值
声明静态变量:readonly变量,不能unset
4.定义变量的规则
1、变量名称可以由字母、数组、下划线组成。但不能以数字开头
2、等号两侧不能有空格
3、变量名称一般习惯大写
5.将命令的返回值赋给变量
1、A=`ls -la`反引号,运行里面的命令,并把结果返回给变量A
2、A=$(ls -la)等价于反引号
设置环境变量
1.在/etc/profile中定义变量,比如:export TEST=1
2.source /etc/profile 使其生效
多行注释:
:<<!
!
位置参数变量(在脚本中获取命令行的参数)
1.基本语法:
1、$n(n为数字,$0代表命令本身,$1-$9代表第一到九个参数,十以上的参数需要用大括号,如${10})
2、$*(代表命令行所有参数,把所有的参数看成一个整体)
3、$@(也代表命令行所有参数,不过每个参数区别对待)
4、$#(代表所有参数的个数)
预定义变量
$$:当前进程号PID
$!:后台运行的最后一个进程号
$?:最后一次命令执行状态,如果是0则成功,如果非0(自己指定)则失败
运算符
基本语法
1):$((运算式)) 或 $[运算式] RESULT=$(((2+3)*4)) RESULT=$[(2+3)*4]
2):expr m + n (运算符中间要有空格 TEMP=expr `2 + 3`)
3):expr m - n
4):expr \*,/,% 乘,除,取余
条件判断
基本语法:
[ condition ] (条件前后有空格,非空返回true)
#!/bin/bash
#判断文件是否存在
if [ -e /root/a.txt ]
then
echo "存在"
fi
流程控制
1.if判断:
if[ 条件判断式 ];then
程序
fi
或
if[ 条件判断式 ]
then
程序
elif[ 条件判断式 ]
then
程序
fi
2.case控制
case $变量名 in
"值1")
程序1
;;
"值2")
程序2
;;
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
3.for循环
1):
for 变量 in 值1 值2 值3...
do
程序
done
2):
for((初始值;循环控制条件;变量变化))
do
程序
done
4.while循环
while [ 条件判断式 ]
do
程序
done
5.read读取控制台输入
read(选项)(参数)
选项:
-p:指定读取值时的提示符
-t:指定读取时等待时间(秒)
参数:
变量:指定读取值的变量名
6.函数
系统函数:
1、basename
功能:返回完整路径最后/的部分,常用于获取文件名
语法:basename[pathname][suffix],带上suffix,就是去掉对应后缀名
2、dirname
功能:返回完整路径最后/的前面部分,常用于获取文件路径
语法:dirname[pathname]
自定义函数:
基本语法:
[ function ] funname[()]
{
Action;
[return int;]
}
#!/bin/bash
for i in "$*"
do
echo "the num is $i"
done
#################################
for i in "$@"
do
echo "the num is $i"
done
##################################
SUM=0
for((i=1;i<=100;i++))
do
SUM=$[$SUM+$i]
done
echo "the num is $SUM"
##################################
SUM=0
i=0
while [ $i -le $1 ]
do
SUM=$[$SUM+$i]
i=$[$i+1]
done
echo "the num is $SUM"
##################################
read -t 10 -p "请输入一个值NUM="NUM
echo "你输入的NUM=$NUM"
#自定义函数,计算两数之和
function getSum(){
SUM=$[$n1+$n2]
echo "和="$SUM
}
read -p "请输入第一个数n1" n1
read -p "请输入第二个数n2" n2
#调用getSum
getSum $n1 $n2
综合案例
#!/bin/bash
#如果文件夹路径不存在就创建
[ ! -d "文件夹路径"] && mdkir -p "文件夹路径"
#删除10天前的备份文件
find 路径 -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;