Linux学习笔记
Linux学习笔记
文件目录
- 一切皆为文件
graph TD
/--> bin
/--> sbin
/--> home
/--> root
/--> boot
/--> dev
/--> etc
/--> usr
/--> var
/--> ...
- bin
- 经常使用的指令
- sbin
- 管理员常用指令
- home
- 存放普通用户的主目录
- root
- 管理员的主目录
- lib
- 最基本的动态连接共享库
- etc
- 配置文件
- /etc/profile 配置环境变量
- usr
- 安装的应用程序存放目录
- user/local
- 软件安装后存放的目录
- boot
- linux启动的核心文件
- tmp
- 临时文件
- dev
- 硬件映射成的文件
- media
- 插入的设备(U盘、光驱)映射成的文件
- mnt
- 挂载
- opt
- 安装文件存放的目录
- var
- 存放不断扩充的东西,log
Vi&Vim
内置vi文本编辑器
vim为vi增强版
搜索vi vim键位图
- 正常模式
- 用vim打开后即是。可以使用光标
- 可以使用删除字符或删除整行,也可是使用复制粘贴
- 命令:
yy拷贝当前行,5yy拷贝当前行向下5行p粘贴dd删除当前行,5dd删除当前行向下5行u撤销G定位到末行gg定位到首行- 输入
20再输入shift+g定位到20行
- 插入模式
- 按i,进去改模式进行编辑
- 命令行模式
- 输入ESC,再输入[:]进入命令模式
- 该模式下,可提供相关指令,如:读取、存盘、替换、离开、显示行号
- 命令:
wq保存退出q退出q!保存并强制退出- /关键字 回车 查找,输入n为下一个,换查找内容 直接再输入/
set nu设置行号set no nu取消
用户管理
useradd用户名 添加用户-d指定目录-g指定权限组
userdel用户名 删除用户,保留home目录-r删除用户并删除home目录
passwd用户名 修改密码su - root切换到root用户logout注销pwd显示当前所在目录id root查看root信息who am i查看当前用户 第一次登陆到系统的用户
用户组
- groupadd 组名 添加用户组
- groupdel
- usermod -g 用户组 用户名 修改用户所在的用户组
- /etc/passwd 文件
- 用户的配置文件,记录用户的各种信息
- /etc/shadow 文件
- 口令的配置文件
- /etc/group 文件
- 组的信息
帮助命令
- man + 命令
- 如
man ls man ls -aman ls -al
- 如
- help + 命令
文件目录指令
cd ~回到自己的家目录cd ..回到上级目录./当前目录下找- mkdir 创建目录
mkdir -p创建多级目录
- rmdir 删除目录
rm -rf递归强制删除
- touch 创建一个空文件
- 和
vim一样
- 和
- cp 拷贝
cp source dest-r递归\cp强制覆盖
- rm 删除文件
- mv 移动文件 或 重命名
mv oldname newname重命名- ````mv /home/tom/1.txt /home/jerry/``` 移动
- cat 查看文件(只读)
-n显示行号| more类似文本分页显示
- echo 控制台输出
echo $PATH输出path环境变量echo "hello world~"
- > 重定向 覆盖
echo "hello" > /home/tom/1.txt将hello覆盖到1.txt文件
- >> 重定向 追加
- ln 软连接 类似快捷方式
ln -s[源文件或目录] [软连接名]
- date 显示当前日期
datedate "+%Y"date "+%m"date "+%d"date "+%Y-%m-%d"date -s设置系统时间
- cal 日历
- find [搜索范围] [选项]
-name按照文件名查询-user按用户名-size按大小-h人性化展示|more
- locate 定位文件所在目录
- 速度更快,得先建立自己的db
- 先执行
updatedb
- grep 和管道符号|
grep过滤查找cat /home/tom/1.txt | grep "hello"grep -n "hello" /home/tom/1.txt
- zip/unzip 压缩/解压缩
-r递归-d<目录>zip -r myhome.zip /home/unzip /opt/temp myhome.zip
- tar 压缩/解压[.tar.gz]
-c产生.tar打包文件-v显示详细信息-f指定压缩后的文件夹-z打包同时压缩-x解压.tar文件-C解压后存放目录tar -zcvf pc.tar.gz /home/pg.txt /home/cat.txttar -zxvf pc.tar.gz -C /opt/tmp2
Linux 组
- 所有者
ls -ahl查看所有者chown 用户名 文件名修改所有者
- 所在组
chgrp 组名 文件名
- 更改用户所在组
usermod -g 新组名 用户名usermod -d 目录名 用户名改变该用户登陆的初始目录cat /etc/group查看所有组cat/etc/group | grep root用grep过滤
权限的基本介绍
-
ls -l中显示的内容如下: -
-rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc
rwx权限详解
- rwx作用到文件
- r 可读
- w 可写
- x 可执行
- rwx作用到目录
- r 可读:ls查看目录内容
- w 可写:可以修改,创建、删除、重命名目录
- x 可执行:可以进入该目录
- 可以用数字表示:r=4,w=2,x=1 因此rwx=4+2+1=7
-
0-9位说明
-
0位确定文件类型(d,-,l,c,b)
-
-是普通文件
-
l是连接
-
d是目录
-
c是字符设备 (文件,鼠标,键盘)
-
b是块设备,比如键盘
-
-
1-3位表示所有者对文件的权限 --User
- rwx:所有者有读、写、执行权限
-
4-6位所在组对文件的权限 -- Group
- rw-:所在组拥有读、写,没有执行权限
-
7-9位表示其他组对文件的权限--Other
- r--:其他组只有只读权限
-
1表示文件数,如果是目录,表示目录加目录下文件数
-
root 所有者
-
root 表示所在组
-
1213 表示文件大小(字节),文件夹显示4096
-
Feb 2 09:39 最后修改时间
-
abc 文件名
- rwx作用到文件
-
修改权限-chmod
chmod u=rwx,g=rwrx,o=x 1.txt所有者:读写执行,所在组:读写,其他组:执行chmod 751 1.txt用数字表示
chmod o+w 1.txt其他组:增加写的权限chmod a-x 1.txt全部删除写的权限
-
修改文件所有者-chown
chown tom /home/abc.txtchown -R tom /home递归
-
修改文件/目录所在组
chgrp newgroup /home/abc.txtchgrp -R newgroup /home递归
软件安装
yum
Shell前端软件包管理器
yum list|grep xx在yum服务器找对应的安装包yum install xx下载并安装- 配置环境变量
vim /etc/profileexport PATH=xxxxxxx:$PATHsource /etc/profile刷新
rpm
只适用于centos
RedHat Package Manager,类似于windows的.exe
rpm -qa | grep xx当前系统是否安装了xxrpm -e xx卸载软件 exportrpm -e --nodps强制卸载rpm -ivh xx安装xx RPM包必须下载到本地
开启端口
firewall -cmd --permanent -add-port=8080/tcpfirewall -cmd --reload
Shell编程
命令行解释器,用于用户向Linux内核发送请求以便运行程序的界面系统级程序
- 脚本格式要求
- 以
#!/bin/bash开头 以bash作为解释器 - 脚本需要有可执行权限
- 方式一:给.sh赋予x权限
- 方式二:sh+脚本
- 以
- Shell变量
-
系统变量
-
自定义变量
- 定义变量:
NAME=tom- 使用:
$NAME
- 使用:
- 撤销变量:
unset NAME - 静态变量:
readonly NAME=tom,不可unset - 全局变量:
- 定义变量:
-
命名规则
- 不能有空格
- 不能数字开头
- 习惯用大写
- A=`date` 等价于
A=$(date),把date指令的结果给A A=date单纯字符串
-
设置环境变量
vim /etc/profile编辑环境变量配置文件export TOMCAT_HOME=\opt\tomcatsourece /etc/profile刷新
-
多行注释
:<<! 这里是注释~ ! -
位置参数变量
./myshell.sh 100 200$1= 100,$2= 200$#=2 参数个数
-
预定义变量
$$当前进程号 PID$!后台运行的最后一个进程号 PID$?最后一个指令的返回状态。如果是0,证明被正确执行了
-
运算符
- 语法:
$[运算式] - 例子:
RES=$[(2+3)*4]
- 语法:
-
条件判断
-
语法:
[ ]注意空格 -
例子:
# OK是否等于OK if [ "OK" = "OK" ] then echo "equal" fi #23是否大于22 if [ 23 -ge 22 ] then echo "大于" fi #/root/shcode/aaa.txt 目录中的文件是否存在 if [ -f /root/shchode/aaa.txt ] then echo "存在" fi
-
=字符串比较 -
整数比较
-lt小于-le小于等-eq等于-gt大于-ge大于等于-ne不等于
-
文件权限比较
-r读-w写-x执行
-
文件类型判断
-f文件存在并是一个常规未见-e文件存在-d文件存在并是一个目录
-
-
流程控制
-
if判断
-
语法:
-
if [ 条件判断式 ] then 代码 elif [ 条件判断式 ] then 代码 else then 代码 fi -
case语句
-
语法:
-
case $1 in "1") echo "周一" ;; "2") echo "周二" ;; *) echo "other..." esac
-
-
for 循环
-
语法:
-
# $*是把参数当成一个对象对待 for i in "$*" do echo "num is $i" done #============================= # $@是把参数当成一个集合 for j in "$@" do echo "num is $j" done #============================= SUM=0 for (( i=1;i <= 100;i++ )) do #$[ ]指运算式 SUM=$[$SUM+$i] done echo "总和SUM=$SUM"
-
-
while循环
-
语法:
-
SUM=0 i=0 while [ $i -le 100]#注意空格 do SUM=[$SUM+$i] i=[$i+1] done echo "执行结果=$SUM"
-
-
-
read读取控制台输入
-
基本语法
read(选项)(参数)-p读取值时的提示符;-t指定读取值时的等待时间(秒),如果指定时间内没有输入,就不等待了
-
参数
- 变量:指定读取值的变量名
-
例子:
-
read -p "请输入一个数NUM1=" NUM1 echo "你输入的NUM1=$NUM1" #=============================== read -t 10 -p "请输入一个数NUM2" NUM2 echo "你输入的NUM2=$NUM2"
-
-
函数
-
系统函数
basename /home/aaa/test.txt返回test.txtbasename /home/aaa/test.txt .txt返回testdirname /home/aaa/text.txt返回/home/aaa
-
自定义函数
-
基本语法
[funciton] funname[()] { Action; [return int;] }调用直接写函数名:
funname [值] -
例子:
function getSum(){ SUM=$[$n1+$n2] echo "和是=$SUM" } read -p "请输入一个数n1=" n1 read -p "请输入一个数n2=" n2 #调用 getSUM $n1 $n2
-
-
-
综合案例
-
定时备份数据库
graph LR crond-->|定时调用|mysql_db_backup.sh-->|备份| 数据库#创建文件到/usr/sbin 因为有管理员执行权限 #vim mysql_db_backup.sh #=================================== #!/bin/bash #备份目录 BACKUP=/data/backup/db #获取当前时间 DATETIME=$(date +%Y-%m-%d_%H%M%S) #数据库信息 HOST=localhost DB_USER=admin DB_PW=Cui6512423. #备份数据库名 DATABASE=project4lei #创建备份目录,不存在就创建 #-d是文件存在并是一个目录 #[condition] && echo "OK" || echo "NG" 类似于条件运算符 #-p创建多级目录 [ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}" #备份数据库 # | 管道符 # > 重定向 # gunzip 解压 mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} -q -R --databases ${DATABASE} | gzip > ${BACKUP}/$DATETIME.sql.gz #将文件处理成tar.gz cd ${BACKUP} tar -zcvf $DATETIME.tar.gz #删除对应的备份目录 rm -rf ${BACKUP}/${DATETIME} find ${BACKUP} -atime +10 "*.tar.gz" | -exec rm -rf{} \; echo "备份数据库${DATABASE}成功" #定时备份 #crontab -e #30 2 * * * /usr/sbin/mysql_db_backup.sh
-
-

浙公网安备 33010602011771号