| 怀着一颗旧的心来到了一个新的地方,遇到了一群新的人。 | 为了活得体面,除了砥砺前行,似乎我说不出更多的话。
冯诺依曼体系结构
- 计算机由5部分组成:运算器、存储器、控制器、输入设备、输出设备
操作系统的功能
- 管理硬件资源
- 提供运行应用软件的平台
- 为应用程序开发人员提供环境使应用程序具有更好的兼容性
用户空间和内核空间
- 用户空间(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:命令的作用对象
- 注意:
- 多个选项和多个参数之间用空白字符分分隔
- CTRL+c、CTRL+d:取消、结束命令
- 多个命令一起执行时可用;分隔
- 一个长度过长的命令可用/分成多行
日期和时间
- Linux的两种时钟
- 系统时钟:由内核通过CPU频率进行计算
- 硬件时钟:存储在主板上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命令
- 在远程登录主机时,可以将需要长时间执行的任务剥离,即可后台执行任务,避免因与远程主机意外断开连接导致用户失去对任务的控制;还可实现会话共享
- screen -S [SESSION]:创建新会话
ctrl+a d:剥离当前会话
exit:退出当前会话 - screen -ls:显示所有已经打开的会话
- screen -x [SESSION]:加入指定会话
- screen -r [SESSION]:恢复指定会话
- screen -S [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 $环境变量名称 的方法查看此环境变量的值;而要改变环境变量的值,可以使用以下两种方法:
- 使用export命令将值写入配置文件~/.bash_profile,再重读配置文件,永久生效
[root@CenrOS_7 ~]#echo "VAR=NUM" >> ~/.bash_profile [root@CenrOS_7 ~]#source ~/.bash_profile [root@CenrOS_7 ~]#. ~/.bash_profile
- 在命令行界面使用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的引用计数