1.操作系统是什么
是一组程序,由代码组成,用来执行任务,调度硬件,指挥硬件
程序:执行特定任务的一串代码,是静态的
linux当中命令的本质就是一个个的程序
2.Shell
2.1 Shell是什么
Linux系统中的还运行的一种特殊程序,在用户和内核之间充当“翻译官”,将人类的高级语言转化为二进制语言
用户使用应用程序发布指令,比如使用浏览器访问网页;
shell去通知操作系统需要进行什么样的操作(相当于解释层);
内核相当于操作系统去指挥硬件;
硬件才能工作,否则无法交互。
每打开一个交换界面都必须加载一个shell程序
centos7下Bash是Linuk系统中默认使用的shell程序,Bash是shell的一种
2.2 shell的内部命令与外部命令的区别
内部命令 | 外部命令 |
---|---|
集成于shell解释器程序内部的一些特殊指令,也称为指令 | Linux系统中能够完成特定功能的脚本文件或二进制程序 |
属于shell的一部分 | 属于shell解释器程序之外的命令 |
没有单独对应的系统文件 | 每个外部命令对应了系统中的一个文件 |
自动载入内存,可以直接使用 | 必须知道其对应了的文件位置,由shell加载后才能执行 |
hepl命令可以查看内部命令
[root@localhost opt]# help
可以使用type命令来区分内外部命令
[root@localhost /]# type cd
cd 是 shell 内嵌 //内嵌代表内部命令
[root@test1 /]# type -a ls
ls 是 `ls --color=auto' 的别名 //别名代表外部命令
ls 是 /usr/bin/ls //外部命令会有程序路径
[root@localhost /]# whereis ls //whereis 可以查找命令具体的位置所在
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
[root@localhost ~]# type -a echo
echo 是 shell 内嵌
echo 是 /usr/bin/echo
2.3命令执行的过程
2.4 hash缓存表
[root@localhost ~]# hash //或者使用hash
hash 缓存
使用过一次 外部命令 我就会将这个外部命令 缓存在hash
外部命令需要取找他的路径才能执行, 直接在缓存 调用 加快了速度
内部 外部 hash 的优先级
内部 hash 外部
hash -d 加缓存里的命令 单独删除
hash -r 删除所有
3.命令行的格式和基本命令
在 Linux 操作系统中,凡是在字符操作界面中输入能够完成特定操作和任务的字符串都 可以称为命令。
- 严格来说,命令通常只代表实现某一类功能的程序的名称。
格式:命令行 空格【选项】 空格 【参数】
【 】:可以加也可以不加
解释命令字 选项 参数各自的意思及具体使用方法
3.1命令编辑的辅助操作
快捷键 | 功能 |
---|---|
Tab键 | 自动补齐(两次可以显示所有选项) |
反斜杠“” | 强制换行或转义 |
Ctrl+a | 光标移动到最前 |
Ctrl+e | 光标移动到最后 |
Ctrl+u | 清空至行首不包括当前光标处的 字符 |
Ctrl+l | 清屏 |
Ctrl+c | 取消本次命令编辑 |
## 3.2help 获取命令帮助 |
#内部命令查看帮助
echo: echo [-neE] [参数 ...]
将参数写到标准输出。
在标准输出上显示 ARG 参数后跟一个换行。
选项:
-n 不要追加换行
-e 启用下列反斜杠转义的解释
-E 显式地抑制对于反斜杠转义的解释
`echo' 对下列反斜杠字符进行转义:
a 警告(响铃)
b 退格
c 抑制更多的输出
e 转义字符
f 格式提供
n 换行
r 回车
t 横向制表符
v 纵向制表符
\ 反斜杠
nnn 以 NNN (八进制)为 ASCII 码的字符。 NNN 可以是
0到3个八进制数字
xHH 以 HH (十六进制)为值的八比特字符。HH可以是
一个或两个十六进制数字
退出状态:
返回成功除非有写错误发生
3.3 --help
查看外部命令
[root@localhost ~]# ls --help
[root@localhost dev]# useradd --help
3.3 man
[root@localhost ~]# man man
该清单是一组用冒号分隔的欲查找的手册清单。此选项将覆盖 MANSECT 环境变量。
有些指令或程序可能有一个以上的主题,它们位于不同的区段中。因此,要查看较后的区 段,你可以在此指定 man
查找区段的顺序。具体区段划分如下所示:
区段1:用户指令
区段2:系统调用
区段3:程序库调用
区段4:设备
区段5:文件格式 shadow passwd fstab
区段6:游戏
区段7:杂项
区段8:系统指令
区段9:内核内部指令
区段n:Tcl或Tk指令
3.4目录查询操作
3.4.1pwd (print work directory)
[root@localhost ~]# pwd //显示当前路径
/root
[root@localhost bin]# cd /bin
[root@localhost bin]# ll /bin
lrwxrwxrwx. 1 root root 7 8月 6 20:57 /bin -> usr/bin
[root@localhost bin]# pwd -P
/usr/bin
#-P 显示真实路径
快捷方式 不是文件真正的路径
3.4.2 cd
cd 目标位置change directory
[root@localhost ~]# cd /etc/ 传送到根目录下的etc文件
[root@localhost etc]#
[root@localhost ~]# cd 传送到家目录
[root@localhost ~]#
[root@localhost ~]# cd ~ 这也是传送到家目录
[root@localhost ~]#
绝对路径:以根开头的文件路径
相对路径:不以根开头的文件路径
相对路径的表现形式:
[root@localhost opt]#cat passwd
#此处省略了路径
[root@localhost opt]#cat ./passwd “.”表示当前目录
#查看当前路径下的passwd文件
[root@localhost opt]#cd ./ky31/
#切换到当前目录下的 ky31 文件夹
[root@localhost ky31]#
[root@localhost ky31]#cd ../../ “..”表示上一层目录
#切换到上两层的目录
[root@localhost /]#
3.4.3 ls
ls [选项] [文件或目录… ]
- -l 已长格式显示文件和目录列表 ll=ls -l
- -a 显示全部包括隐藏文件
- -A 显示全部文件或隐藏文件,但不包括 . 和..
- -d 仅列出目录本身,而不是列出目录内的文件数据
- -h 友好显示文件大小(human,人性化)
- -R 递归显示该目录及该目录的子目录下的所有内容
[root@test1 ~]# ls -a
#显示所有 包括隐藏文件
. .cache .ICEauthority .viminfo.tmp 下载
.. .config initial-setup-ks.cfg .Xauthority 音乐
anaconda-ks.cfg .cshrc .lesshst 公共 桌面
.bash_history .dbus .local 模板
.bash_logout .esd_auth mysql.sh 视频
.bash_profile hhh.cgg .tcshrc 图片
.bashrc .history .viminfo 文档
################################################
[root@test1 ~]# ls -A
#显示所有 不包括. ..的隐藏文件
anaconda-ks.cfg .config .ICEauthority .viminfo 图片
.bash_history .cshrc initial-setup-ks.cfg .viminfo.tmp 文档
.bash_logout .dbus .lesshst .Xauthority 下载
.bash_profile .esd_auth .local 公共 音乐
.bashrc hhh.cgg mysql.sh 模板 桌面
.cache .history .tcshrc 视频
########################################################
[root@test1 ~]# ls -d
#只显示本目录
.
[root@test1 ~]# ls -d /etc
######################################################
[root@test1 ~]# ls -lh //加单位k友好显示
颜色表示的文件类型:
- 黑色数据文件 普通文件
- 绿色 可执行文件
- 黄色 块设备文件硬件设备(硬盘)
- 红色 压缩包
- 蓝色 文件夹
- 天蓝色 连接文件(快捷方式)
3.4.4 文件名称
文件夹二级在根目录下
3.4.5 文件类型
文件开头的第一个字符
3.4.6 通配符
去搭配ls使用,匹配文件名
符号 | 效果 |
---|---|
? | 匹配一个字符 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 |
### 3.5 alias (别名) | |
alias 命令别名='命令' |
[root@localhost ~]# alias wa='cd ~'
[root@localhost ~]#
unalias 别名命令 删除命令
[root@localhost ~]# unalias wa
[root@localhost ~]#
加别名命令 显示原始命令
直接输入alias可以查看全部的别名命令
[root@localhost ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
命令的优先级:绝对路径>别名>内部>hash>外部命令(先查找别名在查找内部命令,缓存最后外部)
3.6 du (disk usage)
查看当前所在文件夹占用了磁盘的多少单元块。默认1单元块为4K, 不满4K 按4k算。
du [选项] [文件或目录… ]
选项 | 说明 |
---|---|
-a | 统计磁盘空间占用时包括所有的文件,而不仅仅只统计目录 |
-h | 以更人性化的方式(默认以KB计数,但不显示单位)显示出统计结果 |
-s(--summarize) | 只统计所占用空间总的(Summary)大小,而不是统计每个子目录、文件的大小 |
--max-depth=n (-d 1) | 最大显示到第n层 |
--exclude | 不计入统计 |
注意:a s无法同时使用
3.7创建文件夹
- 文件名最长255个字节
- 包括路径在内文件名称最长4095
- 除了斜杠和NULL,所有字符都有效.但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引号来引用。
3.7.1 创建目录 mkdir (make directories)
mkdir [选项] 目录位置及名称…
mkdir -p 递归创建 没有文件夹 会自动递归创建
[root@localhost data]# mkdir -p aaa/bbb/cccc
# 递归创建文件夹
[root@localhost data]# ls
a aaa b c d
[root@localhost data]# tree
.
├── a
├── aaa
│ └── bbb
│ └── cccc
├── b
├── c
└── d
mkdir -pv /mysql/{3306,3307,3308}/{data,etc,socket,log,bin,pid}
#一次建立多个文件
3.7.2 touch
- touch 新文件…(可为空) 文件名 不存在就是新建空文件
- touch 当已有创建的文件时不会破坏已有文件,别为刷新文件创建时间
每个文件有三个时间戳:
创建文件1 2 3 并查看时间
再次创建已有文件就会刷新文件时间
3.8 硬连接与软连接
硬连接: 可以将硬连接理解为一个“指向原始文件inode的指针”,系统不为它分配独立的inode和文件。硬连接文件与原始文件其实是用一文件,只不过名字不同而已。每添加一个硬连接,该文件的inode连接数就会增加1,而且只有当该文件的inode连接数为0时,才算彻底将它删除
ln 源文件或目录… 链接文件或目标位置
硬连接的特点:
1.硬连接以文件副本形式存在,不占用实际空间。
2.不允许给目录创建硬连接。
3.硬连接只有在同一个文件系统中才能创建
[root@localhost data]# mkdir /data
[root@localhost data]# cd /data
[root@localhost data]# cp /etc/passwd /data/f1.txt
[root@localhost data]# ls
f1.txt
[root@localhost data]# ln /data/f1.txt /data/f11.txt
#建立硬连接
#不能跨分区建立连接 无法对文件夹创建
软连接: 软连接仅仅包含所连接文件的路径名,因此能链接目录文件,也可以跨越文件系统进行连接。
ln -s 源文件或目录… 链接文件或目标位置
软连接的特点:
1.软连接以路径形式存在可以跨文件系统,硬连接不行
2.软连接可以对一个不存在的文件名进行连接
3.软连接可以对目录进行连接
删除源文件无法访问,再新建同名文件后依然可以访问
可以跨设备
可以支持文件夹
相对路径与绝对路径 建议绝对路径
[root@localhost data]# ln -s f1.txt /opt/f1111.txt
[root@localhost data]# ll /opt/
总用量 8
lrwxrwxrwx. 1 root root 6 8月 26 22:17 f1111.txt -> f1.txt
-rw-r--r--. 3 root root 66 8月 26 21:45 f111.txt
-rw-r--r--. 1 root root 2573 8月 26 11:55 passwd
会认为f1111.txt 与f1.txt在同一目录
3.9 CP
选项 | 说明 |
---|---|
-f | 覆盖目标同名文件或目录时不进行提醒,直接强制复制 |
-i | 覆盖目标同名文件或目录时提醒用户确认 |
-p | 复制时保持源文件的权限、属主及时间标记等属性不变 |
-r | 复制目录时必须使用此选项,表示递归复制所有文件及子目录 |
-a | 完整保留所有的信息 |
-v | 可视化 |
-u | 相当于增备,差异备份(只对文件夹起作用) |
3.10 mv 移动
mv [选项] … 源文件或目录… 目标文件或目录 单个文件
移动 或者改名
3.11 rm 删除文件
rm 【选项】 要删除的文件或目录
3.12 find
命令的特点:
格式: find 【查找范围】 【查找选项】 【查找具体条件】 【处理工作】
查找路径:指定具体目标路径;不指定为默认为当前目录
查找条件:可以对文件名、大小、类型、权限等标准进行查找;默认为找出指定路径下的所有文件
处理动作:对符合条件的文件做操作,默认输出至屏幕(print)
查找类型 | 关键字 | 说明 |
---|---|---|
按名称查找 | -name | 根据目标文件的名称进行查找,允许使用“*”及“?”通配符 -iname "文件名称" 不区分大小写 |
按文件大小查找 | -size | 根据目标文件的大小进行查找 一般使用“+”、“-”号设置超过或小于指定的大小作为查找条件 常用的容量单位包括 kB(注意 k 是小写)、MB、GB |
按文件属主查找 | -user | 根据文件是否属于目标用户进行查找 |
按文件类型查找 | -type | 根据文件的类型进行查找 文件类型包括普通文件(f)、目录(d)、块设备文件(b)、字符设备文件(c)等 |
按inode号 | -inum | 根据文件inode号查找 |
按权限查找 | -perm | 按文件权限查找 |
最大搜索目录深度 | -maxdepth level | 将你的文件已分级的形式查找 |
最小搜索目录深度 | -mindepth level | 同上 find /etc -maxdepth 2 -mindepth 2 |
#### 3.12.1 按名称查找 |
3.12.2 按文件大小
-size [+|-]#UNIT #常用单位:k, M, G,c(byte),注意大小写敏感
#UNIT: #表示(#-1, #],如:6k 表示(5k,6k]
-#UNIT #表示[0,#-1],如:-6k 表示[0,5k]
+#UNIT #表示(#,∞),如:+6k 表示(6k,∞)
3.12.3 根据文件类型查找
-type TYPE
TYPE可以是以下形式:
f: 普通文件
d: 目录文件
l: 符号链接文件
s:套接字文件
b: 块设备文件
c: 字符设备文件
p: 管道文件
3.12.4 处理动作
-print:默认的处理动作,显示至屏幕
-ls:类似于对查找到的文件执行"ls -dils"命令格式输出
-fls file:查找到的所有文件的长格式信息保存至指定文件中,相当于 -ls > file
-delete:删除查找到的文件,慎用!
-ok COMMAND {} ; 对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认
-exec COMMAND {} ; 对查找到的每个文件执行由COMMAND指定的命令
{}: 用于引用查找到的文件名称自身
例子:
#备份配置文件,添加.orig这个扩展名
find -name ".conf" -exec cp {} {}.orig ;
#提示删除存在时间超过3天以上的joe的临时文件
find /tmp -ctime +3 -user joe -ok rm {} ;
#在主目录中寻找可被其它用户写入的文件
find ~ -perm -002 -exec chmod o-w {} ;
#查找/data下的权限为644,后缀为sh的普通文件,增加执行权限
find /data –type f -perm 644 -name "*.sh" –exec chmod 755 {} ;
#fls
find /mnt/ -name "*.bak" -fls abc
#将mnt 下 已bak结尾的文件 保存成abc