Linux笔记01 —— Linux初识与Shell汇总(请配合另一篇《Linux笔记02》一起使用)

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
实时计算 Flink 版,5000CU*H 3个月
简介: Linux笔记01 —— Linux初识与Shell汇总(请配合另一篇《Linux笔记02》一起使用)

Linux 笔记

操作系统定义

  • 软硬件管控,提供公共服务,组织人机交互关联的系统软件。
    • 管理计算机硬件资源、文件系统、进程,内存,设备...
    • 提供用户与计算机的交互接口

操作系统结构

外层应用程序建立在Linux操作系统上,并通过Shell与用户进行通信。

分类

  • 常见:Apple, Android, Windows...
  • 操作系统分类:
    • 应用领域
      • 桌面操作系统(多用户,闭源)
      • 服务器操作系统(单用户,开源)
      • 嵌入式操作系统
    • 所支持用户数
      • 多用户操作系统
      • 单用户操作系统
    • 源码开放程度
      • 闭源操作系统
      • 开源操作系统
    • 级别
      • 企业级应用操作系统(部项目,存数据;大规模,高数据,高并发)
      • 个人操作系统

企业级应用操作系统

  • 常见:Windows Server, Unix, Linux(封装Unix)
  • 版本:redhat, debian, ubuntu

授课Linux版本

  • CentOS7(内核是redhat)

虚拟机

  • VMWare16.0

虚拟机配置要求

  • 内存2GB+
  • 固态硬盘20G+
  • 非系统盘安装
  • 网络配置采用网络地址转换NAT方式

Linux远程连接

  • MOBA(SSH+XFTP)
  • SSH协议:Secure Shell, 可以使用SSH来远程连接到安装了Linux虚拟机。
  • XFTP:XFTP是MOBA中的文件传输功能,可以使用XFTP将文件从本地计算机传输到远程服务器,或者从远程服务器下载文件到本地计算机。

定义

  • 将所有硬件、应用、服务进行统一管理(云容器)的软件,并将资源量化,隔离出来开放给用户使用。
  • Cloud = Network + Basic Devices

分类

  • 公有云:供企业自身和用户用
    • 分类:腾讯云、阿里云、华为云、京东云等。
    • 特点:快,但不够安全。
  • 私有云:面向政府和企业内部使用,不对公网开放。
    • 特点:安全。
  • 混合云:
    • 分类:核心敏感数据私有云、官网、论坛公有云
    • 特点:安全、低成本。

云计算 Cloud Computing

  • 定义:云大脑计算处理的过程

云服务 Cloud Service

  • 定义:定制化云计算服务产品(流量+存储+算力)
  • 分类:SaaS | PaaS | IaaS | FaaS | DaaS | BaaS
    • Software as a Service 将软件(工具)视作服务
    • Platform as a Service 将平台(技术)视作服务
    • Infrastucture as a Service 将资源视作服务
    • Function as a Service 将劳动力视作服务
    • Data as a Service 将数据视作服务(数据分析)
    • Backhend as a Service 将宣传视作服务

VPC

定义

  • 公有云上自定义的逻辑隔离网络空间,都有一个隧道号,相互之间逻辑上彻底隔离,没有数量限制。
  • 将我们在私有云上的服务器资源托管在VPC内

VPN

定义

  • 基于公网的加密通信网络

VM网络详解

  • VMWare软件为我们安装的虚拟机创建了一个虚拟网卡,叫ens32,用于虚拟机与Windows的网络进行连接。
    • 这个网卡有三个模式,分别是vmnet0,vmnet1,vmnet8

VMnet 0 桥接模式

  • 虚拟机被视为物理网络上的独立设备,与主机计算机共享同一物理网络。与外部网络处于同一网络子网中
  • 通常分配一个与主机网络相同的IP地址,它可以与物理网络中的其他设备直接通信。

VMnet 1 主机模式

  • 它创建了一个虚拟的、隔离的网络,只有主机计算机和虚拟机可以通信。

