目录

  • 什么是Linux操作系统
  • 什么是Linux内核
    • Linux 内核的功能
    • GNU
      • GUN 实用工具
    • 图形化界面
  • 文件操作相关注意点
    • 内置的目录通配符
    • 复制文件
    • 链接文件
    • 文件重命名
    • 删除文件
    • 新建文件
    • 新建目录
    • 查看文件类型
  • 文本编辑
  • 监控
    • 监控进程
    • 监控端口号
    • 监控磁盘空间
  • 数据压缩 / 归档
    • 压缩
    • 归档
  • Linux 环境变量
  • 结构化命令
  • 运行脚本的环境
  • 定时任务
  • 流处理
  • 其他shell脚本
  • 参考资料

什么是Linux操作系统

= Linux内核 + GUN实用工具(一直在发展,且有多种实现) + 图形化界面

  • Linux 不等于免费

    • Debian、Red Hat Enterprise 就为商用版本
  • 特定用途的 Linux 发行版
    • Ubuntu ,学校和家庭免费
    • Fedora, 企业级的Linux发行版本,它源于RedHat免费公开的源代码进行再发行
    • CentOS,企业级的Linux发行版本,它源于RedHat免费公开的源代码进行再发行
  • 运行交互命令的软件可以简称 CLI
    • command-line interface,缩写:CLI;是在图形用户界面得到普及之前使用最为广泛的用户界面,它通常不支持鼠标,用户通过键盘输入指令

什么是Linux内核

  • 面向程序员的用户界面。

  • 先关注内核给操作系统提供了什么功能,再想到能补充什么功能让Linux成为一个真正的操作系统

Linux 内核的功能

  • 系统内存管理

    • EG: 虚拟化内存, 软件不需要占用实际的硬件内存,而是通过磁盘的交换区获得更多的“可用内存”
  • 软件程序(进程)管理

    • 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 优化了操作系统体验,在缺少图形化界面(作为服务器甚至不需要图形化界面),可交互式得解析命令行尤为重要

  • shell 软件有多种

    • bash (用的较多)
    • zsh
    • tcsh

图形化界面

没用过,暂时忽略。

文件操作相关注意点

内置的目录通配符

  • . 代表当前目录
  • .. 代表当前目录的父级目录
    • /home/james 切换到/etc 可以使用 d ../../etc
      解释:

    表示先向上两级目录找到根目录,再向下找etc目录。
    所以 /home/james 下使用 cd …/…/etc 会路由到 /etc目录

复制文件

cp xxx
区分复制单个文件和目录,目录用xxx/ 表示

  • 用通配符 . 简化cp命令
cp /etc/xxx.conf /home/james/xxx.conf
可以替换为
cd /home/james
cp /etc/xxx.conf .

链接文件

软连接、硬链接可以认为是创建文件引用的不同策略。
EG: vi xxx 文件 可以通过链接文件路由到 vim 编辑器,关键是建立一个vi 的链接文件指向 vim,这么一来,vivim 在系统中视为同义词。

  • 软连接

    • 链接文件和被链接的文件本质上是不同的文件。
      EG: 不同存储设备之间文件,只能用软连接联系,如同操作系统想要链接U盘里的文件。
  • 硬链接
    • 链接文件和被链接的文件本质上是同一个的文件。 拥有相同的:

      • inode编号
      • 文件大小

文件重命名

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 ~]# ps aux
#查看系统中所有的进程
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 ~]# ps -le
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 ~]# ps --forest4378 ?        Ss     0:10 SCREEN4897 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# 查看3306占用情况
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,
    • 件后缀名为.gz
  • gzip软件包下的文件
    • gzip 用于压缩
    • gzcat 用于查看压缩过的文本文件的内容
    • gunzip 解压文件

归档


#仅归档,不压缩
tar -cvf test.tar test
#归档后,以gzip压缩 在参数f后面的压缩文件名是自己取的,习惯上用tar来做,如果加z参数,则以tar.gz 或tgz来代表gzip压缩过的tar file文件
tar -zcvf test.tar.gz test  #注意最后有一点,通过 -C 参数指定目录,可以去掉打包内容包含相对目录,打包内容只包含 dist/* 下的文件内容,不包含 dist 目录
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

流处理

  • sed
  • gawk
    • 这个更好支持正则表达式 原书第4版P509

