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 用户组 用户名
img

运行级别

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 目录名 用户名 改变用户登录初始目录

img

img

文件类型:-:普通文件;d:目录;l:软连接;c:字符设备(键盘、鼠标);b:块文件(硬盘)

chmod 755 文件名:

img

定时任务:crontab

-e 编辑
-l 查询
-r 删除当前用户定时任务

cron表达式占位符说明:共5位
分钟 小时 天 月 星期

特殊符号:
*:通配符
,:代表不连续的时间
-:范围时间
*/n:代表每隔多久执行一次

重启任务调度:service crond restart



3.分区基础知识

img

img

img

img

img

-c:列出明细同时,增加汇总值
查询一个目录下文件的个数
ls -l /home | grep "^-" | wc -l

查询一个目录下文件的个数(包括子文件夹)
ls -lr /home | grep "^-" | wc -l

4.网络配置

/etc/sysconfig/network-scripts/ifcfg-eth0
img
img

进程管理

1、 每个执行的程序都叫做一个进程,有一个进程号
2、每个进程都有一个父进程,父进程可以复制多个子进程
3、每个进程都可能以两种方式存在,前台和后台
4、一般系统的服务都是以后台进程的形式存在,一般都常驻在系统中,直到关机才结束

ps指令:

查看父进程id ps -ef

终止进程:kill 【进程号】、killall 【进程名】(可以用通配符)
-9:强制杀死
pstree:数状显示进程信息
-p:显示进程id
-u:显示所属用户

img
img

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 {} \;

posted @ 2021-10-14 17:34  微醺的小布  阅读(52)  评论(0编辑  收藏  举报