| 怀着一颗旧的心来到了一个新的地方,遇到了一群新的人。     | 为了活得体面,除了砥砺前行,似乎我说不出更多的话。


冯诺依曼体系结构

  • 计算机由5部分组成:运算器、存储器、控制器、输入设备、输出设备

操作系统的功能

  1. 管理硬件资源
  2. 提供运行应用软件的平台
  3. 为应用程序开发人员提供环境使应用程序具有更好的兼容性

用户空间和内核空间

  • 用户空间(user space):用户程序运行的空间,只进行简单运算,不能直接调用系统资源。只有通过系统调用(system call)才能向内核发出指令。
  • 内核空间(kernel space):为Linux内核的运行空间,可执行一切命令,调用一切系统资源

Linux哲学思想

  • 一切皆文件
  • 小型、单一用途的程序
  • 连接程序,使其完成复杂任务
  • 避免令人困惑的界面
  • 配置储存在文本中

Linux用户

  • root用户:uid为0,拥有系统管理的最高权限
  • 普通用户:uid非0

终端

  • 虚拟终端(/dev/tty#):tty
  • 串行终端(/dev/ttyS#):ttyS
  • 伪终端(/dev/pty/#):pts

内部命令和外部命令

  • 内部命令:shell自带,且通过某种命令形式提供
    help:显示内部命令列表
    enable COMMAND:启用内部命令
    enable -n COMMAND:禁用内部命令
    enable -a:显示所有启用和禁用的内部命令
    enable -n:显示所有禁用的内部命令
  • 外部命令:在文件系统路径下有对应的可执行程序文件 whereis:查看外部命令路径

hash缓存表

  • 系统初始时hash缓存表是空的,当执行外部命令看时到PATH里寻找该命令后并将其执行次数和绝对路径缓存在hash缓存表中,再次执行时到hash中取,可以加快执行速度 hash:显示缓存 hash -r:清除缓存

命令别名

  • 在命令行定义的别名仅对当前shell进程有效,注销后失效
  • 永久生效需要在配置文件中定义:
    ~/.bashrc:对当前用户有效
    /etc/bashrc:对所有用户有效
  • alias:显示当前shell可用的所有命令别名
  • alias NAME=‘COMMAND’:为COMMAND命令设置别名,alias相当于执行COMMAND命令
  • unalias:撤销命令别名
  • unalias -a:撤销所有别名

命令格式

COMMAND [-OPTIONS...] [-ARGUMENTS...]
OPTIONS:用于开启或关闭命令的某个功能
	-短选项
	--长选项
ARGUMENTS:命令的作用对象
  • 注意:
    1. 多个选项和多个参数之间用空白字符分分隔
    2. CTRL+c、CTRL+d:取消、结束命令
    3. 多个命令一起执行时可用;分隔
    4. 一个长度过长的命令可用/分成多行

日期和时间

  • Linux的两种时钟
    1. 系统时钟:由内核通过CPU频率进行计算
    2. 硬件时钟:存储在主板上CMOS的时钟

有关时间的命令

  • date:显示和设置系统时间 date +%s:从1970.1.1到当前时间所经历的秒数 date +%F:以YYYY-MM-DD格式显示当前时间
  • hwclock、clock:显示硬件时钟 -s、--hctosys:以硬件时钟为准,修改系统时钟 -w、--systohc:以系统时间为准,修改硬件时钟
  • cal:日历 -y:显示全年的日历 cal YYYY:显示YYYY年的日历

有关网络的命令

nmcli connection:查看网络设备状况
nmcli connection up/down DEV:启用/禁用指定设备

关机与重启

  • 关机:shutdown、halt、poweroff、init 0

      shutdown [OPTIONS...] [TIME] [WALL...]  
      OPTIONS:
      	-r:reboot  重启
      	-h:halt    关机
      	-c:cancle  取消
      TIME:
      	now:立刻
      	+m:相对时间,即m分钟后执行
      	hh:mm:绝对时间,即在hh:mm时执行
    
  • 重启:reboot、init6

用户登录信息查看命令

  • whoami:查看当前登录用户
  • who:显示当前连接的所有用户和使用终端
  • w:显示当前连接的用户、终端、登陆时间、运行程序及占用CPU

screen命令

  • 在远程登录主机时,可以将需要长时间执行的任务剥离,即可后台执行任务,避免因与远程主机意外断开连接导致用户失去对任务的控制;还可实现会话共享
    1. screen -S [SESSION]:创建新会话
      ctrl+a d:剥离当前会话
      exit:退出当前会话
    2. screen -ls:显示所有已经打开的会话
    3. screen -x [SESSION]:加入指定会话
    4. screen -r [SESSION]:恢复指定会话

echo命令

  • echo会将指定的字符串输出到标准输出,输出的字符串间会用空格隔开,并在末尾加上换行符

  • 选项:

    • -E:不支持\解释功能(默认此选项开启)
    • -n:不自动换行
    • -e:启用\解释功能
  • 显示变量:

    [root@CenrOS_7 ~]#echo "echo $PS1"
    echo [\t\e[1;32m][\u@\h \W]$[\e[0m]  #弱引用
    [root@CenrOS_7 ~]#echo ‘echo PS1’
    echo PS1   #强引用
    [root@CenrOS_7 ~]#echo `echo $PS1`
    [\t\e[1;32m][\u@\h \W]$[\e[0m]    #命令引用,``中的内容会被当做命令执行,执行结果作为echo命令的参数
    [root@CenrOS_7 ~]#echo ${SHELL}
    /bin/bash   显示当前使用shell
    
  • 括号扩展{ }:

    • eg:
    [root@CenrOS_7 ~]#echo a{1,4,7}
    a1 a4 a7
    

有关环境变量

  • 系统默认的环境变量都使用大写字母,可以使用echo $环境变量名称 的方法查看此环境变量的值;而要改变环境变量的值,可以使用以下两种方法:
    1. 使用export命令将值写入配置文件~/.bash_profile,再重读配置文件,永久生效
    [root@CenrOS_7 ~]#echo "VAR=NUM" >> ~/.bash_profile
    [root@CenrOS_7 ~]#source ~/.bash_profile
    [root@CenrOS_7 ~]#. ~/.bash_profile
    
    1. 在命令行界面使用export命令方式设置环境变量,重启或注销后失效
    [root@CenrOS_7 ~]#export VAR=NUM
    

bash常用快捷键

  • ctrl+l:清屏
  • ctrl+c:终止命令
  • ctrl+z:挂起命令
  • ctrl+a:光标移动至行首
  • ctrl+e:光标移动至行尾
  • ctrl+u:从光标处删除内容至行首
  • ctrl+k:从光标处删除内容至行尾
  • alt+r:删除当前命令行整行
  • ctrl+w:从光标处向左删除至单词
  • alt+d:从光标处向右删除至单词
  • ctrl+d:删除光标处的一个字符
  • ctrl+h:删除光标前的一个字符

其他

  • cat /proc/meminfo:查看内存情况
  • cat /proc/partion:查看分区情况

文件系统结构

  • /:Linux文件系统的入口,最高一级的目录
  • /boot:存放系统引导文件,如内核文件(vmlinuz),引导加载器(bootloader)等
  • /bin:所有用户使用的基本命令,不能关联至独立分区,系统启动即会用到的程序
  • /sbin:管理类的基本命令,不能关联至独立分区,系统启动即会用到的程序
  • /usr:存放程序的目录,例如命令和帮助文档,同时也是Linux官方软件包的安装目录
  • /etc:系统配置文件的存放目录,有些服务器的配置文件也存放在这
  • /dev:设备文件存储目录
  • /proc:操作系统运行时,进程信息和内核信息存放在这里,实际并不存在于磁盘上,也不占用空间,访问此目录相当于访问内存中的信息
  • /var:目录包含正常操作中被改变的文件
  • /lib:库文件存放目录
  • /home:普通用户的家目录
  • /mnt:此目录用于存放挂载设备的挂载目录,在/etc/fstab中定义具体设备挂载到具体目录
  • /lost+found:在ext2、ext3文件系统中,当系统意外崩溃或意外关机,会在此目录产生一些碎片文件,当下次系统启动时fsck工具会检查此目录并尝试进行修复
  • /opt:自定义软件包安装的目录
  • /root:root用户的家目录
  • /tmp:临时文件存放目录,用于存放用户运行程序所产生的临时文件
  • /srv:系统上运行的服务所用到的数据
  • sys:用于输出当前系统上硬件设备相关信息虚拟文件系统

Linux下的文件类型

  • - :普通文件
  • d:目录文件
  • b:块设备
  • c:字符设备
  • l:符号链接文件
  • p:管道文件
  • s:套接字文件

查看文件状态

  • 元数据:描述文件属性的信息
  • 数据:文件内容
	stat
		access time:访问时间(查看文件)
		modify time:修改时间(改变文件内容)
		change time:改变时间(元数据发生变化)

#目录与路径相关

  • pwd:显示当前工作目录 -P:显示真实物理路径 -L:显示链接路径(默认为此选项)
  • 相对路径与绝对路径:
    • 相对路径:指定相对于当前工作目录或某目录的位置
    • 绝对路径:指定完整文件所在的路径
  • 切换工作目录:
	cd /PATH/TO/SOMEWHERE
  • 切换至上一级目录:
	cd ..
  • 切换至当前用户的家目录:
	cd 
  • 在当前工作目录与上一次所在目录来回切换:
	cd -
  • 列出指定目录下的内容
	ls [OPTIONS][files_or_dirs]
		-a:显示所有文件,包括隐藏文件
		-l:长格式显示,包含更多信息
		-R:递归显示指定目录下的内容
		-ld:只显示目录和符号链接文件的信息
		-1:分行显示文件
		-S:将文件从大到小排序后显示
		-t:按mtime(修改时间)排序
		-u:配合-t选项,按atime从新到旧的顺序显示
		-U:按目录存放顺序显示
		-X:按文件后缀排序
  • 文件通配符
    • *:匹配零个或任意长度字符
    • ?:匹配任意单个字符
    • ~:当前用户家目录
    • ~USERNAME:USERNAME的家目录
    • ~+:当前工作目录
    • ~-:上一个工作目录
    • [0-9]:匹配数字范围
    • [a-z]:匹配小写字母范围
    • [A-Z]:匹配大写字母范围
    • [zxvb]:匹配列表中任意一个字符
    • [^zxvb]:匹配列表字符之外的单个字符
    • [:digit:]:任意单个数字
    • [:lower:]:任意单个小写字母
    • [:upper:]:任意单个大写字母
    • [:alpha:]:任意单个字母
    • [:alnum:]:任意单个字母和数字
    • [:blank:]:水平空白字符
    • [:space:]:水平或垂直空白字符
    • [:punct:]:标点符号
    • [:print:]:可打印字符
    • [:cntrl:]:控制字符(非打印)
    • [:graph:]:图形字符
    • [:xdigit:]:十六进制字符

创建空文件或改变文件的时间戳

touch [OPTIONS]...FILENAME
  • -a:仅改变atime(查看时间)和ctime(改变时间)
  • -m:仅改变mtime(修改时间)和ctime(改变时间)
  • -t:[[CC]YY]MMDDhhmm[.ss]:指定atime和mtime
  • -c:若文件不存在,则文件不会被创建

文件和目录的复制:

cp [OPTIONS]...[-T] SOURCE DEST
cp [OPTIONS]...SOURCE DIRECTORY
cp [OPTIONS]... -t DIRECTORY SOURCE

cp常用选项:

-i:覆盖前有提示
-n:不会覆盖,要注意两者顺序
-r、-R:递归复制目录及内部的所有文件
-d --no-dereference --preserv=links:不复制源文件,只复制链接名
--preserv[=ARRT_LIST]
	mode:权限
	ownership:属主、属组
	timestamp:时间戳
	links:链接名
	all:全部
-a:归档,相当于-dR --preserv=all
-p:等同于--preserve=mode,ownership,timestamp
-v: verbose:显示命令执行的过程细节
-u,--update:只复制源比目标更新或不存在的文件
-b:目标存在,覆盖前先备份一份名为FILENAME~的备份文件
--backup=numbered:目标存在,覆盖前先备份一份名为FILENAME+数字后缀的备份文件
  • 当SRC为文件时:
    • 若目标不存在,则创建DEST,DEST的文件内容同SRC
    • 若目标存在:
      • 且DEST是文件时,则将SRC的内容覆盖到DEST(建议执行cp命令时使用-i选项)
      • 且DEST为目录时,则在DEST下创建一个与SRC文件同名的文件,并将SRC的内容覆盖到此文件中
    • 当SRC为多个文件时,DEST必须存在且为目录,否则会报错
  • 当SRC为目录时(此时应使用-r选项):
    • 若DEST不存在,则创建指定目录,并将SRC下的所有文件复制到所创建的目录中
    • 若DEST存在:
      • 若DEST为文件,报错
      • 若DEST为目录,在DEST下创建与SRC同名的目录,并将SRC下的所有文件复制到新创建的目录下

移动或重命名文件

mv [OPTIONS]...[-T] SOURCE DEST
mv [OPTIONS]...SOURCE DIRECTORY
mv [OPTIONS]... -t DIRECTORY SOURCE

mv常用选项:

  • -i:交互式
  • -f:强制性
  • -b:目标存在时,覆盖前先备份,备份文件名为FILENAME~

删除命令

rm [OPTIONS]...FILE...

常用选项:

  • -i:交互式
  • -f:强制性
  • -r:递归删除指定目录下的所有内容
  • --no-preserv-root:删除/ (作死选项)
作死示例:rm -rf /*

目录操作相关的命令

  • mkdir命令:创建目录
    • -p:自动创建所需目录,当路径出现不存在的目录时,自动创建父目录
    • -v:显示详细信息
    • -m MODE:创建目录时直接指定权限
  • rmdir命令:删除目录
    • -p:递归删除父目录(为空)
    • -v:显示详细信息
  • rm -r:递归删除目录树
  • tree命令:显示目录树(系统未预装,使用yum install -y tree安装)
    • -d:只显示目录
    • -L level:指定显示的层级目录
    • -P pattern:只显示与指定PATTERN匹配的路径

索引节点:inode

  • inode(index node)表中包含文件系统所有文件列表,inode表所占空间大约是磁盘总容量的1%
  • inode是一种数据结构,每个inode保存了一个文件的元数据,但不包括数据和文件名
    • 使用df命令可以查看设备的挂载情况以及inode的使用情况
    • 使用stat命令可以查看某个文件的元数据信息
  • 元数据:
    • 文件类型,权限,UID,GID
    • 链接数(指向此文件名的路径名称个数)
    • 文件的大小和时间戳
    • 指向磁盘上文件的数据块指针

目录与inode

  • 文件的引用实际上是对inode的引用
  • 目录本质是目录下的文件名和文件inode号之间的映射
  • 一个目录文件的内容就是一个该目录下所有文件的目录项的列表
  • 引用文件是通过文件名来实现的

cp命令与inode

  • 在执行cp命令时:系统分配了一个空闲的inode号,在inode表中新建一个新的条目,在目录中创建一个目录项,并将其名称于inode号关联起来,再拷贝数据生成新文件

rm命令与inode

  • 减少链接数,释放inode号以便重利用
  • 把数据块放在空闲列表中(数据并未被马上删除,但当有文件使用此数据块时,这些数据会被新数据覆盖)
  • 同时删除目录项

mv命令与inode

  • 若mv命令的源和目标在同一文件系统上:
    • 用新的文件名创建新的目录项
    • 删除旧目录条目对应的旧的文件名不
    • 不影响inode(除时间戳),数据的位置其实并未发生改变
  • 若mv命令的源和目标不在同一文件系统上,mv命令实际为rm命令和cp命令的组合使用

硬链接和软链接

硬链接:

ln FILENAME [LINKNAME]
  • 创建硬链接会增加额外的记录项用以引用文件
  • 多个硬链接对应于同一文件系统的同一物理文件
  • 他们共同引用同一个inode号
  • 创建时链接数递增
  • 无法对目录执行
  • 当删除文件时:
    • 链接数会递减
    • 至少要有一个链接数存在,否则文件不存在
    • 链接数为零时,文件被删除
  • 硬链接不能跨越分区或磁盘

软连接(符号链接):

ln -s FILENAME [LINKNAME]
  • 软链接指向的时另一个文件
  • ls -l命令可显示链接的名称和引用的文件
  • 符号链接的内容是它所引用的文件的文件名
  • 可以对目录执行
  • 软链接可以跨分区
  • 指向的时另一个文件的路径;软链接的大小是它所指向路径的字符串的长度;软链接增减时不影响目标文件inode的引用计数