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 -a
    • man 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 显示当前日期
    • date
    • date "+%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.txt
    • tar -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 文件名

  • 修改权限-chmod

    • chmod u=rwx,g=rw
    • rx,o=x 1.txt 所有者:读写执行,所在组:读写,其他组:执行
      • chmod 751 1.txt 用数字表示
    • chmod o+w 1.txt 其他组:增加写的权限
    • chmod a-x 1.txt 全部删除写的权限
  • 修改文件所有者-chown

    • chown tom /home/abc.txt
    • chown -R tom /home 递归
  • 修改文件/目录所在组

    • chgrp newgroup /home/abc.txt
    • chgrp -R newgroup /home 递归

软件安装

yum

Shell前端软件包管理器

  • yum list|grep xx 在yum服务器找对应的安装包
  • yum install xx 下载并安装
  • 配置环境变量
    • vim /etc/profile
    • export PATH=xxxxxxx:$PATH
    • source /etc/profile 刷新

rpm

只适用于centos

RedHat Package Manager,类似于windows的.exe

  • rpm -qa | grep xx 当前系统是否安装了xx
  • rpm -e xx 卸载软件 export
  • rpm -e --nodps 强制卸载
  • rpm -ivh xx 安装xx RPM包必须下载到本地

开启端口

  • firewall -cmd --permanent -add-port=8080/tcp
  • firewall -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\tomcat
      • sourece /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
        
      1. = 字符串比较

      2. 整数比较

        • -lt 小于
        • -le 小于等
        • -eq 等于
        • -gt 大于
        • -ge 大于等于
        • -ne 不等于
      3. 文件权限比较

        • -r
        • -w
        • -x 执行
      4. 文件类型判断

        • -f 文件存在并是一个常规未见
        • -e 文件存在
        • -d 文件存在并是一个目录
    • 流程控制

      1. if判断

        • 语法:

        • if [ 条件判断式 ]
          then
          代码
          elif [ 条件判断式 ]
          then
          代码
          else
          then
          代码
          fi
          
          
        • ​ case语句

        • 语法:

        •  case $1 in
           "1")
           echo "周一"
           ;;
           "2")
           echo "周二"
           ;;
           *)
           echo "other..."
           esac
          
      2. 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"
          
      3. 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.txt
        • basename /home/aaa/test.txt .txt 返回test
        • dirname /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
        
posted @ 2022-02-24 18:04  西西弗斯8  阅读(33)  评论(0)    收藏  举报