shell
shell就是命令解释器
命令解析器的作用:对用户输入到终端的命令进行解析,调用对应的执行程序
shell将用户输入的命令解释成内核能够识别的指令
shell是按照$Path环境变量
常用的命令解析器:
shell – Bourne Shell
路径:/bin/sh
bash – Bourne Again Shell
路径: /bin/bash
查看当前系统所使用的shell
echo $SHELL
查看当前系统下有哪些shell
cat /etc/shells
Linux下的按键
tab键
补全信息,如果命令或路径存在
遍历命令
向上遍历 向上箭头或
向下遍历 向下箭头或
光标移动
左移 向左箭头或ctrl+b
右移 向右箭头或ctrl+f
移动到头部 ctrl+a 或 home
移动到尾部 ctrl+e 或end
字符删除
删除光标前边的字符:ctrl +h 或空格
删除光标后边的字符 ctrl +d
光标后面的字符即光标覆盖的字符
删除光标前所有内容 ctrl+u
删除贯标后所有内容: ctrl+k
Linux下的目标结构
Linux系统的目录结构是一个倒立的树桩结构,根目录用/表示
Linux下主要目录介绍
/bin
binary ,二进制文件,可执行程序,shell命令
/sbin
s是Super User的意思,这里存放的是系统管理员使用的系统管理程序
/dev
device ,在linux下一切皆文件
硬盘,显卡,显示器
字符设备文件、块设备文件
/lib
linux运行的时候需要加载一些动态库
/mnt
手动的挂载目录,如u盘等
/media
外部的自动挂载目录,如光驱等
/root
linux的超级用户root的家目录
/usr
unix system resource 类似于windows的programe files目录
- include目录里存放头文件
- games 目录下的小游戏
/etc
存放配置文件
/etc/passwd
- man 5 passwd 可以查看passwd文件的格式信息
/etc/group
- man 5 group可以查看group文件的格式信息
/etc/profile
系统的配置文件,修改该文件会影响这个系统下面的所有的用户
/opt
安装第三方应用程序
/home
linux操作系统所有用户的家目录
/tmp
存放临时文件
新建在这个目录下的文件会在系统重启后消失
文件和目录操作相关命令
tree命令
以树状图的形式查看目录
tree 查看当前目录
tree 目录 查看指定目录
可能没有,可以通过下面的命令去安装
snap install tree # version 1.8.0+pkg-3fd6, or
apt install tree # version 1.8.0-1
ls命令
查看指定目录下的文件信息
ls 查看当前目录
ls 目录 查看指定目录
相关参数
-a 列出当前目录下的所有文件
. 表示当前目录
.. 表示上一级目录
隐藏文件,以.
开头的文件名
-R 递归方式列出所有目录中的内容
-l 列出文件的详细信息
详细信息说明
第一个字母代表文件类型
文件类型 | |
---|---|
- | 普通文件 |
d | 目录 |
l | 符号链接,相当于windows下的快捷链接 |
s | 套接字 |
p | 管道 |
b | 块设备 |
第二个字母到数字之前
三种用户的权限
r 可读
w 可写
x 可执行
三种从左到右分别指拥有者
,拥有者所在的组的用户
,其他用户
数字代表硬链接计数
后面的一单词代表拥有者
再后面一单词代表所属组
数字接着代表文件大小
后面三组代表最后修改时间
最后面一组就是文件名
ls -la
列出当前目录下所有文件的详细信息,包含隐藏文件
ls -ltr
列出当前目录下的文件,按照时间逆向排序
cd命令
切换目录(change directory),命令使用方式: cd +目录
目录的形式可以是相对路径也可以是绝对路径
pwd命令
查看用户当前所处的工作目录,(printf working directory)
which 命令
显示命令所在的目录,如
touch命令
如果文件不存在,创建文件,如果文件存在更新文件的最后修改时间
命令使用: touch 文件名
mkdir命令
创建新目录,(make directory)
创建方式 mkdir 目录名
如果创建多级目录需要添加参数 -p
rmdir命令
删除空目录,只能删除空目录
使用方式: rmdir 目录名
rm命令
删除文件: rm 文件名
删除目录: rm -r 目录名
参数:
-r 递归删除目录,删除目录必须添加此参数
-i 提示用户是否删除文件或目录
-f 强制删除
注意事项:
使用rm命令删除的文件或目录不会放入回收站,数据不易恢复
cp命令
拷贝文件或目录
命令使用方式:cp源目录或文件 目标目录或文件
-
cp file1 file2(不存在)
拷贝不存在的文件file1
-
cp file1 file2(存在)
拷贝存在的文件file1
-
cp file dir
拷贝文件file到dir目录下
-
cp -r dir1 dir2(不存在)
.拷贝不存在的目录dir1到dir2 -
cp -r dir1 dir2(存在)
拷贝存在的目录dir1到dir2下
cp拷贝目录也可以用-a参数,这样可以保留被拷贝文件的一些属性信息
mv命令
使用方法 mv 源文件 目标文件
改名:
-
mv file1 file2(不存在)
-
mv file1 file2(存在)
文件存在,则会被替换成源文件,而被替换的文件消失,源文件也消失 -
mv dir dir(不存在)
移动:
4. mv file dir(必须存在)
文件必须存在,佛则报错,若目录不存在,则会被认为是改名
mv dir1 dir2
查看文件内容的命令
cat命令
将文件内容一次性输出到终端
使用方法: cat 文件名
缺点:终端长度有限,如果内容过长无法全部显示
可用于文件重定向:
cat file1>file2
相当于cp file1 file2
more命令
文件内容分页显示到终端,但是只能一直向下浏览,不能回退
使用方式:more 文件名
相关操作:
显示下一行:回车
显示下一页:空格
退出:q(Ctrl+C)
less命令
文件内容分页显示到终端,可以上下浏览
使用方式: less 文件名
相关操作:
显示下一行:回车、ctrl+p、键盘向下键
显示上一行:ctrl+n、键盘向上键
显示下一页:空格、PageDown
显示上一页:PageUp
退出:q
head命令
从文件头部开始查看前n行的内容
使用方式:head -n 文件名
如果没有指定行数,默认显示前10行内容
tail命令
从文件尾部向上查看最后n行的内容
使用方式:tail -n 文件名
如果没有指定行数,默认显示最后10行的内容
使用history可以显示用户输入的所有命令
应用:
显示日志
tail -f test.log(实时显示文件内容)
wc命令
wc file
显示文件行数,字节数,单词数
wc -l file
显示文件的总行数
wc -c file
显示文件的总字节数
wc -w file
显示文件的总单词数
whoami
显示当前登录的用户名
用户权限、用户、用户组
修改文件权限chmod
linux是通过权限对文件进行控制的,通过使用chmod命令可以修改文件相关权限
文件设定法
命令: chmod [who][+]-[=][mode] 文件名
操作对象[who]
u – 用户(user)
g – 同组用户(group)
o – 其他用户(other)
a --所有用户 (all)【默认】
操作符[±=]
+
– 添加权限-
– 取消权限=
– 赋予权限
权限[mode]
r
– 读w
– 写x
– 执行
数字设定法
命令: chmod [+][-][=][mode] 文件名
数字表示的含义
0
–没有权限1
–执行权限(x)2
–写权限(w)4
–读权限®
若给file1 r-xrw-r–
则
注意点:使用数字设定法,一定要使用3位的8进制数,如上面的564
修改文件所有者和所有组
- 修改文件所有者 chown
用法:chown 文件所有者 文件名
- 修改文件所有者和所属组 chown
用法:chown 文件所有者:文件所属组 文件名
find 命令
按文件名查询:使用参数 -name
命令 find 路径 -name "文件名"
按文件类型查询:使用参数 -type
命令: find 路径 -type 类型
类型:
- f->普通文件类型
- d-> 目录
- l->符号链接
- b->块设备文件
- c->字符设备文件
- s ->socket文件
- p->管道文件
按文件大小查询:使用参数 -size
命令:find 路径 -size 范围
范围
- 大于:
+
表示 - 小于:
-
表示 - 等于:不需要添加符号
大小
- M 必须大写
- k必须小写
- c 表示字节数
按文件日期
创建日期
-ctime -n/+n
-n
:n天以内+n
:n天以外
修改日期
-mtime -n/+n
访问日期
-atime -n/+n
按深度
-maxdepth n
搜索n层以下的目录,搜索的层数不大于n层-mindepth n
搜索n层以上的目录,搜索的层数不小于n层
高级查找
find 路径 日期/类型/大小 -exec shell命令 {} \;
解释:shell命令用来做特定的操作,例如列出文件的详细信息 ls-l
{} \; 这是固定的结尾,注意{}和\之间有一个空格
find 路径 日期/类型/大小 | xargs shell命令
|管道符 和上面的效果差不多,但如果查找的目标文件有很多,用这个,这个会分段显示
grep 命令
grep -(有目录) “查找的内容” 搜索的路径
- -r 参数 ,若是目录,则可以递归搜索
- -n参数可以显示该查找内容所在的行号
- -i参数可以忽略大小进行查找
- -v参数不显示包含有某字符串
find与grep的组合使用
通过管道符,可以用find查找文件,用grep去进行过滤显示
如:
find . -name "*.c" | xargs grep -n "main"
意义:查找当前目录下包含"main"的.c文件,并显示其行号
给频繁应用的命令起别名
三步:
- 在.bashrc 文件中添加你要使用的命令且为其添加别名
alias 别名='命令'
- 让其生效
. .bashrc
- 测试使用
切换root和普通用户
Ubuntu
切换到root
sudo su
切换到普通用户
su user(用户名)
软件安装
在线安装
软件安装: sudo apt-get install 软件名
软件卸载: sudo apt-get remove 软件名
更新软件列表: sudo apt-get update
清理安装包:sudo apt-get clean
清理的是缓存路径: /var/cache/apt/archivers
软件包安装
在Ubuntu系统下必须有deb格式的安装包
软件安装: sudo dpkg -i xxx.deb
软件卸载: sudo dpkg -r 软件名
linux中常用的压缩工具
gzip和bzip
不能压缩目录,只能一个一个文件进行压缩,压缩后会使源文件消失
gzip *
压缩当前目录下所有的文件,但目录不能压缩gunzip *
解压当前目录下所有的.gz
文件bzip2 *
压缩当前目录下所有的文件,但是目录不能压缩bunzip2 *
解压当前目录下所有的.bz2
文件
tar工具
相关参数说明:
- z: 用gzip来压缩/解压文件
- j: 用bzip来压缩/解压文件
- c: create,创建新的压缩文件,与x互斥使用
- x: 从压缩文件中释放文件,与c互斥使用
- v: 详细报告tar处理的文件信息
- f: 指定压缩文件的名字
- t: 查看压缩包中有哪些文件
压缩
1.压缩成.tar文件
tar cvf 压缩包名字.tar 原材料(即要打包压缩的文件或目录)
2.压缩成.tar.gz文件
先压缩成.tar文件,再把.tar文件压缩成.tar.gz文件
tar zcvf 压缩包名字.tar.gz 原材料(即要打包压缩的文件或目录)
2.压缩成.tar.bz2文件
先压缩成.tar文件,再把.tar文件压缩成.tar.bz2文件
tar jcvf 压缩包名字.tar.bz2 原材料(即要打包压缩的文件或目录)
解压缩
tar xvf 已有的压缩包 (xxx.tar)
tar zxvf 已有的压缩包 (xxx.tar.gz)
tar jxvf 已有的压缩包 (xxx.tar.bz2)
如果不加参数,解压到当前目录
添加参数-C 解压到指定目录
... -C 路径
查看压缩包中有哪些文件
tar -tvf xxx.tar
rar 工具
使用前需要安装rar工具
sudo apt install rar
压缩
命令: rar a-r 要压缩的文件(含目录)
压缩目录需要使用参数 -r
打包的心文件不需要指定后缀
解压缩
命令: rar x xxx.rar 压缩目录
不写压缩目录则直接解压到当前目录,若解压的目录不存在则会报错
zip工具
压缩:
zip -r 压缩包名 要压缩的文件(含文件或目录)
压缩目录需要使用参数-r
使用该命令不需要指定压缩包后缀
解压缩
unzip 压缩包名
解压到指定目录:添加参数 -d 解压目录
解压目录若不存在则会创建
软链接
软链接类似于windows下的快捷方式
创建软链接
ln -s 文件名 快捷方式的名字
目录也可以创建软链接
注意事项:
- 创建软链接,源文件一定要使用绝对路径,否则,当软链接位置发生改变,就不能找到那个文件了
- 软链接的文件的大小是:路径+文件名的总字节数
硬链接
硬链接的本质
硬链接的本质是不同的文件名所在的inode节点是相同的,相同的inode节点指向了相同的数据块,所以他们的文件内容是一样的,文件内容会同步
ls -i 文件名
可以查看文件的inode节点
stat 文件名
可以查看inode节点的信息
当创建一个文件,硬链接计数为1
给文件创建一个硬链接后,硬链接计数加1
删除一个硬链接后,硬链接计数减1
ln 文件名 硬链接的名字
使用硬链接的注意事项
- 硬链接不能指向目录
- 硬链接对绝对路径没有要求
- 硬链接不能跨文件系统
硬链接文件和源文件的inode是相同的,文件系统的inode要求唯一,跨文件系统可能会使inode不同,所以硬链接不能跨文件系统