目录
1.什么是Shell
注意:
-
Shell作为用户与内核之间的接口,允许用户通过输入命令来操作计算机。在Linux系统中,Shell通常指的是命令行界面,它是一个命令解释器,将人类的高级语言翻译成机器语言。
-
Shell的核心功能是解释和执行用户输入的命令。这些命令可以是内置的,也可以是外部程序。Shell还支持编程,允许用户编写脚本来自动化复杂的任务,如系统管理、文件操作和进程控制。这种脚本称为Shell脚本,它是一系列命令的集合,可以被Shell解释并执行。
-
Bash 是Linux系统中默认使用的Shell程序,文件位于:/bin/bash
2.内部命令和外部命令
内部命令:
1.存放在内存中,属于shell的一部分 2.没有单独的文件夹存放 3.只要执行shell直接载入到内存,直接使用
外部命令:
1.存放硬盘中,有单独的文件夹存放 2.必须知道对应的文件的位置,shell加载后才可以执行
注意:
1.使用一个程序,必须向系统描述清楚这个程序文件的具体位置(文件路径)
2.命令的帮助help(info也可以查看相关的帮助信息)
1: help +命令 用来查看内部命令 2: 命令 --help 用来查看外部命令
3:man共有9个章节,man 1 不带数字默认1:是命令的基本用法;man 5 文件 的格式
3.type用来区分内外部命令 : echo:是内部命令也是外部命令的
4.外部命令:ls
5.注意使用别名的外部命令ls目录是蓝色,使用绝对路径目录是初始颜色
6.显示当前shell
7.外部命令存放在$PATH(环境变量)中
[root@localhost ~]# echo $PATH //输出环境变量
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
//外部命令都存放在这五个文件中,会从前一个一个按顺序查找,找到立即停止,找不到报无命令
注意:hash是哈希表,只要
3.命令的执行过程
别名
1.运行一个命令的时候先判断是内部还是外部,如果是内部直接执行;
2.如果是外部命令先看是否有缓存,有直接去缓存的路径下找命令,找到直接执行,找不到直接报错
3.没有缓存去规定的路径下查找 ,找到执行、找不到报错
注意:别名>内部>hash>外部命令(绝对路径)(先查找别名再内部命令,缓存、最后外部)
绝对路径不走缓存!!
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
重点注意:如果要升级2.0版本尽量把文件放到前面去,因为是从前向后查找的,找到立即停止
[root@localhost ~]# free -h //free 命令显示系统内存的使用情况,包括物理内存、交换内存(swap)和内核缓冲区内存。
total used free shared buff/cache available
Mem: 3.7G 818M 2.2G 25M 666M 2.6G
Swap: 8.0G 0B 8.0G
注意:清理缓存buff/cache命令:牺牲速度换取空间
命令:其实就是程序
1.命令是执行特殊任务的
2.命令是一个文件 里面存储了代码
3.命令行使用的格式:命令字 空格[选项] 空格 [参数]
注意: 重点: 命令行之间一定要使用空格(如果没空格会认为是一个参数)!区分区分大小写
4.命令行帮助命令
命令:ctrl + l 作用:清屏
tab补全,如果命令,文件路径唯一直接补全,如果不唯一,按两次tab显示符合条件命令或文件
上下键:回看使用过的命令
ctrl+r:搜索使用过的命令
ctrl +c 停止运行中的命令 结束命令
ctrl +u 清空到行首
ctrl +k 清空到行尾
5.常用命令
1.pwd
作用:查看当前所在的目录路径/位置
2.ls
作用:用于显示目录中的文件信息
格式:ls [选项] [文件\目录]
-
-l 已长格式显示文件和目录列表 ll=ls -l
-
-a 显示全部包括隐藏文件
-
-A 显示全部文件或隐藏文件,但不包括 . 和..
-
-d 仅列出目录本身,而不是列出目录内的文件数据
-
-h 友好显示文件大小(human,人性化)
-
-R 递归显示该目录及该目录的子目录下的所有内容
-
-t 已时间顺序显示
-
-r 倒序显示
-
--color 显示颜色
-
-S 以文件容量大小排序
(1)常用选项
ls -a
ls - l(长格式显示:详细属性)
ls -i 显示文件的inode号
ls -ld : -d是仅列出目录本身,不列出目录下的文件
ll -h
ls -R //递归显示
ls -rt //r:倒序 t:时间
注意:生产环境中慎重直接使用,文件量过大会直接死机(有的服务器上的文件是千万级别)
(2)通配符 (重点)
符号 | 效果 |
---|---|
? | 匹配一个字符 f?.txt |
* | 匹配所有非隐藏的字符无论多长多短,但不匹配 "." 开头的文件,即隐藏文件 |
{1..10} | 1到10 |
{a..z} | a b c ...z |
{A..Z} | A B C .....Z |
[123]([此处括号里值代表一个字符]) | 取其中之一有就显示没有也无所谓 |
[a-z]单个小写字母 | 范围需要注意 |
[0-9]单个数字 | 匹配数字范围(0123456789) |
\ | 转义符,表示原来的意思 |
[[:lower:]] | 小写字母表示 a-z |
[[:upper:]] | 大写字母表示 A-Z |
[^zhou] | 匹配列表中的所有字符以外的字符 |
[[:digit:]] | 任意数字,相当于[0-9] |
[[:alpha:]] | 任意字母 |
3.别名(alias)
临时修改
-
alias 命令别名=’命令‘
-
unalias 别名命令 //删除别名
-
\加别名命令 (显示原始命令)
永久修改
-
在/etc/.profile和/etc/bashrc会影响全部用户
-
./.bashrc只影响当前用户
[root@localhost ~]# alias myvim='vim /etc/sysconfig/network-scripts/ifcfg-ens33' [root@localhost ~]# myvim //用于别名 [root@localhost ~]# alias myvim=vim /etc/sysconfig/network-scripts/ifcfg-ens33 -bash: alias: /etc/sysconfig/network-scripts/ifcfg-ens33: 未找到 //不加单引号会不识别 [root@localhost ~]# unalias myvim //取消别名 [root@localhost ~]# ls a anaconda-ks.cfg initial-setup-ks.cfg 公共 模板 视频 图片 文档 下载 音乐 桌面 [root@localhost ~]# \ls \加别名命令 (显示原始命令) a anaconda-ks.cfg initial-setup-ks.cfg 公共 模板 视频 图片 文档 下载 音乐 桌面 [root@localhost ~]# alias ls='ls --color=auto'
4.du(disk usage)
作用:查看当前所在文件夹占用了磁盘的多少单元块。默认1单元块为4K, 不满4K 按4k算。
格式:du [选项] [文件或者目录]
选项 | 说明 |
---|---|
-a | 统计磁盘空间占用时包括所有的文件,而不仅仅只统计目录 |
-h | 以更人性化的方式(默认以KB计数,但不显示单位)显示出统计结果 |
-s(--summarize) | 只统计所占用空间总的(Summary)大小,而不是统计每个子目录、文件的大小 |
-d n | 最大显示到第n层 |
--exclude | 不计入统计 |
注意:
1.as不能同时使用
2.ls -l与du的区别
3. -d 显示到第几层级
4. --exclude=“通配符” 不计入统计
5. 目录操作
1.mkdir
格式:mkdir [选项] 文件夹名
选项: -p 递归建立文件夹 -v 显示建立过程
2.touch
格式:touch 文件名
作用:1.新建空文件(当文件名不存在) 2.刷新文件的时间(当文件名已存在刷新文件的时间)
每个文件都有三个时间戳:
-
access time 访问时间,atime,读取文件内容
-
modify time 修改时间,mtime,改变文件内容(数据)
-
change time 改变时间,ctime,元数据发生改变(元数据 文件大小 权限 )inode号改变
3.cp
cp(copy)备份
1.cp [选项]… 源文件 目标 相当改名复制 文件夹 文件相当于 改名字另存为
2.cp [选项]... 源文件... 文件夹 多个源 文件只能复制到文件夹
选项 | 说明 |
---|---|
-f | 覆盖目标同名文件或目录时不进行提醒,直接强制复制 |
-i | 覆盖目标同名文件或目录时提醒用户确认 |
-p | 复制时保持源文件的权限、属主及时间标记等属性不变 |
-r | 复制目录时必须使用此选项,表示递归复制所有文件及子目录 |
-a | 完整保留所有的信息 |
-v | 可视化 |
-u | 相当于增备,差异备份(只对文件夹起作用) |
cp -u
在进行备份操作时非常有用,可以确保只复制更新过的文件,节省时间和存储空间
4.mv
格式:mv [选项] 原文件或文件夹 目标文件或目录
作用:路径改变式移动 或者 路径不变是改名
参数:
-
-f:强制覆盖,如果目标文件已经存在,则不询问,直接强制覆盖;
-
-i:交互移动,如果目标文件已经存在,则询问用户是否覆盖(默认选项);
-
-n:如果目标文件已经存在,则不会覆盖移动,而且不询问用户;
-
-v:显示文件或目录的移动过程;
5.rm
格式: rm [选项] 要删除的文件或者文件夹
作用:删除文件或者文件夹
参数:
-
-f、强制
-
-i、交互
-
-r 递归(删除目录需要)
注意:特殊文件
6.创建链接文件-ln(重点)
硬链接: ln 源文件的路径 目标文件的路径(**只能对文件创建硬链接,不能对文件夹**)
软链接: ln -s 源文件的路径 目标路径/(**对文件/文件夹都可以创建软链接**)
硬链接:相当于文件的小名,inode号不变,在系统中多了一种找到它的方法,只能对文件使用,无法对文件夹使用。
软链接:快捷方式:大小是绝对路径的长度
系统中找文件是根据inode号查找,删文件硬链接的个数一定为0
对比项 | 硬链接 | 软链接 |
---|---|---|
本质 | 本质是同一个文件 | 本质不是同一个文件 |
inode(身份证号) | 相同 | 不同 |
连接数 | 创建新的硬链接,链接数会增加,删除硬链接,链接数减少 | 删除,新建都不会改变 |
文件夹 | 不支持 | 支持 |
删除源文件 | 只是链接数减一,但链接文件的访问不受影响 | 无法访问连接文件 |
文件类型 | 和源文件相同 | 链接文件,和源文件无关 |
文件大小 | 和源文件相同(指向硬盘上的同一个文件) | 源文件的路径的长度 |
硬链接:
、、、Phyton
[root@localhost data]# cp /etc/passwd /opt/paswd
[root@localhost data]# ls -i /etc/passwd
35085303 /etc/passwd
[root@localhost data]# ls -i /opt/paswd //复制会产生新的文件,所有inode号不一样
68863943 /opt/paswd
[root@localhost data]# cd /opt
[root@localhost opt]# ls
paswd
[root@localhost opt]# ln /opt/paswd /opt/abc //给/opt/paswd创建硬链接到/opt目录下改名abc
[root@localhost opt]# ll -i //查看inode号
总用量 8
68863943 -rw-r--r--. 2 root root 2316 12月 29 15:18 abc
68863943 -rw-r--r--. 2 root root 2316 12月 29 15:18 paswd
//可以看出硬链接inode号和源文件的inode号是一样的
重点:文件是否删除是看文件的硬链接个数是否为0
、、、Phyton
软链接:(难点)
[root@localhost opt]# ln -s /opt/passwd /mnt/soft 给/opt/passwd文件设置软链接 到/mnt/下并改名为soft
[root@localhost opt]# ll /mnt/
总用量 0
lrwxrwxrwx. 1 root root 11 12月 23 16:55 soft -> /opt/passwd
//可以看出soft指向的就是源文件,软链接文件的大小就是源文件绝对路径的字符数量:/opt/passwd =11
[root@localhost opt]# cd /mnt
[root@localhost mnt]# cd soft
[root@localhost soft]# ls //查看软链接中是否有文件
[root@localhost soft]# pwd //查看当前所处的位置
/mnt/soft //当前目录下所处的位置
[root@localhost soft]# pwd -P //加上-P的意思就是真实所在的位置
/opt/passwd //源文件所处的真实位置
7.查找命令
(1)查找命令在系统中位置:(which、whereis)
1.which 常用命令 :只找具体的命令 只在$PATH路径中找
2.whereis 常用命令 包括一些相关命令的文件
3.wc 统计
格式:wc [参数] [文本]
作用:用以指定文本的行数、字数、字节数
参数:wc -l 只统计行数 wc -w 只统计单词 wc -c 只统计字符数
(2)查找文件:(locate、find 重点!!!)
1. locate
作用:用来查找经常不用的文件
`locate` 命令是通过搜索一个预先建立好的数据库(通常是由 `updatedb` 命令创建和更新的)来查找文件和目录。 优点:快 缺点:不是实时
2.find
1.命令的特点:
- 精确查找
- 实时查找
- 支持查找条件多
2. find命令的格式:
find [查找范围] [选项] [条件] [处理动作]
[查找范围]:指具体目标路径;不指定为默认为当前目录
[查找条件]:描述你需要找的文件的一些特征
[处理动作]:默认输出至屏幕,常用的删除和移动
-print:默认的处理动作,显示至屏幕
-ls:类似于对查找到的文件执行"ls -dils"命令格式输出
-fls file:查找到的所有文件的长格式信息保存至指定文件中,相当于 -ls > file
-delete:删除查找到的文件,慎用!
-ok 处理动作 {} \; 对查找到的每个文件执行由处理命令指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认
-exec 处理动作 {} \; 对查找到的每个文件执行由处理命令 指定的命令{}: 用于引用查找到的文件名称自身
注意:找到/app文件夹下30天以上大于1G 以log 结尾的普通文件 移动到/opt文件夹下或者删除
find /app -mtime +30 -size +1G -name "*log" -type f -exec mv {} /opt \;
2.1 参数替换:xargs
由于很多命令不支持管道|来传递参数,xargs用于产生某个命令的参数,xargs 可以读入 stdin 的数据,并且以空格符或回车符将 stdin 的数据分隔成为参数
另外,许多命令不能接受过多参数,命令执行可能会失败,xargs 可以解决
注意:文件名或者是其他意义的名词内含有空格符的情况
单独使用xargs是将键盘上的输入输出在屏幕上
3.常用的选项:
-name | 按照名称查找文件 -iname 不区分大小写查找 |
---|---|
-type | 按文件的类型查找 |
-user | 按照文件的主人查找 |
-size | 按照文件的大小查找文件 +大于 -小于 G M k |
-inum | 按照文件inode号查找 |
-mtime | 按时间查找 atime mtime ctime +30 大于30天(实际是29天) |
-perm | 按照文件权限查找 |
-maxdepth n | 最多只找到第n层 |
-mindepth n | 最少找到第n层 |
1.-name文件的名字(通配符表示或者固定的名字)
找到boot文件夹下以v开头的所有文件。
2.**-type:类型**
七种类型:1.f 普通文件 2.d 目录 3.l 链接
4.c 字符文件 5.b 块设备 6.s 套接字 7.p 管道
(1)f 普通文件
(2)d 目录文件
(3)l 链接文件
(4) c 字符文件
(5)b 块设备文件
(6)s 套接字文件
(7)p 管道文件
3.**-size:大小**
1.根据文件大小写来查找:常用单位:M,G,k
以6k为例:
-size 6k 表示(5k,6k]
-size +6k 表示(6k,∞)
-size -6k 表示 [0,5k]
-size 按大小查找 如果数字前面是减号或者不加 范围是需要计算的
2. 根据时间戳
a代表 “access”,即访问时间。
m代表 “modify”,即修改时间。
c代表 “change”,即状态改变时间。
以“天:time”为单位:-[acm]time
#以“天”为单位
表示[#,#+1) 如#是 3 3 到 4天
+#表示[#+1,∞] 如#是 3 代表 4天以上
-#表示[0,#) 如#是 3 3天以内
4.-user 用户名
find 范围(不写默认找当前文件夹) 选项 条件 处理动作
5.-perm文件的权限
6.-inum:inode号
7.-maxdepth n
8.-mindepth n
(3)使用find命令实现多个查找条件
1.逻辑运算符: “-a” 表示 而且 (and) "-o"表示或者(or)
2.逻辑运算中优先级的问题:
3.管道符 l
A命令的执行结果通过管道符|传给 B命令 A命令的结果对于 B命令而言就是处理对象
4.注意:并不是所有命令都可以使用管道符
处理动作:
-print:默认的处理动作,显示至屏幕
-ls:类似于对查找到的文件执行"ls -dils"命令格式输出
-fls file:查找到的所有文件的长格式信息保存至指定文件中,相当于 -ls > file
-delete:删除查找到的文件,慎用!
-ok COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认
-exec COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令{}: 用于引用查找到的文件名称自身
每次找到文件要确认是否移到/mnt/ 路径下
(3)标准输入输出
- 标准输入(文件描述符为 0)默认是从键盘获取数据,用于向程序提供输入信息。
- 标准输出(文件描述符为 1)通常是将程序的正常输出结果显示在终端屏幕上。
- 标准错误输出(文件描述符为 2)用于输出程序运行过程中的错误信息,也是默认显示在终端屏幕上,但与标准输出是分开的通道。