什么是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 --forest
 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
 
# 查看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

参考资料

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