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