一,liunx 优势
1,一切都是一个文件。容易看(包括硬件,文本,二进制,源代码)
2,系统中拥有小型,单一用途的程序。(一个程序只负责做好自己的本职工作)
3,当遇到复杂任务,通过不同功能用途的程序组合起来完成。 轻量级,一台服务 dhcp ip 数据库服务 网页
4,避免令人困惑的用户界面就是没有复杂的图形界面。
5,不在乎后缀名,有没有都无所谓,不是通过后缀名来定义文件的类型。
二,基础知识
用户名 主机名 当前所在文件夹 $ 普通用户
# 管理员用户
三, / 下的常用文件夹
文件夹名 | 解释 |
etc | 放配置文件的 (用户信息,密码信息,软件配置) |
dev | 放硬件设备 (磁盘,光驱,输入设备 输出设备 ) |
boot | 开机启动需要的文件 操作系统作重要的是内核文件,内核在boot文件夹中 |
opt | 空文件夹 存放后天安装的软件 |
mnt | 挂载点 空文件夹 |
home | 存放家目录的地方,家目录的上级目录 家目录:每一个用户都会有一个家目录,及个性化配置存放用户的基本信息,存放用户自己的文档使用 注意:①一旦你建立了一个用户,会有用户名字的家目录诞生 ②超级管理员的家目录在/下的root里 |
lib/lib64 | lib :被调佣的库 32位操作系统使用 lib64 :被调佣的库64位操作系统使用 注意:现在操作系统基本不会出现32位,因为32位最大只支持4G内存 |
bin | 存放二进制文件的地方,二进制文件电脑可以直接运行 |
proc | 内存环境中的 程序状态 (像windos的进程表) |
usr | 小根 / |
tmp | 临时文件 |
var | 子目录 |
四,shell 介绍
(一)shell 是什么
shell 是程序 程序是执行特定任务的一串代码
(二)shell 干什么
shell 执行 翻译的任务。
因为电脑只知道0 1 ,shell 将人类使用的高级语言翻译成二进制交给操作系统的核心(内核)
操作系统也是程序,管理调用硬件。
(三)shell 种类
linux 用户 一旦登录系统必须加载一个翻译官,即shell程序。
centos7 默认的shell 是 /bin/bash, 因为功能比较齐全,下面都是shell
(四)shell 常用命令
1,[root@localhost ~]# echo $SHELL 显示当前shell
2,[root@localhost ~]# cat /etc/shells 显示当前系统所有使用的shell
3,[root@localhost mnt]# sh 切换shell环境
4,[root@localhost mnt]# pstree 查看使用过的shell环境
五,命令
(一)命令含义
比如 ls 命令,是由代码构成的,执行的任务是 显示当前文件夹的所有文件
即ls 就是一个程序
命令的本质就是程序,所有的命令都是程序。
(二)linux 命令的分类
内部命令:内部命令是 /bin/bash 一部分,只要登录系统,内部命令就直接运行在内存中了
外部命令 :是后装的
type 命令 :查看是内部还是外部命令
(三)为什么外部命令 ls 不需要写完全部路径
1,你和系统做了一个约定,有5个特殊文件夹。如果外部命令在这5个特殊文件夹里,就可以直接写程序的名字,不用关注文件的具体位置
以上为5个特殊文件夹
2,如果程序不在这规定的5个文件夹,就需要将程序的位置写完整(从根 开始描述程序的位置)
3,有些命令既是内部命令又是外部命令:
因为shell种类不同,内部命令不一样。便把重要的又可能漏的命令变成外部命令
(四)命令的执行过程
1,首先判断内部还是外部,
2,如果是内部,直接执行
3,如果是外部命令,先看hash缓存空间是否有,如果有,按照缓存空间中的位置执行,如果缓存位置中没有找到,直接报错
4,如果第一次执行,去看那5个文件夹是否有,有直接执行,没有,报错命令不存在
注意:
我打一个命令,提示命令不存在是什么原因?
1,命令打错了
2,命令没有安装
3,命令不在规定的路径下
4,运行过命令,但是命令的位置发生改变了 (不在缓存表)
(五)命令的格式
命令 空格【选项】 空格 【对象】
选项 就是 修饰命令 (添加额外命令)
对象 就是 对谁做(文件 文件夹 用户名) 【】可省略 省略对象 就是当前对象
1,选项格式
①一个短 - 加字母
②两个短-- 加单词
③命令+子命令+子命令。。。。。。
2,对象格式
对象 就是 对谁做(文件 文件夹 用户名)
3,特殊情况
①一个命令可以跟多个选项,一般来说选项没有顺序要求
② 选项 放在对象后面也可以
③ 如果想并行执行多条命令 用;隔开
以上就有三个命令
(六)编辑linux 命令的辅助操作
tab:如果唯一 自动补全 如果不唯一,按两次显示所有可能
Ctrl+u: 清空这一行
Ctrl+a 光标跳到第一个
Ctrl+k 删除光标之后
Ctrl+c 停止
Ctrl+l 清屏
上下键:回看命令
Ctrl+r 输入关键字查询命令,回车执行,左键显示出来
\ 调整格式 强制换行
备注: \ 的作用:用在很长的代码上,让你看的更清楚
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DSYSCONFIDIR=/etc -DMYSQL_DATADIR=/home/mysql/ -DMYSQL_UNIX_ADDR=/home/mysql/mysql.sock
可以写成
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DSYSCONFIDIR=/etc \
-DMYSQL_DATADIR=/home/mysql/ \
-DMYSQL_UNIX_ADDR=/home/mysql/mysql.sock
(七)获得命令帮助的方法
1,内部命令用 help
格式:help 命令
2,外部命令用 --help
格式:命令 --help
适用于大多数linux外部命令
3,使用man 命令 阅读手册页
①man 区段
man分九个章节默认打开第一章节
②使用方法
man 5 passwd :显示passwd文件的结构
③使用man 命令后,如何阅读手册
六,基础命令
(一)pwd
pwd 显示当前所在目录的完整路径
(二)cd
cd 切换目录(文件夹)
1,路径分类(路径:描述文件在系统中的位置 )
绝对路径 从/开始 描述文件的位置 有且唯一 无论在哪里都可以准确找到某一个文件
相对路径 从当前的位置开始 描述文件的位置 有可能不唯一 如果参照物变了,就找不到文件
所以,处理文件(复制 移动 改名)之前,先清楚文件在那个位置(pwd)
2,相对路径的表现形式
表现形式 | 说明 | 示例 |
直接使用目录名或文件名 | 表示当前工作目录中的字目录、文件的位置 | grub.conf |
以一个点号 . 开头 | 表示以当前的工作目录为起点 | ./grub.conf |
以两个点号 . . 开头 | 表示以当前的目录的上一层(父目录)作为起点 | ../grub.conf |
以"~用户名"形式开头 | 表示以指定用户的宿主目录(家目录)作为起点 | ~teacher |
3,cd 格式
cd ~ 切换到当前用户的家目录
cd 什么也不加 也是切换到当前用户的家目录
cd - 只能切到上次的文件夹(切换一次,来回切换)
(三) ls 列表
显示当前文件夹下的所有文件
生产环境中慎重直接使用,文件量过大会直接死机(有的服务器上的文件是千万级别)
1,ls 格式
① ls -l (ll)
长格式显示,显示详细信息
我们拆开来看
d rwxr-xr-x. 2 root root 6 12月 19 14:56 3
文件属性 权限 硬连接个数 文件主人 属组 文件大小 文件时间 文件名
② ls -d
只显示文件夹,不显示文件夹(目录)下的文件
③ ls -a
显示隐藏文件
.开头都是隐藏文件 heip 里面ls-a 显示所有 包括隐藏文件
④ ls -A
显示隐藏文件 不包括. 和..
⑤ ls -R
递归显示 显示该目录及该目录的子目录下的所有内容
⑥ ls -r
倒序显示
⑦ ls -t
时间排序
例如,ls -rt 倒序显示,时间最近在最前面
⑧ ls -S
文件大小排序
⑨ ls -i
显示文件的inode号 (可以理解为文件的身份证号,唯一)
stat 也可以
⑩ ls -h
人性化显示加单位 就是加单位
⑪ ls --color
显示颜色
颜色 | 文件类型 |
黑 | 数据文件 普通文件 |
绿 | 可执行文件 |
黄 | 块设备文件 硬件设备(硬盘) |
红 | 压缩包 |
蓝 | 文件夹 |
天蓝 | 连接方式(快捷方式) |
2,liunx 7大文件属性 (ls-l 看的)
①d 目录
②- 普通文件 文本 包括纯文本文件、二进制文件、各种压缩文件等。
③c 字符设备 一次只能录入一个字符 (键盘)
④b 块设备 (硬盘)读写文件的时候 是一整块一整块的读和写,就是保存大块数据的设备,比如最常见的硬盘。
⑤s 套接字 (IP 端口号) 传递消息
套接字作用:
1,两台主机通讯
2,系统程序交换信息
通常用在网络数据连接,可以启动一个程序开监听用户的要求,用户可以通过套接字进行数据通信。
⑥p 管道符 数据只能沿着一个方向传输 linux命令中 丨 (这是竖)代表管道符
管道符作用:
系统程序交换信息,但是管道符单向
其主要作用是解决多个程序同时存取一个文件所造成的错误。
⑦l (这是L) 软连接 (快捷方式)
(四) 通配符
1,通配符定义:
有些符号不表示原来的意思 ,它代表了一类字符
2,通配符作用:
通配符匹配文件的名字
正则表达式匹配 文件里面的内容
3,常用通配符
① ? 指任意一个字符
② * 代表任意长度的字符,不能显示隐藏文件
③ {1..10} 从1到10
字母也可以{a..z} 从a 到z
④ [123] 代表 1, 2,3 里面任意一个
[0-9] 代表单个数字
比如列出数字开头的文件:
[0-9] [0-9] 代表两位数
[a-c] 指 a A b B c 任意一个
[A-c] 指 A b B c 任意一个
因为字母顺序 a A b B c C
⑤ ^ 非选 固定格式加框
⑥ \ 转义, 表示原来的意思
\ * 就是* 序号 不是任意长度的字符
4,通配符用法
(五)设置别名 alias
1, 别名 格式
alias 自定义的命令=‘原始命令’
2,只打别名:
显示所有别名
3,取消别名:
unalias 自定义命令
4,别名执行过程
绝对路径>别名>内部命令>hash>外部命令
注意:使用命令alias 建立的别名是临时的,重启就没有了
(六) du 查看磁盘使用量
默认递归,默认隐藏文件也统计,一般用于找大文件夹
1,du 格式
du 选项 文件或目录
2,常用选项
① du -a 统计磁盘空间占用时, 包括所有的文件
② du -h 显示kb
③ du -s 只统计所占空间总的大小,不统计子目录,子文件
注意;a 和 s 不能同时使用
3,du 和ls -l (ll) 都可以看文件大小 有什么区别
du 磁盘使用量 ,看到的是文件占了磁盘多少块(像停车一样,不满一小时按一小时收费 磁盘一块是4k(4096字节) ) 一个文件不足4k按4k算 du一定是4的倍数
ls -l 看到的是文件的真实的大小
问:磁盘空间不够了,如何排查那些文件夹下有那些比较大的文件
答: du -a 一个一个排查,看文件有没有用
问:如何预防磁盘空间
答:建一个空文件,占百分之20,阈值到达80,就会报警。
4,只想看前两层文件夹的磁盘使用量
du -d2 /etc (etc不算 etc 下面的子集文件夹,子集文件夹下的子集文件夹)
5,du --exclude 不计入统计
统计opt文件夹里 除了文件格式是TXT 的所有的文件的计磁盘空间占用
(七)mkdir 创建目录(文件夹)
1,mkdir 格式
mkdir 选项 目录位置及名称
2,mkdir -p 递归建立文件夹
mkdir aa bb cc 一次性建立三个文件夹
mkdir -p /aa/bb/cc aa是bb的父系文件夹 bb是cc父系文件夹
3,多建立递归文件夹
(八)touch 建空文件
两种情况
1,文件不存在,创建一个新的 空的 文件
2,文件已存在, 刷新文件时间
(九)硬连接与软连接
1,软连接
理解为快捷方式,软连接的大小就是路径的大小
软连接注意:删软连接时 文件后不能加 / 会删文件,软连接没删掉
2,硬连接
理解为:文件有多少中叫法 有多少种找到这个文件的办法
①硬连接具体含义
首先我们理解一下liunx 是怎么找文件的。文件夹是一个表,类似下面
inode号 | 文件名 | 属组 | 文件主人 | 格式 | 权限 | 大小 | 时间 | 硬连接个数 |
1234 | aa | |||||||
1235 | aaa | |||||||
等 | 等 | 等 | 等 | 等 | 等 | 等 | 等 |
当用户访问aa时,先进文件夹,通过表,找到inode号,相当于一个指针, inode会指向磁盘上的aa的具体位置,再把aa调出来,加载在内存中。如下图所示
硬连接: 就是多了一条在磁盘中找到他的指针, 即多了一种找到inode号为1234文件的方法。如下图所示:
做硬链接 文件只有一个,多一条找到文件的办法 inode永远不会变,其他也不会变,因为这是一个文件。
②硬连接注意事项
A想删除一个文件,硬连接必须为0
B文件夹不能做硬链接(文件夹里面东西很多)但是文件夹的详细信息里,硬连接次数基本都是不止1,因为这个文件夹下面有子文件 子文件用. .. 找文件 子文件越多,硬链接越多
3,硬连接语法
ln 源文件 目的位置 源文件要用绝对路径
硬连接注意 文件夹不能做硬链接
4,软连接语法
ln -s 源文件 目的位置 源文件要用绝对路径
软连接注意:删软连接时 文件后不能加 / 会删文件,软连接没删掉
5,软连接 硬连接区别
6,软连接现实生活的应用
app 更新为app1 app 之前的软连接叫vx 不会改变用户的使用习惯,还把APP1做软连接叫vx
(十)cp复制
复制文件或目录
1,cp 格式
cp 源文件 目标位置
2 cp 语法
① cp /etc/passwd /opt/123
复制/下的etc下的passwd 到/下的opt 并改名123
② 复制文件夹一定要加 -r
③ -p -a 保留属性 文件的7个属性 -a 更强大
④ -f
覆盖目标同名文件或者目录时不提醒,直接强制复制
⑤ -u 增备
比如:A文件夹有 1 2 3 B文件夹有1 2
cp -u 跳过1 2 直接复制3
3,cp 相同三次命令,结果不一样
4,复制多个文件 目标只能是文件夹
(十一)mv 移动或改名
1,改名:
源文件和目标文件路径位置一样
2,移动:
源文件和目标文件路径位置不一样 ,也可以移动并改名
3,mv 和rename
mv只能一个一个改名字 rename 可以批量改名 有局限 (必须统一后缀的)
(十二) rm-rf 删除
r 递归 f强制
删除文件后空间不释放,是因为别人在用
(十三)shred 安全删除数据
原理:0硬连接的情况下 数据还在磁盘里面 给硬盘不停写0 覆盖整个磁盘
(十三)fls 保存
七,查找文件位置
(一)查找命令文件(外部命令)
比如 ls mkdir cp 等
1,用 which 在5个文件找
2, whereis 找的更多
(二)查找普通文件
1,locate
①优缺点
用locate 优点:快
缺点: 偷懒,不是去磁盘上找的,找的数据库,不具备实时性
模糊查找,不够精确
不具备实时性:用updatedb 更新一下数据库(最好不用,非常占用性能)
②一般用在 查找老旧文件
2,find(自带递归属性)
①优缺点
缺: 慢 真的去磁盘一块一块的找
优:精确查找,选项多,查找的功能多
②find 通式
find 查找范围 查找条件表达式
A 查找范围
不指定范围就是 当前文件夹
B查找条件
a 按名称查找 -name
注意:此处ls 不是命令ls 是处理动作 找到之后干嘛干嘛,默认print 显示
处理动作有 print ls delet 等
b 按文件大小查找 -size
注意:-size 大小 只能表示一个范围 例如:
不加+ - 1024M M先不看 1024-1 所以在1023M 到1024M 找
1G G 先不看 1-1=0 所以在0到1G找
小于 也是同理
所以查找的单位越小越好 k M G
c -user 按文件属主查找
-nouser 无主用户(作用就是清理用户删了,残留的文件)
d -type 按文件类型查找
注意: 找普通文件 - 变成f
e -inum 按inode号查找
f -maxdepth 数字 将你的文件已分级的形式查找
只找第二层
g 根据属主,属组查找
uid 用户的身份证号 用户ID
gid 组ID
h 找空文件 -empty
作用:inode号有限,inode号用完无法在建文件。找到占用inode号的空文件删除
i 根据时间戳
例子1
例子2
注意: \; 为固定格式
此处 -ok 为处理动作,指连接前后两个命令
常见处理动作有:
-ls 显示详细信息
-delete 删除
-ok 连接前后两个命令,每次会询问
-exec 连接前后两个命令 ,不会询问
③使用 find 实现多个查找条件
-a 表示 and 而且
-o 表示 or 或者
④find批量改名
⑤重点
八,管道符 丨
文件属性是p 单向传输数据
(一)生成管道文件
(二)把456 导过去
(三)我想知道mnt下面有多少文件 不想数
(四)一个命令不能完成我想要的,我需要一个命令接力
| 可以无限加