以下为个人学习笔记整理
# Linux 学习笔记
# Linux 目录结构
/bin: binary,存放二进制文件,普通命令/sbin:system binary,存放系统二进制文件,需要系统权限/user/bin:用户安装的应用程序/user/sbin:超管安装的应用程序
# Linux 基本指令
pwd:查看路径ls:查看目录下文件clear:清屏rm filename:删除文件-d可以删除文件夹mv file/dir dir:移动 [文件 / 文件夹] 到某个目录下cp file/dir file/dir:复制文件/文件夹到目录下/文件内,复制文件夹需要加-rid:查看用户信息find dir -name filename: 搜索文件locate filename: 搜索文件 (比 find 更快但可能更新不及时)cat filename: 查看 / 创建文件more filename: 按分页查看文件vim fimename: 编辑文件cd path: 进入某个文件,如果不加 path 默认回到~/目录cd -: 返回刚才的目录'command': 被'号修饰的字符串则不会被执行scp [可选参数] file_source file_target: 远程拷贝文件watch [可选参数] command: 每隔一段时间执行一次指令echo string: 输出(用于简单的输出)/dev/null: 位桶,一般用来承上启下,在写入操作不必要但必须执行的时候可以用位桶写入一个不需要自己关注的地方cut: 对内容进行裁剪join: 合并文件内容,每一条记录都有一个 key,相同 key 可共享(合并后会成为一条记录)sort: 排序,可根据键 / 值 / 数据类型等对行内容进行排序(排序并不稳定)fmt: 格式化排版,部分 Linux 可能没有wc: 统计行数、字数、字节数touch: 创建文件或修改文件时间属性mkdir: 创建文件夹head / tail -n 行数: 显示开头和结尾的内容which 指令: 显示指令的绝对路径/dev/tty: 读取此文件会定位到一个终端窗口,可用于读入人工输入.profile: 每次登录 shell 都会读取的文件,该文件位于/etc/profileln file/dir linkname:给文件/文件夹创建软连接tr: 字符转换 / 删除操作env: 查看环境变量- `command`: 被 ` 修饰的内容会默认当作指令执行。等效于 $(command)—— 更推荐这么用。这样执行相当于在一个新的子 shell 执行命令
 
# shell 指令
set name val: 设置变量unset varname: 删除某个变量bash -vx xx.sh: 调试的方式执行脚本#! /bin/sh -: 作为文件开头等效于#!/bin/bashprogram &: 指令后加入 & 可以让指令变成非阻塞式,不需要等到指令执行完便可以做后续操作$variablename: 用来获取变量值programe1 | programe2: 把左边的内容以右边的格式输出${int}: 在 shell 函数中作为函数参数command1 && command2: 1 成功执行了才执行 2(成功是 0,失败是!0)command1 || command2: 1 执行失败了了才执行 2<<-EOF 内容 EOF: 有点类似 python 的 """xxxxxx""",可以把多行内容打包。-可以避免结束的 EOF 前出现空格会报错的问题。EOF也可以替换成其他内容,只要保持首尾一致即可。. xx.sh 或者 source xxx.sh: 在当前 shell 执行脚本./xxx.sh 或者 bash xxx.sh: 在一个新 shell 窗口执行,与上者的区别在于,新窗口执行的操作不会对原窗口产生影响。&: 让程序在后台执行(command1;command2): 在子 shell 中执行不影响当前 shell 环境,功能类似bash xxx.shread -p string var: 键盘输入的值赋给 var 变量-p string可以在输入前给用户提示export: 被export修饰的变量会变成环境变量,作用所有 shell 和子 shell
# login shell && nologin shell
# login shell:
su - username
# 登陆时会执行下面的四个文件
/etc/profile 、 /etc/brashrc 、 ~/.bash_profile 、 ~/.bashrc
# nologin shell:
su username
# 登陆时会执行下面的两个文件
/etc/brashrc 、 ~/.bashrc
# 系统级 (登陆时执行):
/etc/profile
/etc/brashrc
# 用户级 (强两个登陆时执行,后两个登出时执行):
~/.bash_profile
~/.bashrc
# 用户级登出
~/.bash_logout
~/.bash_history
# history & !
history: 查看历史命令!数字: 执行某条历史命令!字符串: 执行最近执行过的一条命令,必须和字符串匹配才行!$: 获取上一个命令的最后一个参数!!: 执行上一个命令
# 别名 alias
alias: 查看当前 shell 命令别名unalias 别名: 取消别名 或者在命令前加个\例如:alias ls='ls --color=auto'在执行 ls 的时候默认执行ls --color=auto取消别名可以unalias ls后执行ls或者\lsalias xxx='xxxx': 定义临时别名- 想要定义永久别名就在 
~/.bashrc里面加上 添加别名的语句 例如:alias ls='ls --color=auto' 
# Linux 快捷键
ctrl+l: 清屏ctrl+v: 块选择,编辑文本很好用ctrl+r: 查找历史命令ctrl+d: 退出 linuxctrl+a: 光标移动到指令最前面ctrl+e: 光标移动到指令最后面ctrl+u: 删除光标前的内容ctrl+k: 删除光标后的内容ctrl+y: 撤销上一步操作ctrl+s: 锁屏,即看不到指令的输入和结果ctrl+q: 解锁,锁屏的反向操作ctrl+z: 暂停进程,一般用于 vim 编辑文件时暂停去做其他事务,之后通过fg切回暂停的进程
# 输入输出重定向
< filename: 从文件读入数据输入到 < 左边> filename: 把结果输出重定向到文件内>> filename: 把结果输出重定向到文件结尾,结果一般是整数表示是否执行成功<< filename: 把结果输入重定向到文件结尾,结果一般是整数表示是否执行成功
| 设备 | 设备名 | 文件描述符 | 类型 | 
|---|---|---|---|
| 键盘 | /dev/stdin | 0 | 标准输入 | 
| 显示器 | /dev/stdout | 1 | 标准输出 | 
| 显示器 | /dev/stderr | 2 | 标准错误输出 | 
常规用法:
cat xxx.txt 1>xxx1.txt: 把 xxx.txt 的标准输出重定向到 xxx1.txt 中cat < xxx.txt: 把某文件内容作为 cat 输入cat > xxx.txt < xxx1.txt: 把 xxx1.txt 内容作为 cat 的输入,并把 cat 的输出作为 xxx.txt 的输入&>: 混合输出,把上述的 1,2 两种输出内容一起输出
# 管道 && T 管道
cat xxx.txt |grep a |grep b: 管道过滤cat xxx.txt |grep a |tee xxx1.txt |grep b: 可以把grep a的过滤结果输出到xxx1.txt在执行后面的过滤cat xxx.txt |grep a |tee -a xxx1.txt |grep b:-a表示追加写入到xxx1.txt
# 匿名管道 |
特征:
- 单向通讯
 - 只支持父子进程通信,不支持跨进程
 