其他shell脚本

  • zsh
    内置了网络编程的能力 原书第4版P548

参考资料

【Linux】《Linux命令行与shell脚本编程大全》阅读笔记相关推荐

  1. 《Linux命令行与shell脚本编程大全》笔记一

    第一章 初始 Linux shell Linux内核主要四种功能: 1.系统内存管理 2.软件程序管理 3.硬件设备管理 4.文件系统管理 shell:交互工具. 第三章 基本的bash shell ...

  2. Linux命令行与Shell脚本编程大全读书笔记

    Linux内核4大主要功能: 内存管理 进程管理 设备管理 文件系统管理 Linux系统启动的进程和脚本管理 1./etc/inittab   管理系统开机时会自动启动的进程 2./etc/init. ...

  3. 《Linux命令行与shell脚本编程大全》笔记3

    sed进阶 多行命令 sed的局限在于只能针对单行数据执行操作.在sed读取数据流时,它会基于换行符的位置将数据分成行. 如果你正在查找一个短语Linux System Administrators ...

  4. Linux命令行与shell脚本编程大全:第2版

    <Linux命令行与shell脚本编程大全:第2版> 基本信息 作者: (美)布卢姆(Blum,R.) 布雷斯纳汉(Bresnahan.C.) [作译者介绍] 译者: 武海峰 丛书名: 图 ...

  5. 《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---34

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下: 转载于:https://www.cnbl ...

  6. Linux命令行与shell脚本编程大全(第3版)

    作者:[美] 布鲁姆(Richard Blum),布雷斯纳汉(Christine Bresnahan) 著,门佳,武海峰 译 出版社:人民邮电出版社 品牌:iTuring 出版时间:2016-08-0 ...

  7. Linux_《Linux命令行与shell脚本编程大全》第十八章学习总结

    时间:2017年12月04日星期一 说明:本文部分内容均摘取自书籍<Linux命令行与shell脚本编程大全>,版权归原作者所有.<Linux命令行与shell脚本编程大全>( ...

  8. 《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---02

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下: 转载于:https://www.cnbl ...

  9. 《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---20

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下: 转载于:https://www.cnbl ...

  10. 《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---43

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下: 转载于:https://www.cnbl ...

最新文章

  1. Ajax技术群英会,火热报名中!
  2. UOJ46. 【清华集训2014】玄学
  3. windows备份0x80070422错误解决方法
  4. Unity3d烘焙常见黑斑解决方法(适用5.x、2017、2018、2019版)
  5. Ollydbg使用教程学习总结(四)
  6. Java String和Date的转换 Date类型操作
  7. 人机协作机器人发展趋势_发那科童梁:机器人化不是时髦!有效的人机协作投资回报率更高...
  8. C语言序列是否有序、序列中删除指定数字、序列中整数去重、有序序列合并问题
  9. wsl用户帐户没有必要的权限_Windows的Linux子系统(WSL)即将带来图形化应用
  10. 利用Linux命令行进行文本按行去重并按重复次数排序
  11. springboot响应结果超长(7.8M)浏览器无法接收
  12. linux nc命令入门
  13. Pop3_解决PKIX:unable to find valid certification path to requested target 的问题
  14. Maven具体解释之------maven版本号管理
  15. linux apache安全,基于Linux平台的Web安全技术研究——Apache安全.doc
  16. 2021年必备procreate笔刷推荐下载
  17. ie ajax十分卡,解决jquery .ajax 在IE下卡死问题的解决方法
  18. 关联规则:策略挖掘中必不可少的算法
  19. HJL-E6/A DC220V数字式【电流继电器】
  20. 关于Mac本中的Pycharm如何设置字体大小?

热门文章

  1. android 大量代码中 grep 太慢,ReactNative 性能 - 闪电教程JSRUN
  2. 【心理咨询师考试笔记】操作技能(三)——咨询基本技能
  3. 信号量哲学家问题java_利用AND信号量机制解决哲学家进餐问题
  4. C++中string.size()函数 踩坑
  5. 基于 NCC/灰度信息 的模板匹配算法(QT + Opencv + C++),10ms内获取匹配结果,部分源码
  6. C++四大特性——多态 的总结
  7. Java设计模式之模板方法模式(UML类图分析+代码详解)
  8. spring加载xsd文件
  9. Eclipse - subclipse svn
  10. GDOI 2016 总结