什么是Linux操作系统
= Linux内核 + GUN实用工具(一直在发展,且有多种实现) + 图形化界面
- Linux 不等于免费
- Debian、Red Hat Enterprise 就为商用版本
- 特定用途的 Linux 发行版
- Ubuntu ,学校和家庭免费
- Fedora, 企业级的Linux发行版本,它源于RedHat免费公开的源代码进行再发行
- CentOS,企业级的Linux发行版本,它源于RedHat免费公开的源代码进行再发行
- 运行交互命令的软件可以简称
CLI
- command-line interface,缩写:CLI;是在图形用户界面得到普及之前使用最为广泛的用户界面,它通常不支持鼠标,用户通过键盘输入指令
什么是Linux内核
Linux 内核的功能
-
系统内存管理
- EG: 虚拟化内存, 软件不需要占用实际的硬件内存,而是通过磁盘的交换区获得更多的“可用内存”
-
软件程序(进程)管理
- EG: 能够定义不同的事件来启动进程。比如系统启动事件、服务启动事件、建立好网络连接事件。
-
硬件设备管理
-
文件系统管理
- EG: 区别于windows,Linux会将文件都映射到
root 为根目录的虚拟目录,没有windows磁盘分区的概念。值得一提的是,Linux内核还能够读写其他操作系统的文件系统
GNU
- 本话题的 GNU 全称应该为 GNU is Not Unix
Unix操作系统是收费的。有收费的自然就有平替,GNU is Not Unix 组织开发出了一套完整的Unix实用工具,但是缺少用于支撑其运行的内核系统(这是书里的原文,我更偏向于理解缺少的是免费的内核系统才能做到完全的开源) - Linux内核拥抱更大的开源环境
GNU是一个技术组织,发起人是 Richard Stallman。GNU的哲学就是:软件源码看成人类共同拥有的知识财富,应该公开地自由交换、修改。在Richard Stallman精神感召下,林纳斯带着Linux加入了GNU组织,Linux本身遵循GPL版权可协议,同时又把GNU的很多软件集成了进去,从而形成了GNU/Linux。
GUN 实用工具
GNU/Linux shell,见面知意,它是基于Linux内核的,且是GNU组织开发的工具。shell 优化了操作系统体验,在缺少图形化界面(作为服务器甚至不需要图形化界面),可交互式得解析命令行尤为重要
图形化界面
没用过,暂时忽略。
文件操作相关注意点
内置的目录通配符
. 代表当前目录.. 代表当前目录的父级目录
/home/james 切换到/etc 可以使用 d ../../etc 解释:
表示先向上两级目录找到根目录,再向下找etc目录。 所以 /home/james 下使用 cd …/…/etc 会路由到 /etc目录
复制文件
cp xxx 区分复制单个文件和目录,目录用xxx/ 表示
cp /etc/xxx.conf /home/james/xxx.conf
可以替换为
cd /home/james
cp /etc/xxx.conf .
链接文件
软连接、硬链接可以认为是创建文件引用的不同策略。 EG: vi xxx 文件 可以通过链接文件路由到 vim 编辑器 ,关键是建立一个vi 的链接文件指向 vim ,这么一来,vi 和 vim 在系统中视为同义词。
- 软连接
- 链接文件和被链接的文件本质上是不同的文件。
EG: 不同存储设备之间文件,只能用软连接联系,如同操作系统想要链接U盘里的文件。 - 硬链接
- 链接文件和被链接的文件本质上是同一个的文件。 拥有相同的:
文件重命名
Linux世界的重命名,可以用mv (moving) 命令实现,本质是使用mv命令,移动文件同时有以下副作用:
- 不改变文件的inode编号。
- 移动文件时,可以修改文件名。
删除文件
删除文件,rm (remove) 是危险操作,建议都带上-i 参数。
rm -i xxx 表示删除文件时打印到CLI询问 ,
-i 也就是double check的过程,CLI 询问是否确认删除,按回车确认,避免误删文件 删除目录,rmdir 只能删空目录,非空目录可以使用rm -iR xxx (用rm删目录中的所有文件替代rmdir + rm 的使用)-R 代表递归删除-i 同样代表询问
新建文件
touch xxx 表示如果没有xxx文件,则新建xxx文件
- 值得关注的副作用
- touch 到的文件,如果存在,那么它的文件更新时间将更新。(内容依旧不变)
- touch 可以批量创建
touch TestDir/fileone Test/filetwo·= , ls后打印两个文件
新建目录
mkdir xxx
查看文件类型
file xxx
文本编辑
这个内容实在太多,光是vim的用法就能写一版文章了,目前只关注常用的看日志命令 功能上:
- less > more > cat > tail / head
这个很有趣的命名趣味,来自于谚语 less is more,所以less是增强版。
监控
这里的监控指看实时的 进程、内存、磁盘运行时情况
监控进程
ps 命令 p - process 进程, ps命令网络上有各种写法,历史的原因是它曾经有两个版本。Linux开发人员合并了这两个版本,同时也加入了自己的风格,于是就出现了三种风格。
[root@localhost ~]
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 2872 1416 ? Ss Jun04 0:02 /sbin/init
root 2 0.0 0.0 0 0 ? S Jun04 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S Jun04 0:00 [migration/0]
root 4 0.0 0.0 0 0 ? S Jun04 0:00 [ksoftirqd/0]
[root@localhost ~]
F S UID PID PPID C PRI Nl ADDR SZ WCHAN TTY TIME CMD
4 S 0 1 0 0 80 0 - 718 - ? 00:00:02 init
1 S 0 2 0 0 80 0 - 0 - ? 00:00:00 kthreadd
1 S 0 3 2 0 -40 - - 0 - ? 00:00:00 migration/0
1 S 0 4 2 0 80 0 - 0 - ? 00:00:00 ksoflirqd/0
1 S 0 5 2 0 -40 - - 0 - ? 00:00:00 migration/0
- GNU 的长选项命令比较新颖,会把进程的树状结构打印出来
[root@localhost ~]
4378 ? Ss 0:10 SCREEN
4897 pts/16 Ss 0:00 \_ -/bin/bash
25667 pts/16 S+ 0:00 | \_ git diff
25669 pts/16 S+ 0:00 | \_ less -FRSX
11118 pts/32 Ss+ 0:00 \_ -/bin/bash
11123 pts/32 S+ 0:00 \_ vi
监控端口号
netstat -tunlp |grep 6379
lsof -i
lsof -i:3306
监控磁盘空间
整理至网上
? ~ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 13G 26G 33% /
tmpfs 379M 0 379M 0% /run/user/1000
overlay 40G 13G 26G 33% /var/lib/docker/overlay2/8028b5c6e53c2f41bbef35ec8e017ad78acb633b2ecfe68ffeb43b593ccd1398/merged
? ~ du -sh *
11M apache-maven-3.6.3
9.1M apache-maven-3.6.3-bin.tar.gz
...
4.0K tmux-client-25977.log
1.2M tmux-server-25979.log
? ~ du -sh * | sort -hr
931M helix
886M kibana-7.12.0-linux-x86_64
152M redis-6.0.9
137M metricbeat-7.12.0-linux-x86_64
1.2M tmux-server-25979.log
1016K nginx-1.18.0.tar.gz
824K shtool-2.0.8
668K psweb
4.0K tmux-client-25977.log
4.0K readme.md
4.0K package-lock.json
4.0K deploy1.sh
数据压缩 / 归档
- 压缩和归档的区别:
压缩是根据算法减少文件的物理存储容量。 归档是把文件都放在一个指定的目录中,打成一个包,比如jar包、war包也是归档的一种格式。 归档比较常用的用途还有增量日志的写入。
压缩
- GNU的压缩工具:
- gzip软件包下的文件
- gzip 用于压缩
- gzcat 用于查看压缩过的文本文件的内容
- gunzip 解压文件
归档
tar -cvf test.tar test
tar -zcvf test.tar.gz test
tar -zcvf dist.tar.gz -C dist .
tar -tf test.tar
- 开源软件解压缩
tgz后缀代表文件是经过gzip压缩的tar文件,即又归档且压缩 提取内容:
tar -zxvf filename.tgz
Linux 环境变量
- 原书第4版P111: 注意变量赋值不要加空格
var="hi" 不要写成 var = "hi" - 让环境变量变得好管理,请遵从规范增量加入 原书第4版P119
结构化命令
脚本里面存在许多运算符重载,有许多很方便的语法糖,能力包括:
- 文件比较,存在性、文件新旧、是否目录、是否可读写、所有权
- 处理用户输入
- 事件处理,用户可以打断脚本的执行,会释放信号,可以在脚本中进行捕获
- Ctrl + C 会生成 SIGHINT 信号,意为中断进程
- Ctrl + Z 会生成 SIGINT 信号,意为暂停进程
- 其他见 原书第4版P350
运行脚本的环境
- 后台运行
在执行脚本后面加上 & - 非控制台下运行
在执行脚本语句前面加上 nohup
定时任务
原书第4版P364
流处理
其他shell脚本
参考资料
|