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 表示声明关联数组

mapname=xiaoming

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

遍历值 ${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 将文件内容重定向到标准输入,无法接收键盘输入了,脚本里面记得要手动恢复,交互式直接嘎了。

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 <pid>

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 @<file> <url>

-X 请求方法,如GET,POST,DELETE

-H 请求头,可以有多个-H参数

-d 请求体,可以是字符串,也可以使用文件,使用文件时,文件名前要加@

8. unzip

bash 复制代码
unzip -O GBK -d <dir> file.zip

-O 指定字符编码,解压后文件名中文乱码时可以指定GBK试一试

-d 解压目录,目录不存在时会自动创建

相关推荐
longforus1 分钟前
linux上播放音乐的终极解决方案
linux·音频·折腾
xcLeigh3 分钟前
鸿蒙PC平台 Shotwell 照片管理器适配实战:从 Linux GNOME 到 鸿蒙PC 的 Electron 迁移
linux·electron·harmonyos·鸿蒙·shotwell·照片管理器
Lang-121023 分钟前
CentOS Linux服务器完整迁移方案
linux·服务器·centos
TCW112126 分钟前
Linux操作系统系列.动态加载
linux·服务器
lisanmengmeng34 分钟前
gitlab 免密配置
linux·服务器·gitlab
普马萨特36 分钟前
Wi-Fi (802.11) 协议演进
运维·服务器·网络
与代码不die不休38 分钟前
RTX5060显卡torch和torch_radon库安装避坑指南(仅linux系统)
linux·图像处理·python·深度学习
vortex540 分钟前
深入探讨 Linux/Unix 传统设计哲学
linux·运维·unix
袁小皮皮不皮44 分钟前
2.HCIP OSPF路由基础(优化版)
运维·服务器·网络·网络协议·智能路由器
JieDavid1 小时前
专利流程岗上岸实录|奇智创达知识产权系统实操经验分享
大数据·运维·人工智能·经验分享·产品运营·产品经理