# 命名管道
特征:
- 可以跨进程通信
 - 可以作为文件访问
 - 先进先出原则
 
mkfifo name: 创建命名管道
# echo 颜色输出
echo -e "\e[1;31m content \e[0m": 输出一段红色内容,其中\e[1;xxm表示设置颜色\e[0m表示重置为原本颜色
| 前景 | 背 景 | 颜色 | 
|---|---|---|
| 30 | 40 | 黑色 | 
| 31 | 41 | 红色 | 
| 32 | 42 | 绿色 | 
| 33 | 43 | 黄色 | 
| 34 | 44 | 蓝色 | 
| 35 | 45 | 紫红 | 
| 36 | 46 | 青蓝 | 
| 37 | 47 | 白色 | 
文字颜色是 30-37m,背景颜色是 40-47m
| 代码 | 含义 | 
|---|---|
| 0 | OFF | 
| 1 | 高亮显示 | 
| 4 | underline | 
| 5 | 闪烁 | 
| 7 | 反 白显示 | 
| 8 | 不可见 | 
# if 条件语句
基本结构 :
if [ ];then  | |
: #什么都不做可以用:  | |
else | |
fi | 
示例:
cat xxx.txt | |
if [ $? -eq 0 ];then  | |
echo "cat success"  | |
else | |
echo "cat fail"  | |
fi | 
注意
[]符号中间要有空格
# 预定义变量
| 指令 | 含义 | 格式 | 
|---|---|---|
| $0 | 脚本名 | 带路径的脚本名。想得到脚本名,可以在执行时用 basename 修饰,如果只需要路径可以用 dirname 修饰 | 
| $* | 所有参数 | "$1 $2 $3 ..." | 
| $$ | 当前进程 PID | 数字 | 
| $! | 上一个后台进程 PID | 数字 | 
| $# | 参数个数 | 数字 | 
| $@ | 所有参数 | "$1" "$2" ... | 
# 位置变量
$1 $2 $3 $4 $5 $6 $7...
# 整数运算
expr int + int: 计算两个整数+-\*/%$((int + int)): 计算两个整数+-*/%$[int + int]: 计算两个整数+-*/%let varname=int+int: 计算两个整数+-*/%
# 小数运算
"float+float"|bcawk 'BEGIN{print float/float}'"float+float"|python
# ${} 和变量内容的删除
# 替换
以下操作,不会修改变量
${varname}: 用来获取变量值- `$