CPU: 核心计算资源;
L123缓存: 位于CPU与内存之间的临时存储器,容量小, 但交换速度却比内存要快得多;
RAM: 内存, 断电后数据丢失;
DISK: 硬盘, 物理存储, 断电后数据不丢失, 但是读写速度很慢;
1970年, Unix诞生(贝尔实验室)并开源;
1979年, Unix V7开始, 贝尔实验室禁止Unix的源码用于教学;
1987年, Tanenbaum发布了从头开发的Minix(兼容Unix V7), 用于教学;
1991年, Linus借鉴Minix开发了Linux内核;
1983年, Stallman发起了GNU(GNU is not Unix)计划, 为了创建一个完全自由的操作系统, 其与Linux内核结合, 形成现代Linux生态环境;
2017年11月份开始, 世界Top500的超级计算机全部使用Linux系统;
Linux的优势:
良好的可移植性和灵活性
应用广泛: 大型服务器, 小型计算机, 嵌入式设备 ...
完全开源, 免费使用
稳定高效, 开发和维护成本低;
Linux常见发行版:
Ubuntu, Debian, RHEL, CentOS, Fedora, Arch Linux, Kali Linux, Deepin ...
生信Linux推荐: 服务器用CentOS, 个人PC用Ubuntu;
目前CentOS不再维护新版本, 可以使用Rocky Linux 替换;
Linux中目录, 进程, 磁盘等都被抽象成了文件;
只需要一套API就可以调用Linux中大部分资源;
任何硬件设备都需要挂载到根目录下才能使用;
/──── ├── bin # binaries(二进制文件),存放着最常用的程序和指令 ├── boot # 系统启动相关文件,如内核,initrd,以及grub(BootLoader) ├── dev # device,设备文件 — 体现了LInux的“一切皆文件”思想 ├── etc # 配置文件。大多数为纯文本文件 ├── home # 用户的家目录 ├── lib # library,公共库文件(不能单独执行, 只能被调用) ├── media # 挂载点目录,挂载移动设备(如U盘) ├── mnt # 挂载额外的临时文件(如第二块硬盘) ├── opt # optional,存放额外安装软件 ├── proc # processes,伪文件系统,内存映射文件,系统启动后才出现文件, 关机就空 ├── root # 管理员的家目录 ├── sbin # superuser binaries,存放系统管理所需要的命令 ├── tmp # temporary,临时文件,所有用户都可以操作,但只能删自己的,不能删别人的 ├── usr # unix shared resources,存放只能读的命令和其他文件 └── var # variable,存放运行时需要改变数据的文件,如日志等
每个用户有独立的ID和密码;
多个用户可同时登录同一个Linux系统, 互不影响;
root用户拥有系统最高权限;
用户组: 具有相同特征用户的集合, 分组可以简化管理工作;
用户和用户组的关系: N vs N;
多用户通过权限实现资源隔离, 保障系统和数据安全;
权限的主体为用户, 对象为文件;
基本权限: 可读(r), 可写(w), 可执行(x);
用户对自己的文件有绝对的权限, 本用户的文件默认禁止其他用户访问;
root用户对所有文件拥有访问和修改权限;
命令提示符(prompt): 登陆终端后显示的符号, 可以通过PS1变量配置;
命令格式: 命令 -选项 参数, 如grep -m 1
命令: shell传递给内核执行的指令;
选项: 命令预设的控制选项, 可以是短选项, 如: -c -v -m, 或 -cvm, 或是长选项, 如: –version;
参数: 指向命令的目标, 多个参数要用空格隔开;
命令类型: 内置命令/外部命令;
命令补全: 使用TAB键;
命令历史: ↑, ↓, ctrl+r, history, ~/.bash_history;
命令帮助: man CMD; CMD -h; README;
命令路径: 命令存放在PATH路径中, 按照路径搜索并执行第一个搜到的命令;
权限设置: chmod,setfacl,chown, chgrp
查看目录/文档信息: ls, pwd, file,
改变目录: cd
创建文件目录: touch, mktemp, mkdir
软连接: ln
删除文件/目录: rm
复制文件/目录: cp
移动/重命名 文件/目录: mv
查看目录大小: df, du
查找文件: find, which, whereis, locate
*: 匹配0或多个字符:
ls *.txt a1.txt a2.txt a3.txt ac1.txt
?: 有且只有一个字符:
ls a?.txt a1.txt a2.txt a3.txt
[ ]: 字符组合, 匹配其中任意一个字符:[abc]/[!abc]/[0-9]/[a-z]
ls a[12].txt a1.txt a2.txt
{ }: 集合, 匹配其中任意一个元素: {abc,def,123}
ls {a1,a2,ac1}.txt a1.txt a2.txt ac1.txt
编辑器: vim, emacs, nano, vscode...
查看文件: cat, less, more, head, tail
文件操作三剑客
sed: sed简明教程
awk: awk简明教程
grep: grep命令介绍
统计文件: wc
内容操作: sort, uniq, cut, split ...
字符串操作: tr, col, join, paste, expand ...
压缩/打包文件: tar, gzip, bzip2, bgzip ...
<鸟哥的Linux私房菜 基础学习篇>
Linux命令大全
正则表达式
vim编辑器
stdin: 标准输入, 对应管道id0;
stdout: 标准输出, 对应管道id1;
stderr: 标准错误, 对应管道id2;
黑洞设备: /dev/null, 用来当垃圾桶
cat <file # stdin重定向到file cat file > abc # stdout 重定向到abc, 覆盖abc原有内容, 等价于: cat file 1> abc cat file >> abc # stdout 重定向到abc, 追加在abc原有内容之后 command 1>log.txt 2>error.txt # stderr 重定向到 error.txt command 1>/dev/null 2>&1 # 丢弃stdout, 同时把stderr重定向到stdout(屏幕打印)
stdout是行缓冲的数据流: 逐行输出(遇到\n或者缓冲区满才输出);
\n
stderr是无缓冲的数据流: 实时输出;
# 对一个文件取第一列, 然后排序, 然后去重: cut -f 1 file.txt > tmp1.txt sort tmp1.txt > tmp2.txt uniq tmp2.txt > final.txt rm -f tmp1.txt tmp2.txt
|
cut -f 1 file.txt | sort | uniq > fianl.txt
FIFO是一个文件,一端写,一端读,会阻塞
用mkfifo创建FIFO
FIFO中的内容存放在内存中
可以通过创建FIFO在linux中实现并行计算
自学资料:
## 查看系统版本信息 cat /proc/version uname -a lsb_release -a cat /etc/issue # 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 ## 查看物理CPU个数 cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l ## 查看每个物理CPU中core的个数(即核数) cat /proc/cpuinfo| grep "cpu cores"| uniq ## 查看逻辑CPU的个数 cat /proc/cpuinfo| grep "processor"| wc -l ## 查看CPU信息(型号) cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c ## 查看磁盘分区和使用情况 df -h ## 查看内存信息 cat /proc/meminfo free
top命令详解
htop命令详解
nohup+&: nohup cmd args &
nohup cmd args &
screen命令: Linux screen命令详解
# boom! rm -rf / # 你意识不到的错误 export dirtoremove="/path/to/my/unused/dir" rm -rf /path/to/some/parent/$Dirtoremove # will remove all parent things!
mv fileA fileB
tar zcvf 新产生的文件.tgz 要压缩的文件 #压缩 tar zxvf 待解压的文件.tgz /指定/目录/子文件.txt #解压指定文件
# 在bash配置文件中添加别名 alias cp='cp -i' alias mv='mv -i' alias rm='rm -i'