1.常见目录介绍
/ 根目录
/root root用户的家目录(家目录就是用户登陆之后默认进入的目录)
/home/username 普通用户的家目录
/etc 配置文件目录
/bin 命令目录
/sbin 管理命令目录
/usr/bin/usr/sbin 系统预装的其他命令
可以使用ls /bin(目录)进入目录并显示目录
万能的帮助命令
man : man ls 列出ls使用方式
内部命令使用:help cd 查看帮助,cd 是内部命令,不能使用 --help获得详情,可以使用type cd 查看命令类型:
外部命令使用:ls --help查看帮助
info ls:获取详细的命令介绍
Linux文件管理
一切皆文件,命令区分大小写
文件查看
pwd:查看当前目录路径
ls:
ls 目录名:查看目录 光标之前如果是“#”表示该用户不受限
ls -l :长格式显示文件信息 -表示文件, d表示文件夹
ls -a :查看隐藏文件
ls -l -r :默认按照文件名逆向显示
ls -l -t :使用时间排序
ls -lrt :文件按照文件名排序,文件名相同按照时间排序
ls -R: 递归显示 显示当前文件夹下的所有文件和文件夹,以及所有子文件
ls . :查看当前目录列表
ls -lh:h表示文件大小以M的形式显示
cd:
内部命令,更改当前的操作目录。
cd - :回到之前操作目录,也就是执行最近一次cd之前的目录
进入目录的两种方式:
(1)绝对路径:cd /etc/ 以/开头的路径就是绝对路径
(2)相对路径:cd ./sysconfig 以“.”开头的路径就是相对路径
cd ../(..) :返回上一级目录可以使用../也可以使用缩写..
mkdir
mkdir /a:在根目录中创建一个a目录
mkdir ./a :在当前目录创建一个a目录
mkdir a b c
mkdir -p a/b/c:创建多级目录
rmdir /a: 只能删除空目录
rm -r : 删除多个目录,包括非空目录,每次删除目录都需要确认
rm -rf :删除多层目录,包括非空目录,直接删除,无需确认(危险需要反复检查)
危险操作:rm -rf / a ,由于/ 和a 之间有空格,会将/目录(根目录)下所有文件删除
cp
man cp
cp 文件 文件夹:将文件复制到文件夹中
cp 文件 文件夹/文件名 :将文件复制到文件夹中,并重命名
cp -r 文件夹 文件夹:复制文件夹到文件夹
cp -pa:保留源文件格式(创建者(-a),创建时间(-p)等 可通过ls -l查看详细信息)
cp file* / :将当前目录中所有以file开头(可匹配多个字符)的文件移动到 根目录中
cp file? / :将当前目录中所有以file开头(只能匹配一个字符)的文件移动到 根目录中
touch
创建文件
mv
移动操作,如果希望移动之后重命名,可以加上目标名称
mv /tmp/filea /fileb
mv * /tmp :使用通配符,将当前目录下的所有文件移动到/tmp(如果提示文件夹冲突可以使用-p参数mv -p * /tmp)
su
用户权限命令行查看:~表示当前用户 $表示普通用户 #表示管理员用户
su :切换到root用户
su - apple :切换到apple用户
exit:在普通用户输入exit返回到root(管理员)用户
文本查看命令
cat
文本内容显示到终端
head
从文件开头开头开始查看
head -5 file :查看file前五行
tail
从文件最后开始查看
tail -f 文件内容更新之后显示同步更新内容
tail -3 file 查看结尾三行
wc
统计文件内容信息
wc -l :查看文件有多少行
more
分行显示,一部分一部分显示
less
打包和压缩
tar
将一个目录打包成一个文件
tar cf /tmp/etc-backup.tar /etc : 将/etc文件打包成etc-backup.tar放到/tmp中
tar czf /tmp/etc-backup.tar /etc:将文件打包并压缩
tar czf /tmp/etc-backup.tar.gz /etc:将文件打包并压缩(gzip方式)
tar cjf /tmp/etc-backup.tar.bz2 /etc:将文件打包并压缩(bzip2方式)
通常情况下不同压缩方式压缩的文件要在最后加上响应的扩展名告诉其他人,比如gzip压缩方式加上.gz,bzip2方式压缩的文件,加上扩展名.bz2
gzip/bzip2
配合tar打包压缩
如果想要提高压缩比例:使用bzip2
如果想要压缩速度最快:使用gzip
解压缩
tar xf /tmp/etc-backup.tar -C /root:解压文件并使用大写C指定解压缩目录
tar zxf /tmp/etc-backup.tar.gz :解压gzip方式压缩的文件
tar jxf /tmp/etc-backup.tar.bz2 :解压bzip2方式压缩的文件
多模式文本编辑器
多模式产生的原因
四种模式
(1)正常模式(normal-model)HJKL控制光标移动 大写O小写o上方、下方新添加一行
(2)插入模式(insert-model)
(3)命令模式(commond-model)
(4)可视模式(visual-model)
用户权限管理常用命令
useradd
新建用户(root权限)
useradd calxinlei
创建完成之后如何验证用户是否存在:
(1)可以用id命令验证是否存在 id caoxinlei
(2)用户创建完成之后所有的用户信息都存储在/etc/passwd文件中,使用tail -10 /etc/passwd出现caoxinlei表示创建成功
userdel
删除用户
userdel -r caoxinlei :删除的时候需要加上-r不让不能彻底删除用户信息
passwd
修改用户密码
passwd caoxinlei 修改指定用户的密码
passwd 修改当前用户的密码
usermod
修改用户属性
chage
修改用户属性
组管理命令
groupadd
新建用户组
groupdel
删除用户组
用户切换
su
su caoxinlei:切换用户(不完全切换)
su - caoxinlei :切换用户(完全切换,包括操作环境的切换)
sudo 以其他用户身份执行命令
visudo 设置需要使用sudo的用户(组)
vim /etc/passwd 查看linux系统用户信息,user:x:1001:1001::/home/user1:/bin/bash
user:表示当前用户
x:表示是否需要输入密码
1001:第一个表示uid(用户id),第二个表示gid(用户组id)
/home/user1:表示家目录
/bin/bash:表示登陆之后使用的命令解析器(shell)
control r命令行搜索,找到命令之后enter键入
chmod
修改文件权限
chmod 444 user1 :表示属主,属组,其他权限为4,(4,2,1)最大权限为7
chown
修改文件属组,属主权限
网络管理
根据自己的需要设置linux属性
网络状态查看
有两套工具包
net-tools
ifconfig:
(1)eth0:第一块网卡(网络接口),一般将其他的第一块网卡名称都命名为eth0(比如enbo5->eth0)
(2)inet:表示当前网卡的IP地址
(3)bal>里面的ether表示当前设备的MAC地址
(4)lo网卡:叫做本地环回网卡固定为127.0.0.1(就是平时测试地址)
route:
查看网关(gateway)route -n
netstat
iproute2(老版本没有这个命令)
ip
ss
网络配置
ifconfig <接口> IP地址 -》ifconfig eth0 10.211.55.4 修改子网掩码加上参数 netmask即可
修改完成之后使用ifconfig eth0 up应用配置,
网卡开启关闭
ifup <接口> 启动网卡
ifdown<接口>关闭网卡
路由命令
添加默认网关:route add default gw 10.211.55.1
删除默认网关:route del default gw 10.211.55.1
添加非默认网关:route add -host 10.0.0.1 gw 10.211.55.1指定访问目标地址10.0.0.1的网关使用10.211.55.1访,问出去,也可以通过参数-net设置某个网段是由哪个网关访问出去
路由故障排除命令
(1)ping:检测网络是否连通,如果能ping通,使用(2)(3)测试网络质量,使用ping命令可以查看网络丢包率和网络延时。
(2)traceroute:监测网络状态
traceroute -w 1 www.baidu.com:超时等待1秒
(3)mtr:检测网路状态(my traceroute也就是traceroute的详细信息)
(4)nslookup:可以查看一些域名访问信息,如果只给了域名没有给IP地址,可以使用nslookup解析域名,
nslookup www.baidu.com可以看到server:表示使用那个dns域名解析器进行的解析,address:表示解析之后的IP地址。
(5)telnet:telnet用来检查,主机能够连接但是端口不能访问的问题(需要安装 yum install)
(6)tcpdump:如果端口通了,但是仍然有问题,可以使用tcpdump检查,网络抓包工具,tcpdump -i any -n host 10.0.0.1 and port 80 -w /tmp/filename抓取所有数据包,需要管理员权限启动,-n表示将域名解析为IP显示,host表示抓取IP为10.0.0.1和端口为80的数据包,也可以使用-w将捕获到的信息保存
(7)netstat:如果上面检查都没有问题,但是仍然不能访问需要使用netstat和ss检查是否对外提供了网络服务
netstat -n显示IP不显示域名 -t表示只显示tcp链接,-p显示进程端口号信息,-l显示链接信息
(8)ss:和netstat使用方式相同
网络服务管理
常用网络配置文件
配置完成之后重启系统
reboot
软件安装
centos:使用rpm工具安装(rpm 是redhat package management)
ubuntu:使用apt工具安装
升级内核
(1)使用rpm格式内核:
查看内核版本: uname -r ,如果内核版本过低要安装内核,或升级内核的版本
升级内核版本:yum install kernel-3.10.0
升级已经安装的其他软件包和补丁:yum update
使用ps 和top命令查看进程
ps:
查看当前终端(shell)下边那些进程在执行,使用ps
查看系统中所有进程:ps -e
pstree:可以查看进程的父子关系,子进程执行之前会继承父进程
top:
动态查看进程信息:
列表上边一段文本分析:
(1)up 32 min:表示系统启动到现在的时间
(2)2user:当前系统有两个用户登录
(3)load average 0.01 ,0.04, 0.05:平均负载,表示网络的繁忙程度,三个值是对不同时间段的采样平均值,越来越大表示网络越来越繁忙,如果为1表示满负载运行
(4)%cpu:表示cpu使用的百分比
进程控制
调整优先级
nice范围从-20到19,值越小优先级越高,抢占资源越多
renice:重新设置优先级
进程的作业控制
jobs
&符号
内存使用率查看命令
free
-m:m大小
-g:G大小
top
磁盘使用率查看
fdisk
df
du
du与ls的区别
shell编程
什么是shell
shell是命令解释器,用于解释用户对操作系统的操作
shell有很多:cat /etc/shells查看
centos 7:默认使用的shell是bash
linux启动过程
BIOS-MBR-BOOTLOADER(grub)-kernel-systemd(一号进程)-系统初始化-shell
shell脚本的格式
(1)linux起源于unix,unix的哲学:一条命令只做一件事
(2)为了组合命令和多次执行,使用脚本文件来保存需要执行的命令
(3)赋予该文件执行权限(chmod u+rx filename)
命令行输入:cd /var ; ls:使用”;“分隔两条命令,可以连续执行两个命令
如果有很多人用到这个命令,可以放到文件中,将文件赋予r+x可执行权限即可
文件第一行要使用#!/bin/bash如果是shell是bash则使用bash进行解析,如果shell不是bash解析则将#识别为注释,这样写比较优雅
文件第二行要写#开头的注释
执行脚本命令的方式
(1)bash filename.sh 这中方式运行脚本文件不需要为脚本文件赋予执行权限就可以运行(执行脚本命令开启新的进程执行,如果有cd命令执行完成之后回到当前目录)
(2)./filename.sh 文件必须有可以行权限(执行脚本命令开启新的进程执行,如果有cd命令执行完成之后回到当前目录)
(3)source ./filename.sh (如果有cd命令执行完成之后进入到CD目录)
(4).filename.sh(如果有cd命令执行完成之后进入到cd目录)
管道与管道符
(1)管道和信号一样,也是进程通信的方式之一,将命令连接到一起,将输入和输出连接到一起,分号是将两条命令分割开
(2)匿名管道(管道符)是shell编程经常用到的通信工具
(3)管道符是“|”,将前一个命令执行的结果传递给后面的命令。
ps | cat
echo 123 | ps
重定向符号
输入输出重定向就是使用文件来代替终端来进行输入和输出
(1)一个进程默认会打开标准输入、标准输出、错误输出三个文件描述符
(2)输入重定向符号“<”
(3)read var < /path/to/a/file
输出重定向符号 “>” ">>" "2>" "&>"
echo 123 > /path/to/a/file
输入和输出重定向组合使用
注意输出重定向">"会先清空文件,然后将输出到终端的内容重定向到文件中。如果想要将内容追加到文件中,使用追加符">>",
(1)cat > /path/to/a/file <<EOF
(2)i am &$USER
(3)EOF
demo
wc -l 会等待终端输入,之后显示输入行数
wc -l < /etc/passwd :使用文件来代替终端输入
错误重定向
nocmd 2> c.txt :nocmd命令找不到会报错,使用错误重定向,会将错误信息输出到文件中,而不是终端。
全部重定向
nocmd &> c.txt :不管命令是否成功执行,内容都会输出到文件中。
变量
变量赋值
注意等号左右不能出现空格
变量命名规则
(1)字母、数字、下划线
(2)不以数字开头
为变量的赋值过程,称为变量替换
变量名 = 变量值
a=123
使用let为变量赋值
let a=10+20
将命令赋值给变量
l = ls
将命令结果赋值给变量,使用$()或者``(反引号)
let c=$(ls -l /etc)
变量值有空格等等特殊字符可以包含在" " 或''中
变量的 引用
${变量名}称作对变量的引用
echo ${变量名}查看变量的值
${变量名} 在部分情况下可以省略为 $变量名
变量的作用范围
变量的默认作用范围
变量的默认作用范围是当前进程,如果使用./a.sh执行一个脚本的话,会开启一个新的进程执行a.sh,这样在当前进程(父进程)中就无法获取到脚本中(子进程)的变量值,父进程要想取到子进程中的变量值的话,要使用source 执行脚本,
变量的导出
export
如果子进程要获取父进程的变量,使用export导出父进程的变量
变量的删除
unset
变量不使用的时候要使用unset将变量删除
系统环境变量
(1)set和env命令
(2)$? $$ $0:
$$:显示进程ID
$0:显示进程名称
(3)$PATH
(4)$PS1
位置变量
使用位置变量可以为脚本带更多的变量
$1 $2 ......$n(注意第10个参数要使用${10}不能佘略大括号)相当于占位符,可以再执行脚本的时候 在后面为占位符赋值
环境变量配置文件
配置文件
所有放在/etc/下的配置文件都是全局的,所有用户都使用的配置文件
"~"表示家目录下的配置文件
(1)/etc/profile
(2)/etc/profile.d/
(3)~/.bash_profile
(4)~/.bashrc
(5)/etc/bashrc
数组
定义数组
IPTS=(10.0.0.1 10.0.0.2 10.0.0.3) ,数组中的元素用空格隔开
显示数组的所有元素
echo ${IPTS[@]}
显示数组元素的个数
echo ${#IPT[@]}
显示数组的第一个元素
echo ${IPTS[0]}
运算符
赋值运算符
赋值使用:=
取消变量赋值:unset
双圆括号是let命令的简化((a=10))((a++)) echo $((10+20))
expr 4 + 5 执行运算,只能是整数
算术运算符
数字常量
双圆括号
引号
' :完全引用
" : 不完全引用
`:执行命令
单括号
():会创建一个子shell,括号之外的父shell不能引用子shell的变量
测试与判断
注意判断结果0为真,1为假
test比较(符号表示为[])
退出与退出状态
exit 10 返回10给shell,返回值非0位,不正常退出
$?判断当前shell前一个进程是否正常退出
程序的判断通常使用echo $?返回上一条执行结果
使用if-then语句
if then 语句的基本语句
if [ 测试条件成立 ] 或 命令返回值是否为0
then 执行响应命令
fi 结束
使用if-then-else语句
if [ 测试条件成立 ]
then 执行相应命令
else 测试条件不成立,执行相应命令
fi 结束
嵌套if的使用
if [测试条件成立]
then
if [测试条件成立]
then
fi 结束
fi 结束
case和select语句的分支结构
case "$变量" in
"情况1") #一个括号用来结束条件判断
命令...
;; #一个分号用来结束命令, 两个分号用来结束命令并且结束一个case
"情况2")
命令...;;
* ) #*表示default条件
命令...;;
esac
循环
(1)使用for循环遍历命令的执行结果
for 循环的语法
for 参数 in 列表
do 执行的命令
done #封闭一个循环
使用反引号或$()方式执行命令,命令的结果当做列表进行处理
(2)使用for循环遍历变量和文件的内容
(3)C语言风格的for命令
for (( i=1; i<=10; i++))
do
echo $i
dones
(4)while循环
while test 测试是否成立
do
命令
done
(5)死循环
while : #使用”:“构建死训环
do
done
(6)until循环
只是把while换成until即可
until循环与while循环相反,循环测试为假时,执行循环,为真时结束训环
(7)break和continue语句
训环使用break和continue退出
(8)使用循环对命令行参数的处理
如何输出指定顺序的数字
{1..9}输出从1到9的数字
使用循环处理位置参数
命令行参数可以使用$1$2...${10}...$n进行读取
$0代表脚本名称
$*和$@代表所有位置参数
$#代表位置参数的数量
shift参数左移功能
每调用一次shift会将参数列表中的第一个参数去掉,参数列表数量减一,整体左移一个位置
while [$# -ge 1 ]
do
echo $#
echo "do something"
shift
done
自定义函数
func fname(){
命令 #一般将大量重复的数据封装成一个函数来调用
}
函数的执行
fname
函数作用范围的变量
local变量名
函数的参数
$1 $2 $3...$n
函数的参数也是通过参数占位符来进行传递
函数返回值
return
脚本控制
脚本优先级设置
可以使用nice和renice调整脚本优先级,限制对CPU的占用
捕获信号
使用trap捕获信号
trap "echo sig is 15" 15
echo $$
FORK炸弹
通过死循环不停地创建子进程,称作fork炸弹
Kill信号
执行kill 的时候直接使用是不能将进程杀掉,需要加上信号,-9是不可阻塞的(不能通过trap捕获),执行kill -9 之后一定会是进程结束,如果是其他的比如15,如果该进程是一个脚本,并且脚本中有trap捕获15信号,捕获之后不做结束操作,那么执行kill -15之后就不会杀掉进程。
计划任务
命令行执行 date显示当前系统时间,
使用atq查看任务计划是否成功执行
一次性的计划任务at
在命令行,执行
at 18:31
echo hello > /tmp/hello.txt
按ctrl+d提交任务
周期性的计划任务
配置方式:crontab -e
查看现有的计划任务:crontab -l
配置格式:分钟 小时 日期 月份 星期 执行命令
* * * * * 最小单位分钟,执行计划是每分钟之心过一次
* * * * * 1-5 表示星期一到星期五每星期运行一次
注意命令的路径问题
计划任务加锁flock
正则表达式和文本内容搜索
元字符
(1). 匹配除换行符外的任意单个字符
(2)*匹配任意一个跟在它前面的字符
(3)[]匹配方括号中的字符类中的任意一个
(4)^匹配开头
(5)$匹配结尾
(6)\转义后面的特殊字符
扩展元字符
(1)+匹配前面的正则表达式至少出现一次
(2)?匹配前面的正则表达式出现零次或一次
(3)| 匹配它前面或后面的正则表达式
文件的查找命令find
在目录中找到指定的文件
find 文件名 查看文件是否存在
find -type f 只看文件类型的文件
文件内容的过滤(查找)grep
sed 和awk
sed和awk是行编辑器,区别于vim的文本编辑器,vim是交互式方式,sed和awk是非交互式