本节讲述了linux的哲学思想,自由软件含义和linux的终端类型,linux的文件系统和获取帮助的方法,目录相关命令以及FHS
- 一切皆文件
- 由众多目的单一的应用程序组成,一个应用程序只做一件事,且做好
- 组合目的单一的程序完成复杂任务
- 文本文件保存配置信息
- 尽量避免捕获用户接口
- 提供机制,而非策略
理解字符和数值的区别
在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)、以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示。
ASCII(American Standard Code for Information Interchange)美国信息交换标准代码
ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号, 以及在美式英语中使用的特殊控制字符。
一个十进制的13如果存为ascii码,作为字符需要2字节,而存为数值为1110只需要4位,一个字节
- 自由使用
- 自由学习和修改
- 自由分发
- 自由创建衍生版
linux是一个多用户的操作系统,允许多个用户同时登陆,那么不同用户登陆时的终端类型可能不尽相同,早期大部分都是真实的物理终端来登陆,这种终端称为物理终端,通过控制台console来连接,另外一种通过串口连接终端的类型叫做串行终端。
还有一种终端叫做虚拟终端,在linux中你可以通过Ctrl+Alt+[F1-F6]来对6个虚拟终端进行切换,Ctrl+Alt+F7可以启动图形界面,但取决于是否启动了图形服务,不同的发行版可能对应的虚拟终端和图形界面的按键不同。
当我们在虚拟终端中开启图形服务如startx,图形服务就在前台运行,不释放命令提示符,你无法继续进行其他任务,也没有办法输入,停止当前的图形任务,可以使用组合键Ctrl+c来中断。
如果想要图形服务一直运行又想进行其他工作的话就需要让图形服务在后台运行,只需要在命令后加上&符号即可。
在图形界面运行的模拟终端叫做伪终端,远程登陆也属于伪终端。
所以终端类型有:物理终端,串行终端,模拟终端和伪终端
在终端中使用shift+Pg UP/Pg Dn来进行上下换页,前提是没有超出缓存,超出缓存的将无法显示
使用tty命令可以查看当前终端对应的终端设备文件
伪终端:pts,/dev/pts/数字
虚拟终端:tty,/dev/tty/数字
物理终端:console,/dev/console/数字
串行终端,ttyS,/dev/ttyS/数字
直接键入tty,会显示当前终端对应的终端设备文件
使用who命令可以查看当前系统中登陆的所有用户及其信息
who am i命令可以查看当前终端登录的用户
shell中文是外壳的意思,在计算机中shell是用户和系统内核之间的桥梁
shell分为GUI和CLI,GUI就是我们熟悉的windows界面,而CLI是命令行界面
大部分的linux发行版中,都默认使用bash作为shell,当登陆系统后bash会给出命令提示符,这个提示符会提示当前登录的用户和主机名以及工作目录,管理员用户会显示为#号,普通用户则显示为$
你会发现这个命令提示符是会根据用户和工作目录等变化的,实际上是有bash的环境变量ps1决定的
变量实际上就是命名的内存空间
使用echo命令可以查看bash的环境变量
echo可以接字符串打印至屏幕也可以将引用的变量打印出来,引用变量时要使用$符号
echo $ps1
[\u@\h \W]\$
上面的\u表示用户名,\h表示主机名,\W表示工作目录的路径基名
linux是以层次化的方式来组织文件的,所有的文件都从根开始,是一个倒置的树形结构
linux在启动时,总会将硬盘的某个分区的linux文件首先载入到内存中,这个分区就作为linux的起始分区,这个分区就被关联到根路径上,所以被称为根分区,放在这个分区上的所有文件都直接被识别成根分区下的文件。根是由内核直接访问的。
多个硬盘分区中,只有根分区可以作为入口访问,其他分区可以通过关联在根分区下的目录来实现访问,这个关联的过程也被称为挂载,反之称为卸载。
用户登录系统后默认所在的目录是用户具有所有操作权限的目录,这个目录也被称为用户的主目录,home或者家目录
用户当前所在的目录被称为工作目录,使用cd命令来切换目录,一般使用格式是:cd 目标路径
在linux使用/作为路径分隔符,路径分为相对路径和绝对路径
- 相对路径:从当前位置开始
- 绝对路径:从根目录开始
目录在windows称文件夹,在linux有一切皆文件的思想,实际上目录是路径映射符
路径的基名是一个路径的最后一部分使用basename 路径
取路径基名,使用dirname 路径
取目录名
- 文件名可以使用除/以外的任意字符,总长度不超过255个字符
- linux是严格区分大小写的
linux命令一般由三部分组成,COMMAND OPTIONS ARGUMENTS
-
COMMAND:命令名称
-
OPTIONS:命令选项,用来调整命令的执行特性
选项可以有多个,用空格分开
选项有长选项和短选项,短选项可以合并使用
有些选项也需要参数
-
ARGUMENTS:命令参数,命令的作用对象,多个参数使用空格分开
bash实际上也是一个程序,那bash自身可以实现的命令就是内置命令,还有一部分命令在文件系统上的某个位置有一个与命令名称对应的可执行文件,这种命令就是外部命令
使用type命令可以判断命令的类型
- shell通过一个变量设定了多个路径,当用户输入命令时,shell会自动到这些路径,由第一个到最后一个查找与命令名称相同的可执行文件
逐个查找效率肯定是不高的,所以就有了hash哈希表,加快查找速度,使用hash命令查看
使用which COMMAND
来查看命令的具体路径
使用help 内部命令
即可
使用外部命令 --help
或者man 外部命令
手册中有几个主要的段落分别为NAME,SYNOPSIS,OPTIONS,EXAMPLES,DESCRIPTION
实际上man命令在指定目录上查找对应命令的压缩手册,先解压后显示
使用方法为:man [段落] 命令
手册中特殊字符的含义
[]:可选的部分
{a|b}:分组,a和b作为一个使用单元
|:或者,只能选择一个
<>:必不可少的部分
...:同类内容可以出现多个
-
翻屏:空格键向文档尾部翻一屏;B键向文档头部翻一屏
-
换行:回车向文档尾部翻一行;K键向文档头部翻一行
-
翻半屏:CTRL+D(down)向文档尾部翻半个屏幕;CTRL+U(up)文档头部翻半个屏幕
-
文本搜索
-
从文档首部向尾部搜索
/KEYWORD
-
从文档尾部向首部搜索
?KEYWORD
-
查看下一个被匹配到的关键字、
n:和命令方向一致
N:和命令方向相反
-
-
退出手册:q
-
快速跳转到文档首部:1G
-
快速跳转到文档尾部:G
man不仅能为命令提供帮助手册,还可以为其他诸如程序配置文件格式,系统调用等提供帮助,为了避免不同内容帮助重名麻烦,所以手册分为不同的段落
man命令手册的8个段落
- 用户命令
- 系统调用
- 库调用
- 设备文件
- 文件格式
- 游戏
- 杂项
- 管理命令
查看某关键字在哪些段落中有帮助有两种方法
- whatis 关键字:精确查找,如果whatis的数据库尚未生成,可以使用makewhatis手动进行
- man -k 关键字:模糊查找
查找时如果没有指定段落则显示第一次被查找到的段落
在线文档可以进行跳转等功能,可以作为man的补充
许多程序也自带文档例如README,INSTALL等,多在/usr/share/doc
利用Google等搜索引擎来寻求帮助
可以查找红帽的官方文档
关机常用的是shutdown命令,但这是一个管理员命令,在红帽命令行中键入su,输入管理员密码即可切换为管理员命令。shutdown的一般使用格式为:shutdown [OPTIONS...] [TIME] [WALL...]
常见的选项有:-c中断关机;-h关机后关闭电源;-r重启
时间指定可以有:now立即执行;+10在10分钟后执行;9:29指定具体时间执行
当执行shutdown后shell不释放命令提示符,如果需要后台运行需要在命令后加上& (指定时间在一天后也会立即冻结命令提示符和新的登录么?)
系统关机前使用shutdown命令,系统管理员会通知所有登录的用户系统将要关闭。并且login指令会被冻结,即新的用户不能再登录
直接关机或者延迟一定的时间才关机都是可能的﹐还可能重启。这是由所有进程〔process〕都会收到系统所送达的信号〔signal〕决定的。这让像vi之类的程序有时间储存目前正在编辑的文档﹐而像处理邮件〔mail〕和新闻〔news〕的程序则可以正常地离开等等。 shutdown执行它的工作是送信号〔signal〕给init程序﹐要求它改变runlevel。Runlevel 0被用来停机〔halt〕﹐runlevel 6是用来重新激活〔reboot〕系统﹐而runlevel 1则是被用来让系统进入管理工作可以进行的状态﹔这是预设的﹐假定没有-h也没有-r参数给shutdown。要想了解在停机〔halt〕或者重新开机〔reboot〕过程中做了哪些动作﹐你可以在这个文件/etc/inittab里看到这些runlevels相关的资料。
reboot,halt,poweroff
这三个命令也都是用来关机和重启的,他们都是调用了shutdown命令如果使用的-f选项则是不调用shutdown而是强制执行
date命令可以(格式化)显示当前的日期和时间,也可以对日期时间进行设定
格式化显示 date [OPTION]... [+FORMAT]
年%y,四位年份使用Y
月%m
日%d
时%H
分%M
秒%S
%D same as %m/%d/%y
%F same as %Y-%m-%d; full date
%T same as %H:%M:%S;time;
%s seconds since 1970-01-01 00:00:00 UTC 1970年为Unix元年,不同时区的时间戳是一样的
%b|%h英文简写的月
[simon@localhost ~]$ date +%F-%H-%M:%S
2017-01-05-15-07:41
日期设定date [-u|--utc|--universal][MMDDhhmm[[CC]YY][.ss]]
[root@localhost simon]# date 050112302018.00
Tue May 1 12:30:00 CST 2018
[root@localhost simon]# date
Tue May 1 12:30:03 CST 2018
硬件时间和系统时间
硬件时间hwclock是主板上的时间,系统时间是内核在开机后根据cpu频率计算的时间,二者相互独立,开机时内核读取硬件时间,然后自己运行。
以硬件时钟为准:hwclock -s
以系统时钟为准:hwclock -w
另外使用cal命令可以查看日历
打开目录
前往目录使用cd 目标目录
,使用cd ~
可以到用户家目录,直接使用cd命令也可以回到当前用户的家目录,使用cd -
上一次所在的目录
在相对路径中,.代表当前目录,..代表当前目录的父目录,可以使用cd ..
打开当前目录的父目录
pwd用来显示当前所在的目录
创建目录
使用mkdir进行创建目录,有两个常见的选项-p先创建父目录,-v显示详细信息
命令行展开是bash的一个特性,使用{}将要展开的项目用逗号分开,在创建目录中很常用
删除目录
使用rmdir删除空文件夹,-p选项只要是空目录就删除直到删除到非空目录
shell的引用有三种有强引用, 弱引用和命令替换
强引用变量不会进行替换,原封不动的输出,使用双引号“”
弱引用能够执行变量替换,使用单引号''
命令替换是引用命令的执行结果,使用反引号``
变量或变量替换还可以使用${变量}
在bash使用history可以查看在当前终端中键入的历史命令,使用上下箭头来查看历史命令
当前shell的命令会保存在缓冲区,在shell退出时,会被保存在用户家目录中的隐藏文件.bash_history(在linux系统中以点号开头的数字为隐藏文件,使用ls -a命令可以查看有文件包括隐藏文件)
!数字:执行history中指定的命令
!-数字:执行history中倒数指定的命令
!!:执行上一条命令
!$:填写上一个命令的最后一个参数,实际上可以使用esc键,然后键入.即可填充
!string:执行最近一次可以匹配到string的命令
选项
-b 数字:删除指定的命令
-c:清空历史列表
-a:追加当前shell的命令历史到历史文件中
命令历史的环境变量
HISTSIZE:命令历史可以保存的命令个数(为什么会超过1000个?从命令历史文件读取到的)
HISTFILE:命令历史文件
HISTFILESIZE:命令历史文件可以保存的历史命令个数
变量名=值
注意:变量在赋值时不能使用$符号
变量名只能包括数字、字母和下划线;并且不能以数字开头
变量名区别大小写
HISTCONTRAL:控制命令历史的生成 HISTCONTRAL=ignoredups/ignorespace
ignoredups:忽略连续的重复命令
ignorespace:忽略以空格开头的命令
ignoreboth:同时具有以上两个值的特性
/bin:可执行程序,所有用户都可以使用的
/sbin:管理员可以执行的程序
usr/bin
usr/sbin
usr/local/bin
usr/local/sbin
根目录下的bin和sbin存放的是系统自身运行所需要的二进制文件,在usr下的是为了系统基本运行所需要的程序,local是用来安装第三方程序的
/boot:系统引导文件,如内核,ramfs文件,BootLoader(grub)
/dev:设备文件的存放目录,设备文件是特殊文件,是一种文件类型
/etc:配置文件的存放目录
/etc/sysconfig
/etc/init.d:系统服务脚步
/home:在此目录下有一个与用户名同名的目录,作为用户的家目录
/root:管理员的家目录
/lib和/lib64:库文件
/media:专用的挂载位置,通常用来挂载便携式设备
/mnt:专用的挂载位置,通常用来挂载额外的存储设备
/misc:杂项,备用目录,没啥用
/opt:备用目录,通常用来安装第三方软件
/proc:内核参数的映射,以文件的形式显示,伪文件系统
/sys:系统级别的用于配置硬件设备相关的参数,伪文件系统
/srv:为服务提供数据存放的位置,
/tmp:临时文件,有效期为30天
/usr:可以在遵循fhs的系统上共享使用,s是share,r是readonly
/usr/include:头文件
/var:频繁发生变化的文件