VMnet 8 NAT模式

  • 虚拟机共享主机计算机的网络连接,并通过主机计算机来访问外部网络。通常分配一个虚拟化的IP地址,
  • 与外部网络隔离,它们通常不能直接与物理网络中的其他设备通信,而是通过主机计算机进行网络地址转换。
    • 192.168.83.0,子网IP,实现物理机和虚拟机之间的网络互联,但是还不能访问外网。(不会占用公网的IP地址,打破了公网IP地址数量有限的限制。)
    • 192.168.83.1,虚拟网卡的IP地址
    • 192.168.83.2,网关的IP地址

重做虚拟网卡:

  • 编辑——虚拟网络编辑器

    ip addr 查看主机IP地址

  • lo 环回网卡,用于本机的不同进程之间进行通信。

  • ens33 网卡名称

Linux文件系统

  • 软件、硬件、文档、目录都属于文件
  • 常用目录(✔的为常用目录)
    • / Linux系统根目录
    • /bin 系统启动时需要的执行文件(二进制)
    • /dev 设备文件目录
      • /dev/sr0 表示系统中的第一个光驱设备(虚拟机安装时挂载yum镜像源到/dev/sr0下,并且映射一份到/mnt)
    • ✔/etc 操作系统的配置文件目录(防火墙、启动盘)
      • /etc/profile 存放系统级环境变量
      • /etc/profile.d/myenv.sh 存放自定义环境变量

为什么source /etc/profile能够激活自定义环境变量的修改?

for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
  if [ -r "$i" ]; then
    if [ "${-#*i}" != "$-" ]; then
      . "$i"
    else
      . "$i" >/dev/null
    fi
  fi
done

因为执行/etc/profile文件也会对profile.d中.sh的文件进行执行,这也说明了为什么在/etc/profile.d中要新建myenv.sh文件并在其中配置环境变量。

Shell命令概述

Shell命令是解释型命令,用于执行各种操作。它们可以存储在Shell脚本文件中,用于对虚拟机进行通配,包括设置环境变量、优化等操作。以下是关于Shell命令的一些概述:

  • Shell命令是解释型的,可以直接在命令行中执行。
  • Shell命令的作用包括执行各种操作,但大多数命令的结果是只输出不修改文件,除了一些特殊操作如使用sed -i进行文件内容替换、重定向操作以及修改文件权限和目录的操作。
  • Shell命令可以用于将每个大数据组件制作成一个Shell脚本,然后通过一个大脚本自由组合多个Shell脚本来完成复杂的任务。

Linux目录操作命令

以下是一些常用的Linux目录操作命令:

  • pwd: 查看当前工作目录。
  • ls [选项][路径]: 列出目录中的文件和子目录。
    • ls -l: 以长格式显示当前工作目录中的文件和目录。
    • ls -h: 文件大小以M的大小格式显示。
    • ls -a: 仅列出当前工作目录中的所有文件和目录,包括以.(当前目录)和..(上级目录)开头的隐藏文件和目录。
    • ls -la: 以长格式列出当前工作目录中的所有文件和目录,包括隐藏文件和目录。
    • ls -1S: 以单列模式并按照文件大小倒序排序。
    • ll -h -1S: 按文件大小对目录下的文件进行倒序排序,并显示文件的大小(MB)。
  • cd [路径]: 切换到其他目录。

    • cd /opt/software/: 绝对路径。
    • cd henry/: 相对路径(以当前目录作为根目录)。
    • cd ~: 切换到当前用户的主目录。
    • cd -: 切换到上一次使用的工作目录。
    • cd ../: 返回上一级目录。
    • cd ../../dir1/text1: 返回上两级目录后进入dir1/text1目录。
  • mkdir [选项][目录名]: 创建一个文件夹

    • mkdir -p: 表示如果上级目录不存在,也会一同创建上级目录。
    • mkdir -p b/e: 创建目录b/e
    • mkdir a b c d: 创建(多个)同级目录
  • rm [选项][文件|目录名]: 删除文件或目录

    • rm -rf: 删除包括该级目录下的所有目录(递归删除)
      • 假设目录为b/e,则会被全部删除。
  • cp [文件|-r 目录名][目录名]: copy文件或者目录下的所有文件

    • 示例: cp data.log test/: 复制data.log到test目录下,默认复制文件的文件名名为data.log
    • cp -r /root/opt/software/ /root/opt/
  • mv [文件名][目录名]: move文件,跨目录移动文件或同目录修改文件名

    • 示例: mv data.log test/: 移动data.log到test目录下
    • mv data_cp.log data_copy.log: 如果此时两文件在同一目录下,则为重命名

