Linux的好处
一切都是一个文件,容易看(包括硬件,文本,二进制,源代码)
系统中拥有小型,单一用途的程序。(一个程序只负责做好自己的本职工作)
当遇到复杂任务,通过不同功能用途的程序组合起来完成。
避免令人困惑的用户界面就是没有复杂的图形界面。
不在乎后缀名,有没有都无所谓,不是通过后缀名来定义文件的类型。
shell
shell是Linux系统中后台运行的一种特殊程序也可以理解成一种特殊的软件,提供了用户与内核进行交互操作的一种接口。
过程为
用户使用应用程序发布指令比如 (使用浏览器访问网页)
shell去通知操作系统需要进行什么样的操作(相当于解释层)
内核相当于操作系统去指挥硬件
硬件才能工作,否则无法交互
Linux系统内分为两种命令:
内部命令与外部命令
区别:
内部:
集成于Shell解释器程序内部的一些特殊指令,也称为内建(Built-in)指令
属于Shell的一部分
没有单独对应的系统文件
自动载入内存,可以直接使用
外部:
Linux系统中能够完成特定功能的脚本文件或二进制程序
属于Shell解释器程序之外的命令
每个外部命令对应了系统中的一个文件
必须知道其对应的文件位置,由Shell加载后才能执行
hash缓存空间
运行外部命令时会加入hash缓存表中,下次输入时会更快反应
将缓存的外部命令移到其他默认的目录中,无法再次使用,需要清掉hash值之后 ,才可以继续使用。
hash -d 加缓存里的命令 单独删除
hash -r 删除所有
命令行格式
在 Linux操作系统中,凡是在字符操作界面中输入能够完成特定操作和任务的字符串都可以称为命令 严格来说,命令通常只代表实现某一类功能的程序的名称。
格式为:
命令字 空格 [选项] 空格 [参数]
命令字:是整条命令中最关键的一部分 唯一且确定
选项: 短格式选项:使用“-”符号引导 通常 一个字母。长格式选项:使用“--”符号引导 通常完整的单
参数: 命令字的处理对象 可以是文件名、目录(路径)名或用户名等内容 个数可以是零到多个
;分号用来隔开多个命令
编辑Linux命令行的辅助操作
| 快捷键 | 功能 |
|---|---|
| Tab 键 | 自动补齐(两次可以显示所有选项) |
| 反斜杠“\” | 强制换行或转义 |
| Ctrl+a | 光标移到最前 |
| Ctrl+e 或 end 键 | 光标移到最后 |
| Ctrl+U | 清空至行首不包括当前光标处的 字符 |
| Ctrl+K | 清空至行尾包括当前光标处的字符 |
| Ctrl+w | 从当前光标删除到开头 |
| ALT+d | 从当前光标删除末尾 |
| Ctrl+l | 清屏 |
| Ctrl+c | 取消本次命令编辑 |
| Ctrl+s/Ctrl+q | 锁屏/解锁 |
| 向上下箭头 | 回看执行过的命令 |
帮助命令
help
格式说明
- []表示可选项
- CAPS或<>表示可变化的数据
- ...表示一个列表可加多个一个或多个
- x|y|z 表示或的意思
- -abc 是-a -b -c (有些命令选项有先后顺序) 多个 -abc 一般而言是没有顺序先后 (绝大多数是没有的,只有少数分先后
help+命令 是内部命令帮助
命令--help 是外部命令帮助
man
man分九个章节默认打开第一章节(menu菜单 manual手册)
区段1:用户指令
区段2:系统调用
区段3:程序库调用
区段4:设备
区段5:文件格式 shadow passwd fstab
区段6:游戏
区段7:杂项 v 区段8:系统指令
区段9:内核内部指令
区段n:Tcl或Tk指令
info也可以查看相关的帮助信息
查看当前所在位置
pwd(print work directory)
CD 切换至命令
cd 目标位置 change directory
| 命令 | 效果 |
|---|---|
| cd cd ~ | 若不指定目标位置,切换到当前用户的家目录 |
| cd - | 到前一次目录 |
| 一个点号“.”开头(当前目录) | 表示以当前的工作目录 |
| 两个点号“..”开头(上一级) | 表示以当前目录的上一级目录 |
| “~+用户名” | 表示指定用户的家目录 |
相对路径与绝对路径
以/ 为开头的路径为绝对路径,需要从根开始逐级输入
例:/etc/passwd
不以/ 为开头的路径 ,从当前所在位置开始
例 :(/mnt) ./(/根,..代表上一级目录)../etc/passwd
ls 显示文件大小
list 显示当前文件夹
ls [选项] [文件或目录… ]
- -a 显示隐藏文件
- -d 只显示当前目录信息,不显示目录下的文件
- -h 人性化显示
- -R 递归
- -t -l 长格式显示, 显示详细信息 按时间排序
- -r 倒序
- -S 按大小
- -i 显示inode号
颜色表示的文件类型:
- 黑色数据文件 普通文件
- 绿色 可执行文件
- 黄色 块设备文件硬件设备(硬盘)
- 红色 压缩包
- 蓝色 文件夹
- 天蓝色 连接文件(快捷方式)
文件类型
- f(-)普通文件
- d 目录文件directory
- l 符号链接文件link
- b 块设备block 比如直接读1块 /dev 4k (512*8(扇区)=4096字节=4k)
- c 字符设备character 一个字符一个字符读取 /dev/zero (/dev/null)
- p 管道文件pipe 两个软件联系 A-管道文件-B A 写 B 读 单向的
- s 套接字文件socket 可以双向的
file命令可以识别文件类型,文件后缀无法判断文件类型,文件后缀无所谓
通配符
用途:匹配文件名 (文件夹)
| 符号 | 效果 |
|---|---|
| ? | 匹配一个字符 f?.txt |
| * | 匹配所有非隐藏的字符无论多长多短,但不匹配 "." 开头的文件,即隐藏文件 |
| {1..10} | 1到10 |
| {a..z} | a b c ...z |
格式为 例:ls *
du *
注:无法匹配隐藏文件名
alias 别名
别名命令
格式为:alias 命令别名=‘命令’
unalias 别名命令 删除别名
\加别名命令 显示原始命令
格式为:alias myvim='vim /etc/sysconfig/network-scripts/ifcfg-ens33' ,输入后再次输入myvim命令即可打开后面引号的命令,引号必须要加
永久修改
- 在/etc/.profile会影响全部用户
- /root/.bashrc只影响当前用户
补充:绝对路径>别名>内部>hash>外部命令(先查找别名在查找内部命令,缓存最后外部)
du(disk usage) 查看占磁盘大小
查看当前所在文件夹占用了磁盘的多少单元块。默认1单元块为4K,不满4K 按4k算,与ls的区别在于,ls是文件具体大小,而du是所占磁盘空间大小
格式为:
du [选项] [文件或目录… ]
| 选项 | 说明 |
|---|---|
| -a | 统计磁盘空间占用时包括所有的文件,而不仅仅只统计目录 |
| -h | 以更人性化的方式(默认以KB计数,但不显示单位)显示出统计结果 |
| -s(--summarize) | 只统计所占用空间总的(Summary)大小,而不是统计每个子目录、文件的大小 |
| --max-depth=n (-d 1) | 最大显示到第n层 |
| --exclude | 不计入统计 |
注意a s无法同时使用
文件夹是可以嵌套的,有的时候我们只想展示第一级或第二级子文件夹的信息,而不希望 du 统计的层次太深,那么可以用 --max-depth(-d) 选项来进行控制显示到哪一级,例如:
du -d2 /etc 显示到etc下子文件的二级目录
创建文件与文件夹
- 文件名最长255个字节
- 包括路径在内文件名称最长4095
- 除了斜杠和NULL,所有字符都有效.但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引号来引用
创建文件夹 mkdir( make directories)
格式为:mkdir [选项] 目录位置 名称
mkdir -p 递归创建 没有文件夹 会自动递归创建 例:
mkdir -pv(递归并显示过程) aaa/bbb/cccc
创建文件
touch
- touch 新文件…(可为空) 文件名 不存在就是新建空文件
- touch 如果文件存在 不会破坏已有文件变为刷新时间
每个文件有三个时间戳:
- access time 访问时间,atime,读取文件内容
- modify time 修改时间,mtime,改变文件内容(数据)
- change time 改变时间,ctime,元数据发生改变(元数据 文件大小 权限 )
格式为:touch 1 2 3
硬链接与软链接
硬连接 同一个文件取不同的名或者叫多个名字,不支持文件夹,创建一个连接数加一,多路径访问
软连接 类似于windows里快捷方式,软连接,符号连接,会指向原来的文件,打开软连接等于自动输入一个绝对路径进入该程序
硬链接与软链接的区别:
硬链接:创建后可以多一个入口进入这份数据,不会增加文件,inode号不变,源文件删除后也可以通过硬链接的方式进入该数据 ,当所有硬链接都删掉之后,该数据依然会保留在磁盘,如果不通过手段找回,则会随机被覆盖,具体时间随机
软连接:符号链接,相当于自动保存了一个绝对路径,生成对应的文件,拥有单独的inode号,可以更快进入该数据,但如果源文件删除,则无法打开软连接,相当于数据丢失无法访问,所有对应软连接作废
格式为ln(link):
ln [-s] 源文件或目录 链接文件或目标位置
加s是软连接 符号连接,不加s是硬链接
cp 复制
cp(copy)备份 复制
cp [选项] 源文件 目标 多个源文件只能复制到文件夹
| 选项 | 说明 |
|---|---|
| -f | 覆盖目标同名文件或目录时不进行提醒,直接强制复制 |
| -i | 覆盖目标同名文件或目录时提醒用户确认 |
| -p | 复制时保持源文件的权限、属主及时间标记等属性不变 |
| -r | 复制目录时必须使用此选项,表示递归复制所有文件及子目录 |
| -a | 完整保留所有的信息 |
| -v | 可视化 |
| -u | 相当于增备,差异备份(只对文件夹起作用) |
如果已有文件夹会生成子目录
cp命令同一命令输入三次会有三种不同结果
例:cp /etc/passwd /mnt 复制到mnt文件夹下
cp /etc/passwd /mnt 在mnt文件夹下生成子目录passwd
cp /etc/passwd /mnt 名字重复,冲突报错,是否覆盖
mv 移动改名
重命名/移动
mv [选项] … 源文件或目录… 目标文件或目录
mv 源文件 名字
- -f:强制覆盖,如果目标文件已经存在,则不询问,直接强制覆盖;
- -i:交互移动,如果目标文件已经存在,则询问用户是否覆盖(默认选项);
- -n:如果目标文件已经存在,则不会覆盖移动,而且不询问用户;
- -v:显示文件或目录的移动过程
rm 删除
删除文件
rm [选项] 要删除的文件或目录
- -f、强制
- -i、交互
- -r 递归(删除目录需要)
例: rm -rf /data/* 递归删除data下所有文件
find 查找
命令的特点: 啊伟大伟大伟大啊吴大维的薪酬政策走向成熟的大大伟大伟大伟大阿瓦达阿瓦达阿瓦达wa'da'w'da'w'd'wa'd'f'f'w'r'r
- 精确查找
- 实时查找
- 支持查找条件多
格式为 find [查找路径] [OPTION]... [查找条件] [处理动作]
按名称查|-name|根据目标文件的名称进行查找,允许使用通配符-iname文件名称不区分大小写
按文件大小查找 | -size | 根据目标文件的大小进行查找 一般使用“+”、“-”号设置超过或小于指定的大小作为查找条件 常用的容量单位包括 kB(注意 k 是小写)、MB、GB
按文件属主查找 | -user | 根据文件是否属于目标用户进行查找
按文件类型查找 | -type | 根据文件的类型进行查找 文件类型包括普通文件(f)、目录(d)、块设备文件(b)、字符设备文件(c)等
按inode号 | -inum | 根据文件inode号查找
按权限查找 | -perm | 按文件权限查找
linux目录
| 一级目录 | 功能(作用) |
|---|---|
| /bin/ | 存放系统命令,普通用户和 root 都可以执行。放在 /bin 下的命令在单用户模式下也可以执行 |
| /boot/ | 系统启动目录,保存与系统启动相关的文件,如内核文件和启动引导程序(grub)文件等 |
| /dev/ | 设备文件保存位置 |
| /etc/ | 配置文件保存位置。系统内所有采用默认安装方式(rpm 安装)的服务配置文件全部保存在此目录中,如用户信息、服务的启动脚本、常用服务的配置文件等 |
| /home/ | 普通用户的主目录(也称为家目录)。在创建用户时,每个用户要有一个默认登录和保存自己数据的位置,就是用户的主目录,所有普通用户的主目录是在 /home/ 下建立一个和用户名相同的目录。如用户 liming 的主目录就是 /home/liming |
| /lib/ | 系统调用的函数库保存位置(c语言 写的一些固定格式的代码,方便调用) |
| /media/ | 挂载目录。系统建议用来挂载媒体设备,如软盘和光盘 |
| /mnt/ | 挂载目录。早期 Linux 中只有这一个挂载目录,并没有细分。系统建议这个目录用来挂载额外的设备,如 U 盘、移动硬盘和其他操作系统的分区 |
| /misc/ | 挂载目录。系统建议用来挂载 NFS 服务的共享目录。虽然系统准备了三个默认挂载目录 /media/、/mnt/、/misc/,但是到底在哪个目录中挂载什么设备可以由管理员自己决定。例如,笔者在接触 Linux 的时候,默认挂载目录只有 /mnt/,所以养成了在 /mnt/ 下建立不同目录挂载不同设备的习惯,如 /mnt/cdrom/ 挂载光盘、/mnt/usb/ 挂载 U 盘,都是可以的 |
| /opt/ | 第三方安装的软件保存位置。这个目录是放置和安装其他软件的位置,手工安装的源码包软件都可以安装到这个目录中。不过笔者还是习惯把软件放到 /usr/local/ 目录中,也就是说,/usr/local/ 目录也可以用来安装软件 |
| /root/ | root 的主目录。普通用户主目录在 /home/ 下,root 主目录直接在“/”下 |
| /sbin/ | 保存与系统环境设置相关的命令,只有 root 可以使用这些命令进行系统环境设置,但也有些命令可以允许普通用户查看 |
| /srv/ | 服务数据目录。一些系统服务启动之后,可以在这个目录中保存所需要的数据 |
| /tmp/ | 临时目录。系统存放临时文件的目录,在该目录下,所有用户都可以访问和写入。建议此目录中不能保存重要数据,最好每次开机都把该目录清空 |
cat 显示命令
| 选项 | 效果 |
|---|---|
| -n | 显示行号包括空行 |
| -b | 跳过空白行编号 |
| -s | 将所有的连续的多个空行替换为一个空行(压缩成一个空行) |
| -A | 显示隐藏字符 |
例:cat /etc/centos-release 查看内核版本
cat /etc/sysconfig/network-scripts/ifcfg-ens33 查看网络配置
tac:倒叙显示文本命令
显示文本前后内容
head
可以显示文件或标准输入的前面行,默认为十行
格式为 :head -n 3 /etc/passwd
tail
tail 和head 相反,查看文件或标准输入的倒数行
-f 实时查看文件后十行
格式:tail -n 10 /etc/passwd
tail -f /var/log
WC 统计列数
- -l:统计行数
- -w:统计单词个数
- -c:统计字节数
一般配合管道符链接
格式为:wc -w /etc/passwd |grep '^a'
grep 查找筛选
grep [选项]… 查找条件 目标文件
选项
- -i:查找时忽略大小写
- -v:反向查找,输出与查找条件不相符的行
- -o 只显示匹配项
- -f 对比两个文件的相同行
- -c 匹配的行数([root@localhost ky15]# grep -c root passwd 2)
基本格式
- 要查找的字符串以双引号括起来单引号也可以
- “^……”表示以……开头,“……$”表示以……结尾
- “^$”表示空行
例: grep -c root /etc/passwd 统计匹配的行数
压缩 解压缩
gzip bzip2
gzip和bzip都是压缩软件,比如windows里的好压和360 压缩或微软自带的
gzip [-9] 文件名… bzip2 [-9] 文件名...
9代表压缩比率,9最大1最小
gzip的压缩率 要高于bzip2
tar归档
tape archive 磁带归档
tar [选项] ... 归档文件名 源文件或目录
- -c:创建(Create).tar 格式的包文件
- -x:解开.tar 格式的包文件
- -C:解压时指定释放的目标文件夹
- -f:表示使用归档文件(一般都要带上表示使用tar)
- -p:打包时保留文件及目录的权限
- -P:打包时保留文件及目录的绝对径
- -t:列表查看包内的文件(要和f一起使用)
- -v:输出详细信息(Verbose)
- -j:调用 bzip2 程序进行压缩或解压
- -z:调用 gzip 程序进行压缩或解压
选项使用时有先后要求,如果-需要f结尾,不输入-则随意
例:tar -zcvf passwd.tar.gz /etc/passwd
解压:tar -xzf passwd.tar.gz /mnt/passwd
vi编辑器
Linux 系统中“一切皆文件”,因此当我们在命令行下更改文件内容时,不可避免地要用到文本编辑器
推荐使用 Vi 文本编辑器的原因有很多,比如:
几乎所有的Linux 发行版都内嵌有 Vim 文本编辑器,而其他的编辑器则不一定存在;
Vim具有编辑程序的能力,会主动利用不同的字体颜色辨别语法的正确性,方便程序设计
vi和vim的区别:vim是vi的升级版,本质上没有太大差异
vim编辑下的三种常见模式 :
命令模式,插入模式,末行模式。
rpm命令的格式
RPM软件可以实现几乎所有的功能,新增,删除,更新等
查询
查询已安装的软件包
| 选项 | 功能效果 |
|---|---|
| rpm -qa(all) | 显示当前系统中以 RPM 方式安装的所有软件列表 |
| rpm -q 软件名 | 查询指定软件是否已安装 |
| rpm -qi 软件名 | 查看指定软件包的名称、版本、许可协议、用途描述等详细信息 |
| rpm -ql(list) 软件名 | 显示指定的软件包在当前系统中安装的所有目录、文件列表 |
| rpm -qc (configfiles ) 软件名 | 列出已安装的指定软件的配置文件 |
| rpm -qd(docfiles) 软件名 | 列出已安装的指定软件的软件包文档所在位置 |
| rpm -qR (requires) 软件名 | 列出已安装的指定软件的依赖的软件包及文件 |
| rpm -qf(file) 软件名 | 查看指定的文件或目录是由哪个软件包所安装的 |
| rpm-qpd | 查询未安装指定软件包的文档位置 |
| rpm -qpi | 查询未安装指定软件包的完整名称详细信息 |
| rpm -qpl | 查询未安装指定软件包的文件列表 |
| rpm -qpc | 查询未安装指定软件包的配置文件位置 |
例:rpm -qa 查询所有以RPM安装的软件列表
rpm -qc httpd 配置文件位置
挂载:
mount 设备 加文件夹路径 (已存在且是空的文件夹,原来的数据将被隐藏)
挂载规则
- 一个挂载点同一时间只能挂载一个设备
- 一个挂载点同一时间挂载了多个设备,只能看到最后一个挂载设备的数据,其它设备上的数据将被隐藏
- 一个设备可以同时挂载到多个挂载点
- 通常挂载点一般是已存在空的目录
安装卸载升级
基本格式
rpm [选项] rpm软件包
| 选项 | 效果 |
|---|---|
| -i | 安装一个新的RPM软件包 |
| -U | 升级某个软件包,若未安装过则进行安装 |
| -F | 升级某个软件包,若未安装过则直接结束 |
| -h | 在安装或升级过程中已#号显示读条 |
| -v | 显示安装过程的详细信息 |
| --force | 强制安装某个软件包 |
| -e 软件名 | 卸载指定的软件 |
| --nodeps | 在安装或升级、卸载一个软件包时,不检查与其他包的依赖关系 |
编译安装
源代码-->预处理-->编译-->汇编-->链接-->执行
编译三步骤:
./configure 检测安装环境,添加减少功能,指定安装路径
make 将人类使用的高级语言,编译成二进制程序
make install 将二进制程序和相关文件拷入指定文件夹
yum 安装
YUM(Yellow dog Updater,Modified)
yum是一个基于RPM包(是Red-Hat Package Manager红帽软件包管理器的缩写)构建的软件更新机制,能够自动解决软件包之间的依赖关系。解决了日常工作中的大量查找安装依赖包的时间 为什么会有依赖关系的发生 因为linux本身就是以系统简洁为自身优势,所以在安装操作系统的时候并没有将所有的库文件以及编译软件包进行安装,所以在linux操作系统上进行软件安装的时候会出现软件包依赖的情况。yum由仓库和客户端组成,也就是整个yum由两部分组成,所以yum可以存放在两台服务器上。也可以存放在一台服务器上。可以有官方来提供服务,也可以由第三方来提供,比如国内的阿里云,搜狐云,还有一些非盈利组织比如学校等。官方的源一般在国外,下载速度肯定有限,手动更改成国内的云可以大幅提升下载速度
yum命令详解
| 命令 | 不加关键字 | 加入关键词、软件包、软件包组 |
|---|---|---|
| yum list | 显示所有可用包 | 单个的可安装包 |
| yum info | 显示所有可用包的信息 | 单个具体的信息 |
| yum search | \ | 模糊查找所有的相关信息 |
| yum provides | \ | 精确查找 |
| yum grouplist | 显示所有可用包组 | 显示具体的包组 |
| yum groupinfo | 显示所有的包组具体信息 | 显示具体的包组的具体信息 |
| yum install | \ | 安装具体软件包 |
| yum groupinstall | \ | 安装具体软件包组 |
| yum update | 所有软件升级 | 具体软件升级 |
| 命令 | 不加关键字 | 加入关键词、软件包、软件包组 |
| ---------------- | -------------- | -------------- |
| yum group update | 所有包组升级 | 具体包组升级 |
| yum remove | \ | 卸载具体软件 |
| yum groupremove | \ | 卸载具体包组软件 |
| yum history | 查看当前yum操作历史 | \ |
| yum history undo | 加入序号卸载序号里安装的软件 | \ |
| yum history redo | 加入序号重新执行序号里的操作 | | |
搭建本地yum仓库
首先将光驱中的镜像文件进行挂载 将虚拟机的光盘载入
切换到 yum.repo.d 目录 将自带的仓库移走,多个开启仓库文件可能会造成冲突无法使用
新建yum仓库文件
yum list 检查仓库 无报错信息即可正常使用
例:
mount /dev/sr0 /mnt/ 挂载提供安装包 和元数据
cd /etc/yum.repos.d/ 切换到客户端的指定目录
mkdir bak 建立文件夹存放网络yum仓库的配置文件
mv *.repo bak/ 将网络源移走,减少干扰
vim local.repo 编写本地yum仓库
[local]
name=local
baseurl=file:///mnt
gpgcheck=0
yum clean all 清理缓存
yum makecache