Linux

本文记录linux相关的知识,如软件安装、shell语言、awk语言、系统优化等。

文章目录

    • [1. 软件安装](#1. 软件安装)
      • [1.1. gcc、make等开发工具](#1.1. gcc、make等开发工具)
      • [1.2. apt查找](#1.2. apt查找)
    • [2. 其他](#2. 其他)
      • [2.1. git保存密码](#2.1. git保存密码)
      • [2.2. 计算器 bc](#2.2. 计算器 bc)
    • [3. awk](#3. awk)
      • [3.1. 比较表达式](#3.1. 比较表达式)
      • [3.2. 自动变量](#3.2. 自动变量)
      • [3.3. 内置函数](#3.3. 内置函数)
    • [4. bash](#4. bash)
      • [4.1. 关联数组(即字典)](#4.1. 关联数组(即字典))
      • [4.2. 判断命令与逻辑表达式](#4.2. 判断命令与逻辑表达式)
      • [4.3. 命令传参](#4.3. 命令传参)
      • [4.4 <](#4.4 <)
      • [4.5. while](#4.5. while)
      • [4.6. exec](#4.6. exec)
      • [4.7. for语句](#4.7. for语句)
      • [4.8. seq](#4.8. seq)
      • [4.9. bash -c](#4.9. bash -c)
    • [5. ps](#5. ps)
    • [6. wget](#6. wget)
      • [6.1. ftp下载](#6.1. ftp下载)
    • [7. curl](#7. curl)
    • [8. unzip](#8. unzip)

1. 软件安装

1.1. gcc、make等开发工具

bash 复制代码
sudo apt -y install build-essential gdb

1.2. apt查找

bash 复制代码
sudo apt search --names-only ^git$

2. 其他

2.1. git保存密码

bash 复制代码
sudo apt install libglib2.0-dev libsecret-1-dev -y
sudo make -C /usr/share/doc/git/contrib/credential/libsecret
git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret
git config --global user.email xxx
git push
# 输入一次密码后就会保存下来

2.2. 计算器 bc

bash 复制代码
echo '11.1/10' | bc -l

-l 会返回小数 否则返回整数

3. awk

3.1. 比较表达式

xx ~ /reg/ 正则匹配表达式

3.2. 自动变量

$0表示整行

NR 表示行数,从1开始

3.3. 内置函数

match(reg,str) 返回匹配到的位置 长度为RLENGTH

substr(str,idx,len)

length(str)

sub(reg,replace,target) 直接在target上替换不会返回替换后的字符串,只替换1个

gsub 参数同上,语义是替换所有

asorti(arr,sorted) 排序后的键存放在sorted中

4. bash

4.1. 关联数组(即字典)

declare -A map

-A 表示声明关联数组

map[name]=xiaoming

遍历key ${!map[@]} 获取值 KaTeX parse error: Expected '}', got 'EOF' at end of input: {map[key]}

遍历值 ${map[@]}

4.2. 判断命令与逻辑表达式

[ xx ] && [ ! xx ]

-n 非空字符串

-z 空字符串

-e 文件或目录存在

-f 文件存在

-d 目录存在

-eq ne lt gt le ge 数字比较 数字用字符串表示

注意:

是一个命令 与test完全一样 后面必须有空格

[[ xx ]] 是 [ xx ]的增强支持

\[ xx \&\& ! xx \]

\[ xx == xx \]\] 支持通配符\* \[\[ xx =\~ \^\[0-9\]+$ \]\] 正则匹配 `(( xx )) 算术运算 返回0为假` #### 4.3. 命令传参 `echo aa | awk "{print $0}"` 错误,使用双引号时bash会先解析字符串,替换$0为bash环境变量,在传给awk,于是awk输出错误。 使用单引号时不会替换bash环境变量。 `ssh -l root ip ' echo aa | awk \'{print $0}\' '` 错误,单引号中无法转义,\\只是单纯的字符,因此上面会被解释为: `' echo aa | awk \'` 这是一个整体 `{print` 是一个独立的部分与前面的拼在一起 `$0` 会被替换为环境变量的值 `}\'` 表示两个拼在一起的字符 最后一个引号没有关闭。 正确的可以写作: `ssh -l root ip echo aa \| awk \'{print \$0}\' ` 其中\| ' $需要转义,否则会被bash当做关键字处理。 #### 4.4 \< 将文件内容作为标准输入 #### 4.5. while bash的while语句:`while condition命令; do command;done` 不停执行condition命令和command,直到condition命令返回失败时退出循环,也可以break退出。 `while read line; do echo $line;done < file` 将file的内容作为当前bash的标准输入,在while下read一次读取一行,读取完一行后文件偏移一行,接着从偏移位置读取下一行,直到文件结尾返回失败,退出循环。循环结束后bash的标准输入恢复成原来的。 #### 4.6. exec 直接替换当前bash进程的程序镜像而不是创建子进程。 `exec 3>file` 打开文件写入,绑定到文件描述符3 `exec 3<&0` 将当前bash进程的标准输入复制到到文件描述符表中的索引3处 `exec file` 将标准输出重定向到文件 #### 4.7. for语句 `for 名称 [in 词语 ... ] ; do 命令; done` 遍历列表中的元素,示例: for i in `seq 0 10`; do echo $i; done #### 4.8. seq seq \[OPTION\]... LAST seq \[OPTION\]... FIRST LAST seq \[OPTION\]... FIRST INCREMENT LAST 示例: `seq 0 2 10` 输出0到10,步长是2,就是 0 2 4 6 8 10 #### 4.9. bash -c 指定-c时,后面第一个非option参数作命令,命令后面还有参数的话,分别作$0 $1 ... 传给命令 示例: `bash -c 'echo $0 $1 $2' aa bb cc` 上面会打印aa bb cc `bash -c echo aa bb cc` 表示执行命令echo,aa bb cc作$0 $1 $2,由于命令只是一个echo,所以什么也不打印 ### 5. ps `ps -ef` > 输出: > > UID PID PPID C STIME TTY TIME CMD > > checx 25938 25767 0 23:09 pts/0 00:00:00 ps -ef -e 输出所有进程 UID 其实显示的是EUID,即实际用来作权限检查的用户,通常 EUID = UID(登录用户),但是当可执行文件带有 set-user-ID (SUID) 位时,EUID 变成文件属主 ID,进程就临时拿到属主权限。如: > -rw++s++r-xr-x 1 root root /usr/bin/passwd 普通用户运行passwd命令,EUID是root,这是由于该进程需要root权限来写/etc/shadow。 C 进程启动以来的平均cpu使用率,cpu使用时间/进程运行时间\*100% STIME 启动时间 TIME 累计占用CPU时间 TTY 终端,?表示没有终端(后台进程) CMD 启动命令 + 参数(会被屏幕宽度截断,想看完整加 ww) `ps -eF` 相较于-f增加了: SZ 分配的虚拟内存页数,s\*页大小=vsz RSS resident set size, 实际驻留在物理内存中的大小(单位:KB),包括共享库。 PSR 进程最近使用的cpu编号 `ps -efL` 增加了: LWP 线程ID NLWP 线程数量 `ps -eo pid,ppid,cmd,%mem,rss,vsz,args -p ` rss: resident set size, 实际驻留在物理内存中的大小(单位:KB),包括共享库。 vsz: visual size, 虚拟内存使用(单位:KB),进程地址空间中已分配的虚拟内存。 args: 启动命令和参数 ### 6. wget #### 6.1. ftp下载 `wget -m -nH --ftp-user=xxx --ftp-password=xxx ftp://xxxxx` -m 递归 -nH 不创建ftp服务器目录 ### 7. curl ```bash curl -XPOST -H 'Content-Type: application/json' -d @ ``` `-X` 请求方法,如GET,POST,DELETE `-H` 请求头,可以有多个-H参数 `-d` 请求体,可以是字符串,也可以使用文件,使用文件时,文件名前要加@ ### 8. unzip ```bash unzip -O GBK -d

file.zip ``` `-O` 指定字符编码,解压后文件名中文乱码时可以指定GBK试一试 `-d` 解压目录,目录不存在时会自动创建

相关推荐
Zhao·o3 小时前
KafkaMQ采集指标日志
运维·中间件·kafka
P***25393 小时前
MCP负载均衡
运维·负载均衡
SAP庖丁解码3 小时前
【SAP Web Dispatcher负载均衡】
运维·前端·负载均衡
码上上班4 小时前
ubuntu 安装ragflow
linux·运维·ubuntu
HIT_Weston4 小时前
38、【Ubuntu】【远程开发】拉出内网 Web 服务:构建静态网页(一)
linux·前端·ubuntu
百***86464 小时前
服务器部署,用 nginx 部署后页面刷新 404 问题,宝塔面板修改(修改 nginx.conf 配置文件)
运维·服务器·nginx
XH-hui4 小时前
【打靶日记】HackMyVm 之 hunter
linux·网络安全·hackmyvm·hmv
渡我白衣4 小时前
五种IO模型与非阻塞IO
运维·服务器·网络·c++·网络协议·tcp/ip·信息与通信
xu_yule5 小时前
Linux_15(多线程)线程安全+线程互斥(加锁)+死锁
linux·运维·服务器
wa的一声哭了5 小时前
并行计算 PCAM方法学
linux·运维·服务器·arm开发·python·spring·django