Linux文件操作命令

  • xargs [选项] [命令]: 将接收到的字符串利用分隔符分隔为多个参数,并传递给后面的命令当作命令行参数

    • -d '分隔符': 指定处理输入数据的分隔符
    • -n [数字]: 每次只传递指定数量的参数
  • 示例:

    • find / -name "*.txt" | xargs rm
    • grep "" | xargs ...
    • ls -1S | head -n 10 | xargs rm
    • cat files.txt | xargs -n 1
    • cat nowcoder.txt | xargs -d ' ' -n 1: 将文件内容以' '分隔,并且每行输出一个(注意-d并需要指定,即使是默认的空格分隔符,因为文本内容中可能出现无法解析的内容)
  • cut:

    • cut -d ' ' -f1,2: -d用于指定分隔符,-f[1,2...]取各个部分
    • cut -c 1-5 logs.txt: 截取每行数据范围内的所有字符
    • ll|sed -n '2,$p'|cut -d ' ' -f1
  • tr:

    • ll|tr 'a-z' 'A-Z': 字符替换
    • ll|tr -d 'a-f': 字符删除
    • ll|tr -s 'o': 连续字符只显示一次
  • uniq [选项][文件]: 去除文件的重复行

    • uniq -c: 统计重复行出现的次数(格式:次数+重复行内容) 🔺uniq -c 执行前要先 sort ,保证相同数据相邻
    • uniq -d: 只显示重复行内容
  • uname [选项]: 查看当前系统信息

    • uname -r: 列出当前系统的具体内核版本号。
    • uname -s: 列出系统内核名称。
    • uname -o: 列出系统信息。
  • cat [选项][文件]: 显示文件内容

    • cat -n: 由1开始对所有输出的行进行编号(可能是为了删除或者修改某行)
    • 数据随机抽样示例:
      • cat -n data1.log|awk '{if($1%2==0) print $0}': 先对数据进行编号,再获取偶数编号的数据
  • more✔/less(-e): 文件内容分屏查看器(--More--(46%)表示此页内容在全文的46%位置处)

    • ENTER: 按行查看
    • SPACE: 按页查看
  • grep [选项][正则][文件]: 匹配过滤

    • grep -i: 不区分大小写
    • grep -v: 显示不能被模式匹配到的行
    • grep -E: 支持正则
    • grep -w: 只识别完整的条件
    • grep hello text.log: 直接检索
  • head: 从文件开始显示文件内容

    • head -n N: 显示指定文件开始的n行数据
  • sort [选项][文件名]: 对文件内容排序(默认以行为单位,首字母进行排序)

    • sort -u: 唯一排序(去重)
    • sort -kN: 按照第N个字段进行排序(eg: sort -k2)
    • sort -t[字符]: 以所给字符作为分隔符划分字段(eg: sort -t,)
    • sort -r: 进行倒序排序
    • sort -n: 保证数据中的数字被正确识别
  • tail: 从文件结尾显示文件内容

    • tail –f: 用于实时监视文件的新增内容
    • tail –n N: 查看某个文件结尾N行的内容
  • touch [文件]: 创建一个文件

  • help [命令名]: 获得Shell内置命令的帮助信息

    • 如何读懂帮助信息?
      • 示例: pwd: pwd [-LP] []表示可选的选项 ✔
      • Print the name of the current working directory. 简要介绍 ✔
      • 对每个选项具体的应用...
  • man [命令名]: 查询命令详细参数

    • q: 退出
  • tar [选项][文件名][目录名]: 解压缩

    • x: 表示解压缩
    • c: 打压缩包(反向)
    • v: 过程详情
    • -C: 指定目标目录
    • 示例: tar -zxvf example.tar.gz -C /path/to/destination 解压缩一个tar.gz文件到指定目录下。
    • tar -zcvf example.tar.gz -C /path/to/destination 压缩一个tar.gz文件到指定目录下。
  • wc [选项][文件名]: 查看文件大小(行数 单词数 字节数)

    • l: 查看文件的文件行数(输出包含了文件行数和文件名)
      • 如何实现只输出文件行数?
        • cat data1.log | wc -l
    • 不加: 文件字节数

