本文记录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