循环

  • 依次输出list中的内容
    ```bash
    for item in list(list内容可以是数字也可以是字符串,内容用""扩起,空格分隔)
    do
    echo $item
    
    done
  • 依次输出一个范围内的值
for item in {
   1..5}
  do
    echo $item
  done
  • 依次输出一个范围内等间隔的值
    for item in {
         1..10..2}
    do
      echo $item
    done
    

    Linux文件编辑命令

可以使用vivim命令来创建、编辑和查看文本文件,以下是一些常用的vi命令:

  • vi[m] [文件名]: 创建、编辑、查看文本文件。在命令模式下执行文本编辑操作。
    • [命令模式]
      • i: 进入编辑模式。
      • :: 进入命令模式,命令写在冒号之后。
      • /[文本]: 查找文本第一个匹配位置。
      • q!: 退出并不保存。
      • w: 保存并不退出。
    • [光标移动]
      • gg: 跳到文件首行。
      • shift + g: 跳至文件尾行。
      • 0: 跳到当前行的开头。
      • $: 跳到当前行的末尾。
      • n+gg: 跳到第n行。
    • [删除文本]
      • x: 删除光标所在位置的字符。
      • dd: 删除当前行。
      • ndd: 删除当前行及其后的n行。
    • [复制和粘贴]
      • yy: 复制当前行。
      • nyy: 复制当前行及其后的n行。
      • p: 粘贴已复制的文本。
    • [撤销和重做]
      • u: 撤销上一个操作。
      • ctrl+r: 重做上一个被撤销的操作。
    • [编辑模式]
      • shift + zz: 默认保存并退出。
      • :x: 默认保存并退出。
      • i: 在光标处插入。
      • a: 在原光标处的后一个位置插入内容。
      • o: 光标行下的新行插入。
      • esc: 退出编辑模式并回到命令模式。

        文本编辑命令

sed 命令

sed [选项][命令][文件]

选项:

  • -r 开启扩展正则ERE支持
  • -i 直接修改原文件(默认为模式修改,不修改文件)
  • -n 关闭模式输出,不按默认形式输出所有行
  • -f 将命令写在文件中 sed -f cmd-file file
    • cmd-file 表示包含sed命令的脚本文件,表示对file文件应用脚本文件定义的sed操作,并且输出结果。

命令:

  • s 替换 [4[,6]]s/regex/replace/[g] substitute
    • 示例:sed -r '4,6s/\bha([0-9]+)?doop\b/they/g' test1.log
  • d 删除行 (/regex/|4[,6][1,$]...)d 中美元符号表示最后一行(即代表删除全部行) delete
    • 示例:sed '/^[[:space:]]*$/d' filename 删除空白行
  • i 向上插入新文本行 (/regex/|4)i\inserted line(此时的新增行在第四行的位置) insert
  • a 向下插入新文本行 (/regex/|4)a\inserted line(此时的新增行在第五行的位置) append
  • p 输出行 (/regex/|4[,6])p 搭配-n一起使用才生效
    • 示例:sed -n '4,6p' test1.log 获取4到6行的数据

awk 命令

awk [选项] 'BEGIN{}{}END{}' [文件]

结构:

  1. BEGIN{} 在开始处理输入之前执行一次
  2. {} 对输入文件的每一行执行一次
  3. END{} 处理完所有的输入之后执行一次

文本输出:

  • print var, "", $1 ($1取第一块内容 $0取整行) | {}1 (不需要写print,输出整行内容,{}默认为不输出) | {print $0,$3,$NF} => 默认打印出来的内容以空格分隔。

选项:

  • -F 指定分隔符,默认空格
  • -v 定义变量,向内传值

正则:

  • /regex/{...}
  • 示例:awk '/root/{print $1}' test.log 打印root所在的第一列

分支:

  • if... ; else 分支结构 {if($2>10) print $2; else print $NF }

循环:

  1. for() do; { for(i=1; i<=NF; i++) print $i; }
  2. for() do; { for(k in array) print array[k]; }

awk中的数组:

  • 无需预先定义数组名和数组大小,支持字符串拼接。
  • 示例:awk '{for(i=1;i<=NF;i++){if(NR==1) row[i]=$i;else row[i]=row[i]" "$i}}END{for(i=1;i<=NF;i++){print row[i]}}' nowcoder.txt

特殊的内置变量:

  • NF 当前行的列数
  • NR 当前行的行号
  • 示例:awk '{print "Line " NR ": " $0}' data1.log 打印行号和行内容

常见用法

  • 如果awk{}中输出为{print $1,$2}用空格分隔,{print $1","$2}才用逗号分隔。
  • 示例:awk '{if($NF>=75) print $1","$NF; else print "UNPASS"}' data1.log

awk常见字符串函数

  • length(STRING) 获取字符串长度
  • substr(STRING,START,LENGTH) 获取子字符串
  • index(STRING,SUBSTRING) 返回指定子字符串在原字符串中第一次出现的位置(从1开始)。
  • printf(FORMAT,VALUE) 格式化输出字符串
  • match(STRING,REGEX) 返回正则表达式在字符串中第一次匹配的位置(从1开始)。
  • split(STRING,ARRAY,SEPARATOR) 将字符串按照指定的分隔符拆分为多个字符,存放在数组中
  • toupper(STRING) & tolower(STRING) 将字符串中的字符转换为大小或小写形式
  • gsub(REGEX,REPLACEMENT,STRING) 替换所有匹配项
  • sub(REGEX,REPLACEMENT,STRING) 替换第一个匹配项

特殊符号:

  • A|B 管道符,A|B表示将命令A的输出作为命令B的输入,常配合grep使用。
  • >|>> 查询结果重定向(>覆盖,>>追加)
  • cat >> event.log '<<EOF' 动态文本编辑

重定向:

  • COMMAND 1>>info.log 2>>err.log 需要将结果记录到日志中,屏幕无输出
  • COMMAND 2>/dev/null 对需要遍历文件系统或需要特定权限的操作时,经常会遇到权限拒绝、访问拒绝或其他错误信息。
  • COMMAND 1>/dev/null 2>&1 无需查看结果,也无需将结果记录到日志中

    分隔符

  • 虚拟机中默认的分隔符就是空格

$

  • 命令行提示符(在终端或命令行界面),并不属于实际命令
  • $i, i为数组索引,$i表示数组中索引为i的元素的值

""

  • 其中放字符/字符串常量,进行字符串拼接时

~

  • 独属于awk中regex表示正则表达式的匹配
  • 示例:if($6 ~ /^[0-9]+$/)

Linux用户/用户组

  • 用户是指操作系统的实际操作者,与操作系统的资源进行交互
  • 用户组是具有相同权限的用户的集合体,直接对整个用户组进行授权。
  • 关于权限:将操作系统视为文件和文件夹的集合,文件有r w x的权限。
  • UID:用户唯一标识
    • root的ID为0, Linux系统权限最高的用户
  • GID:用户组唯一标识

Linux用户操作命令

  • useradd [用户名]:添加用户
  • userdel [用户名]:删除用户
  • last:查看历史登录系统用户访问详情列表
  • w/who/whoami:查看当前用户信息
  • passwd [用户名]:设置用户密码
  • id:查看当前用户UID和GID
  • cat /etc/passwd:查看创建了哪些用户
  • cat /etc/group:查看创建了哪些用户组
  • cat /etc/shadow:查看密码
  • su[用户名]:改变用户身份或切换到root
  • su -l[用户名]:切换到其他用户账户并且加载该用户的完整环境
  • sudo[选项]命令[命令参数]:暂时以root身份执行某个任务
  • usermod-l[新用户名][旧用户名]:修改用户登录名
  • groups:查看当前用户所属分组或指定用户所属分组
  • groupadd[组名]:添加分组
  • gpasswd[组名]:管理用户组成员
  • usermod-g[新组名][用户名]:修改用户所属分组
  • groupdel[组名]:删除分组

Linux权限管理

  • chmod:修改权限
  • chown:变更文件的所有者
  • 权限位示例:-rwxr-xr-x. 1 root root 964536 Nov 25 2021 bash

Linux系统资源查看

  • top:查看系统实时健康状态
  • mpstat:查看CPU使用率
  • free:查看内存
  • df:查看磁盘空间

Linux进程和程序

  • 进程基本概念:只要把程序(运行起来)加载到内存中,就称之为进程。
  • 查看进程:ps -ef | grep [进程标识]
  • 停止进程:kill -9 [PID]
  • 查看端口占用情况:netstat -anutp

Centos中软件的安装方式

  • 源码编译安装
  • YUM安装
  • RPM安装
  • 官方脚本自动下载、安装、配置环境
  • 压缩包手动安装,需手动配置环境
  • 复制软件到制定目录,通常无序额外的配置或依赖

RPM包管理

标准化地打包、安装、升级和删除Linux软件。

  • wget package_url 下载RPM包
  • rpm -ivh 包名 安装RPM包,再用yum install安装服务
  • rpm -qa | grep 包名 查看RPM安装包
  • rpm -e 包名 删除RPM安装包(不会删除已经安装到系统里的资源)
  • yum -y remove 包名 删除RPM安装包并且删除对应的资源
    (删除之后记得查看)

YUM包管理

自动获取、安装和更新RPM包。

  • yum源管理 本地、远程(阿里、华为、清华...)
  • yum search 服务名|命令 查找服务、命令相关的资源
  • yum -y install 服务名 安装服务
  • yum -y remove 服务名 卸载服务

tar解压安装

  • 安装包格式: tar、tar.gz、tar.bz、xz
  • 打包并以gzip压缩: tar -zcvf 目标压缩包路径 源目录路径
  • 解压: tar -zxvf 源包路径 [-C 目标解压路径(缺省默认当前路径)]

为什么Linux压缩格式都为tar.gz|tgz的形式?

targzip的组合方便打包并压缩。现代的Windows工具可以打开和创建这种格式,便于不同操作系统之间的文件交互。

RPM和TAR安装的选择:

  • RPM:需要系统集成的基础组件(Mysql)
  • TAR:需要更多灵活性或定制化的软件(JDK、Redis、Zimg、Hadoop...)

Linux服务管理

查看服务状态

  • systemctl list-units -all 列出所有服务
  • systemctl list-units --all | grep "active (running)" 列出在线的服务
  • systemctl status SERVICE_NAME mysqld, firewalld, sshd, NetworkManager 查看指定服务名的服务状态

开关服务

  • systemctl start SERVICE_NAME
  • systemctl stop SERVICE_NAME
  • systemctl restart SERVICE_NAME 重启(大更改)
  • systemctl reload SERVICE_NAME 不重启(小更改,重载配置信息)

启禁服务

  • systemctl enable/disable SERVICE_NAME

启禁服务管理

  • systemctl mask/unmask SERVICE_NAME

进制

  • m=date +%m 提取月份(假设为09)
  • let q=(m-1)/3+1 => -bash: let: 09: value too great for base (error token is "09")
  • let q=(10#$m-1)/3+1 因为Linux默认为8进制,需要先进行转换才可以继续进行计算。

打印命令

  • echo 打印输出
    • echo -n CONTENT 不换行输出
    • echo -e CONTENT (支持转义符:\t \n)
      • 例如: echo -e "\033[31m$1\033[0m" (将$1替换为内容,格式为红色,通常用于异常输出)
  • printf 格式化输出
    • printf "FORMAT_STR" VARS
    • 例如: printf "%s,%.2f" "$a" "$n"
  • printenv 输出环境变量
    • printenv ENV_NAME <=> echo $ENV_NAME

日期时间类命令

date [选项][+格式]

选项

  • -u 指定时区,缺省默认本地
  • -d DATE, 指定运算规则

基础命令

  • date +%F 输出"年-月-日"(Full Date)
  • date +%T 输出"时-分-秒"(Time)
  • date +"%F %T" 标准时间格式
  • date +%Y 输出年
  • date +%m 输出月
  • date +%d 输出日
  • date +%H 输出时(24)
  • date +%M 输出分
  • date +%S 输出秒

进阶命令

  • date +%j 输出今天是今年的第几天
  • date +%W 输出今天属今年的第几周
  • date +%w 输出今天是星期几(0-6代表日、一-六)
  • date +%s 输出时间戳
  • date +%m 输出今天属今年的第几月

日期类计算

  • date -d "2021-05-11 10:25:39" +%s 日期转秒
  • date -d "±N year|month|week|day" +%F 日期前后计算①不指定日期
  • date -d "-5 day 2021-05-11 10:25:39" +"%F %T" ②指定日期
  • date -d "@1621563938" +"%F %T" 秒转日期

时钟校准

  • yum -y install ntpdate.x86_64
  • ntpdate -u cn.pool.ntp.org
    (ntp网络时间协议 -u update更新 cn.pool.ntp.org中国的ntp服务器地址
    记忆:中国 池 时间 组织(同步))
    为了保证每台机器的时差不超过阈值防止报错,需要写一个"ntpdate -u cn.pool.ntp.org"的定时任务。

搜索查找命令

find [起始目录][选项]

选项

  • -name wildcard:以名查找(查找的条件不是正则表达式,而是通配符)
  • -type d|f:以类型查找(d 目录 f 文件)
  • -(a|c|m)(min|time) ±n(minutes|hours)
  • -maxdepth [数字] 控制搜索的最大深度

时间段内的搜索

  • find /root -type f -mmin -30 -mmin +5 | grep -iw proto
  • locate [文件名[文件后缀]]
  • which|whereis [待查找内容] 查找文件所在的位置

标准流

  • 标准输出流编号为1 标准错误流编号为2
  • [1]> 重定向stdout覆盖
  • [1]>> 重定向stdout追加
  • 2> 重定向stderr覆盖
  • 2>> 重定向stderr追加
  • 特殊形式:&1 >>/dev/null

如何理解'&1'?

&用于将一个文件描述符与另一个文件描述符相关联。&1表示将标准输出流(文件描述符1)与某个目标相关联。
command > output.txt 2>&1 则表示stdout和stderr合并都发送到output.txt

其他处理命令

  • file 查看文件类型
  • ln -s [指向目录] 链接名 创建软链接。
  • crontab 克隆表达式
    • -e 编辑(个体删除)
    • -l 查看
    • -r 整体删除
    • * * * * * /path/to/command arg1 arg2

crontab时间设置示例

  • 每5分钟: */5 * * * *
  • 每小时: 0 * * * *
  • 每天: 0 0 * * *
  • 每月: 0 0 1 * *
  • 每星期: 0 0 * * 00 0 * * 7
  • 每周工作日(周一至周五): 0 0 * * 1-5
  • 每周末(周六和周日): 0 0 * * 6,7

*表示任何,*/n表示每n个时间单位(时间单位即为*对应的时间单位),,表示多个时间点,-表示间隔时间段。

编写定时任务后如何进行检验?
tail -f resource.log | var/log/cron

例:定时任务每半个小时将系统资源(CPU占用率,MEM剩余容量和占用率,DISK剩余容量与占用率,容量单位GB,
容量和占用率都保留2位小数)情况存入当前用户主目录下log目录下的resource.log下。

1.创建脚本

vim collect_resource.sh

=================================================================================================================================================
CPU_USAGE=$(mpstat|awk '/all/{printf("%.2f\n",(100-$NF)/100)}')
MEM_FREE=$(free|awk '/Mem/{f=$4;M=1024*1024;printf("%.2f\n",f/M)}')
MEM_PERCENT=$(free|awk '/Mem/{f=$4;t=$2;printf("%.2f\n",f/t)}')
DISK_FREE=$(df|awk 'BEGIN{t=0;u=0}/\/dev\/s.*/{next}/[0-9]{2,}/{t+=$2;u+=$3}END{M=1024*1024;t/=M;u/=M;l=t-u;printf("%.2f",l)}')
DISK_PERCENT=$(df|awk 'BEGIN{t=0;u=0}/\/dev\/s.*/{next}/[0-9]{2,}/{t+=$2;u+=$3}END{M=1024*1024;t/=M;u/=M;l=t-u;o=l/t;printf("%.2f",o)}')
echo "$(date +'%Y-%m-%d %H:%M:%S') - CPU: $CPU_USAGE, MEM: ${MEM_FREE}G ($MEM_PERCENT), DISK: ${DISK_FREE}G ($DISK_PERCENT)" >> ~/log/resource.log
=================================================================================================================================================

chmod u+x collect_resource.sh

2.设置定时任务

crontab -e 打开定时任务编辑器

*/30 * * * * /path/to/collect_resources.sh

history
查看当前用户进行实验语句的历史记录

两种退出
ctrl+c 结束进程
1.一个无限循环的脚本
2.一个长时间运行的命令
ctrl+d 结束终端会话或输入
1.在Shell提示符下结束终端会话
2.在免密登录的情况下,安全地退出远程会话。

目录
相关文章
|
2月前
|
Ubuntu Linux Python
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
在Linux系统中,使用Tkinter库时可能会遇到中文显示乱码的问题,这通常是由于字体支持问题导致的,可以通过更换支持中文的字体来解决。
158 0
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
|
3月前
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
24天前
|
存储 Shell Linux
Linux 如何更改默认 Shell
Linux 如何更改默认 Shell
30 0
Linux 如何更改默认 Shell
|
2月前
|
Web App开发 网络协议 Linux
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
这篇文章是关于Linux命令的总结,涵盖了从基础操作到网络配置等多个方面的命令及其使用方法。
78 1
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
|
1月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
2月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
110 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
3月前
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
3月前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
747 2
|
2月前
|
存储 Shell Linux
【Linux】shell基础,shell脚本
Shell脚本是Linux系统管理和自动化任务的重要工具,掌握其基础及进阶用法能显著提升工作效率。从简单的命令序列到复杂的逻辑控制和功能封装,Shell脚本展现了强大的灵活性和实用性。不断实践和探索,将使您更加熟练地运用Shell脚本解决各种实际问题
36 0
|
3月前
|
Shell Linux 开发工具
linux shell 脚本调试技巧
【9月更文挑战第3天】在Linux中调试shell脚本可采用多种技巧:使用`-x`选项显示每行命令及变量扩展情况;通过`read`或`trap`设置断点;利用`echo`检查变量值,`set`显示所有变量;检查退出状态码 `$?` 进行错误处理;使用`bashdb`等调试工具实现更复杂调试功能。