文章目录
- 01 学习目标
- 02 Linux/Unix 操作系统简介
- 2.1 Linux 操作系统的目标
- 2.2 Linux 操作系统的作用
- 2.3 Unix 家族历史
- 2.4 Linux 家族历史
- 2.5 Linux 和Unix 的联系
- 2.6 Linux 内核介绍
- 2.7 Linux 发行版本
- 2.8 Unix/Linux 开发应用领域介绍
- 03 Linux 目录结构
- 3.1 Win 和Linux 文件系统区别
- 3.2 Linux 常见目录介绍
- 04 Linux命令解析器
- 4.1 概述
- 4.2 shell 命令解释器
- 05 Bash 解析器常用快捷键
- 06 Linux 系统相关快捷键
- 07 内建命令和外部命令
- 08 Linux命令格式
- 09 帮助文档查看方法
- 9.1 man
- 9.2 内建命令(help)
- 9.3 外部命令(--help)
- 10 绝对路径和相对路径
- 11 目录相关的命令
- 11.1 pwd
- 11.2 cd
- 11.3 mkdir
- 11.4 rmdir
- 12 文件类型
- 13 文件相关命令
- 13.1 ls
- 13.2 touch
- 13.3 cp
- 13.4 rm
- 13.5 mv
- 14 文件内容查看命令
- 14.1 cat
- 14.2 more
- 14.3 less
- 14.4 head
- 14.5 tail
- 15 du和df命令
- 15.1 du
- 15.2 df
- 16 查找相关命令
- 16.1 find
- 16.2 grep
- 17 管道
- 18 压缩包管理
- 18.1 tar
- 18.2 gzip
- 18.3 bzip2
- 18.4 zip 和 unzip
- 19 文件权限管理
- 19.1 文件权限
- 19.2 访问用户分类
- 19.3 访问权限说明
- 19.4 chmod
- 19.5 chown
- 19.6 chgrp
- 20 进程管理
- 20.1 ps
- 20.2 top
- 20.3 kill
- 20.4 killall
- 21 软件安装和卸载
- 21.1 在线安装
- 21.2 软件包安装
- 22 重定向
- 23 其它命令
- 23.1 tree
- 23.2 ln 链接
- 23.3 scp
01 学习目标
- Linux 下的目录结构和常见目录的作用
- Linux 下的相对路径和绝对路径
- Linux 下常用文件和目录操作相关的命令
- 修改用户权限、用户和用户组相关的命令
- find 命令相关参数进行文件查找
- grep 命令根据文件内容进行文件的查找
- 熟练使用压缩工具完成文件或目录的压缩解压缩
- 熟练掌握 Ubuntu下的软件安装和卸载
02 Linux/Unix 操作系统简介
2.1 Linux 操作系统的目标
- 方便性:使计算机系统易于使用
- 有效性:以更有效的方式使用计算机系统资源
- 扩展性:方便用户有效开发、测试和引进新功能
- 开放性:所谓开放性,是指系统能遵循世界标准规范,特别是遵循开放系统互连OSI 国际标准。
2.2 Linux 操作系统的作用
操作系统在计算机系统中承上启下的地位:向下封装硬件,向上提供操作接口。
2.3 Unix 家族历史
- 1965:贝尔实验室(Bell Labs)加入一项由通用电气和麻省理工学院合作的计划,该计划要建立一套多使用者、多任务、多层次的 MULTICS 操作系统。后来因为项目太为复杂失败。
- 1969:其主要开发者 Thompson(后被称为UNIX之父)和 Ritchie 领导一组开发者,开发了一个新的多任务操作系统—UNICS,后来被改名为 Unix,最初的 Unix 是用 B 语言和汇编语言混合编写而成。
- 1971:两人在贝尔实验室共同发明了 C 语言,并于 1973 用 C 语言重写了 Unix。
- 1974:UNIX 第一次出现在贝尔实验室以外。此后 UNIX 被政府机关,研究机构,企业和大学注意到,并逐渐流行开来。
- 1980:有两个最主要的 Unix 的版本线,一个是 Berkeley 的 BSD UNIX,另一个是 AT&T 的 Unix,两者的竞争最终引发了 Unix 的战争,最终导致 Unix 出现各种各样的变种。
- 1982:AT&T 基于版本7开发了 UNIX System Ⅲ的第一个商业版本,并不再开源。
- 1992~2001:由于版权问题,AT&T 公司与 BSD 开发组开始了一场将近 10 年的版权官司。UNIX 由于其昂贵的费用,仅局限于大型机的应用;BSD 因为版权问题,失去了宝贵的发展时期。
2.4 Linux 家族历史
- Minix(mini-UNIX)最初是由 Andrew Tanenbaum 教授,仿照 4.3BSD 的源代码,白手起家完成了 12000 行 C 语言的编写工作这个系统只是一个教学工具,没有什么实际应用价值。
- 1990年,Linus Torvalds 决定编写一个自己的 Minix 内核,初名为 Linus’ Minix,意为 Linus 的 Minix 内核,后来改名为 Linux,此内核于 1991 年正式发布,并逐渐引起人们的注意。
- Linux 操作系统的诞生、发展、和成长过程依赖于五个重要支柱:unix操作系统、minix 操作系统、GNU 计划、POSIX 标准和互联网。
- GNU 计划:GNU 是 “GNU is Not Unix” 的递归缩写,由 Richard M.Stallman 于1984年创办,旨在开发一个免费、类 unix 的操作系统—GNU系统及其开发工具;Emacs 编辑系统、BASH shell 程序、GCC、GDB 等开发工具都是 GNU 组织的产品。
- 1992年 Linux 与其他 GNU 软件结合,完全自由的操作系统正式诞生。该操作系统往往被称为“GNU/Linux”或简称 Linux。
- POSIX 标准:POSIX 标准定义了操作系统应该为应用程序提供的接口标准,POSIX标准用来统一Unix、Linux 各分支编程接口,以提高其通用性和可移植性。
2.5 Linux 和Unix 的联系
- UNIX 系统是工作站上最常用的操作系统,它是一个多用户、多任务的实时操作系统,允许多人同时访问计算机, 并同时运行多个任务。UNIX 系统具有稳定、高效、安全、方便、功能强大等诸多优点,自 20 世纪 70 年代开始便运行在许多大型和小型计算机上。
- UNIX 虽然是一个安全、稳定且功能强大的操作系统,但它也一直是一种大型的而且对运行平台要求很高的操作系统,只能在工作站或小型机上才能发挥全部功能,并且价格昂贵,对普通用户来说是可望而不可及的,这为后来 Linux 的崛起提供了机会,Linux 是一个类 UNIX 操作系统。
- Linux是免费的、不受版权制约、与 UNIX 兼容的操作系统。
- Linux在 x86 架构上实现了 UNIX 系统的全部特性,具有多用户多任务的能力,同时保持了高效性和稳定性。
- Linux 具有如下的优秀的特点:
- 开放性;
- 完全免费;
- 多用户;
- 多任务;
- 良好的用户界面;
- 设备独立性;
- 提供了丰富的网络功能;
- 可靠的系统安全性;
- 良好的可移植性。
2.6 Linux 内核介绍
内核(kernel)是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序,它提供了一个在裸设备与应用程序间的抽象层。
Linux内核版本又分为稳定版和开发版,两种版本是相互关联,相互循环:
- 稳定版:具有工业级强度,可以广泛地应用和部署。新的稳定版相对于较旧的只是修正一些 bug 或加入一些新的驱动程序。
- 开发版:由于要试验各种解决方案,所以变化很快。
内核源码网址:http://www.kernel.org, 所有来自全世界的对 Linux 源码的修改最终都会汇总到这个网站,由 Linus 领导的开源社区对其进行甄别和修改最终决定是否进入到Linux主线内核源码中。
Linux内核代码图:
Linux内核源码获取方式:
Protocol | Location |
---|---|
HTTP | https://www.kernel.org/pub/ |
GIT | https://git.kernel.org/ |
RSYNC | rsync://rsync.kernel.org/pub/ |
2.7 Linux 发行版本
Linux 发行版 (也被叫做 GNU/Linux 发行版) 通常包含了包括桌面环境、办公套件、媒体播放器、数据库等应用软件。
这些操作系统通常由 Linux 内核、以及来自 GNU 计划的大量的函式库,和基于X Window 的图形界面,在 X Window 中用户同样可以通过使用鼠标对窗口、菜单等进行操作来完成相应的工作。
X Window 系统是一个非常出色的图形窗口系统,是类 UNIX 系统的图形用户界面的工业标准。X Window 系统最重要的特征之一就是它的结构与设备无关。
X Window 系统的主要特点有如下几点:
- X Window 系统是客户机/服务器结构的。X Window 的实现是与操作系统内核分开的,其主要由 X Server 和 X Client 两部分组成。
- X Window 系统不是 Unix/Linux 操作系统的必须的构成部分,而只是一个可选的应用程序组件。
Best Linux distro for developers in 2018
POSITION | 2015 | 2014 | 2018 |
---|---|---|---|
1 | Linux Mint | Linux Mint | Arch Linux |
2 | Debian | Ubuntu | Debian |
3 | Ubuntu | Debian | Raspbian |
4 | openSUSE | openSUSE | Gentoo |
5 | Fedora | Fedora | Ubuntu |
6 | Mageia | Mageia | Fedora |
7 | Manjaro | Arch | OpenSUSE |
8 | CentOS | Elementary | CentOS |
9 | Arch | CentOS | Solus |
10 | Elementary | Zorin | Puppy Linux |
参考网址:Best Linux distro for developers in 2018 |
目前国内使用最多的就是 Ubuntu 与 Centos,其中 Ubuntu 使用最多,常用于一般的开发中,而 Centos 一般用于与 Orical 等数据库相关的开发中。查看 linux 操作系统版本方法(参考文章):
- 方法一:使用 Linux 的 etc 目录中的 os-release 文件,运行命令:
cat /etc/os-release
; - 方法二(推荐):使使用 lsb_release 命令检查 Linux 操作系统(OS):
lsb_release -a
; - 方法三:使用 Linux 的 proc 目录中可用的版本文件,运行命令:
cat /proc/version检查linux版本
。
2.8 Unix/Linux 开发应用领域介绍
- Unix/Linux 服务器
是目前Unix/Linux应用最多的一个领域,可以提供Web、FTP、Gopher、SMTP/POP3、Proxy/Cache、DNS等服务器,支持服务器集群,支持虚拟主机、虚拟服务、VPN等。 - 嵌入式Linux系统
嵌入式Linux是将流行的Linux操作系统进行剪裁修改,能够在嵌入式计算机系统上运行的一种操作系统。Linux嵌入式系统能够支持多种CPU和硬件平台,性能稳定,剪裁性好,开发和使用容易。其中包括Embedix、uCLinux、muLinux等。 - 桌面应用
近年来,Linux系统特别强调在桌面应用方面的改进,并且已达到相当的水平,完全可以作为一种集办公应用、多媒体应用、网络应用等多方面功能于一体的图形界面操作系统,在办公应用方面,Unix/Linux集成了openOffice、SUN公司的StarOffice以及KOffice等工具。 - 电子政务
随着Linux的快速发展,Linux已逐渐成为Windows系统重要的竞争力量。尤其是Linux在安全性方面的独特优势,又使得Linux在政府应用领域得到很大的发展。目前一些国家正将其电子政务系统向Linux平台迁移。中国政府也对Linux给予极大的支持。
03 Linux 目录结构
3.1 Win 和Linux 文件系统区别
在 windows 平台下,打开“计算机”,我们看到的是一个个的驱动器盘符:
每个驱动器都有自己的根目录结构,这样形成了多个树并列的情形(即
windows 系统是磁盘分区的),如图所示:
- windows 系统中不同磁盘之间的文件、文件夹移动比较缓慢,因为文件/文件夹会从一个磁盘移动到另一个磁盘
- windows 系统中同一个磁盘下,文件/文件夹的移动非常快,因为不涉及到从一个磁盘到另一个磁盘,操作系统只是修改了指针的指向。
在 Linux 下,我们是看不到这些驱动器盘符,我们看到的是文件夹(目录):
- RedHat 系统:
- Ubuntu 系统
在早期的 UNIX 系统中,各个厂家各自定义了自己的 UNIX 系统文件目录,比较混乱。Linux 面世不久后,对文件目录进行了标准化,于 1994 年对根文件目录做了统一的规范,推出 FHS ( Filesystem Hierarchy Standard ) 的 Linux 文件系统层次结构标准。FHS 标准规定了 Linux 根目录各文件夹的名称及作用,统一了 Linux 界命名混乱的局面。
和 Windows 操作系统类似:
- 所有 Unix/Linux 的数据都是由文件系统按照树型目录结构管理的。
- Unix/Linux 操作系统同样要区分文件的类型,判断文件的存取属性和可执行属性。
- Windows系统中存在磁盘分区Unix/Linux也采用了树状结构的文件系统,它由目录和目录下的文件一起构成。
但Unix/Linux文件系统不使用驱动器这个概念,而是使用单一的根目录结构,所有的分区都挂载到单一的“/”目录上,其结构示意图如图所示:
无论何种版本的 Linux 发行版,桌面、应用都只是 Linux 的外衣,文件组织、目录结构才是 Linux 的内心。
Windows 和 linux 下文件分隔符的不同:Windows下是以 ’\’ 为分隔符,而linux下为 ”/“ 为分隔符。
3.2 Linux 常见目录介绍
- /: 根目录,一般根目录下只存放目录,在Linux下有且只有一个根目录。所有的东西都是从这里开始。当你在终端里输入“/home”,你其实是在告诉电脑,先从/(根目录)开始,再进入到home目录。
- /bin: /usr/bin: 可执行二进制文件的目录,如常用的命令 ls、tar、mv、cat等。
- /boot: 放置linux系统启动时用到的一些文件,如 Linux 的内核文件,/boot/vmlinuz;系统引导管理器,/boot/grub。
- /dev: 存放 linux 系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱 mount /dev/cdrom /mnt。
- /etc:系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有 /etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/xinetd.d。
- /home: 系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下,~ 表示当前用户的家目录,~edu 表示用户 edu 的家目录。
- /lib,/usr/lib,/usr/local/lib: 系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助。
- /lost+fount: 系统异常产生错误时,会将一些遗失的片段放置于此目录下。
- /mnt:/media: 光盘默认挂载点,通常光盘挂载于 /mnt/cdrom 下,也不一定,可以选择任意位置进行挂载。
- /opt: 给主机额外安装软件所摆放的目录。
- /proc:此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的目录有 /proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/* 等。
- /root: 系统管理员 root 的家目录。
- /sbin:/usr/sbin:/usr/local/sbin: 放置系统管理员使用的可执行命令,如fdisk、shutdown、mount 等。与 /bin 不同的是,这几个目录是给系统管理员 root 使用的命令,一般用户只能"查看"而不能设置和使用。
- /tmp: 一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下。
- /srv: 服务启动之后需要访问的数据目录,如 www 服务需要访问的网页数据存放在 /srv/www 内。
- /usr:应用程序存放目录,/usr/bin 存放应用程序,/usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件。/usr/local 存放软件升级包。/usr/share/doc 系统说明文件存放目录。/usr/share/man 程序说明文件存放目录。
- /var: 放置系统执行过程中经常变化的文件,如随时更改的日志文件 /var/log,/var/log/message:所有的登录文件存放录,/var/spool/mail:邮件存放的目录,/var/run:程序或服务启动后,其PID存放在该目录下。
上面的目录比较多,但以下几个目录相对于开发而言比较重要:bin目录、boot目录、dev目录、etc目录、home目录、lib目录、lib64目录、sbin目录、sys目录
04 Linux命令解析器
4.1 概述
- 很多人可能在电视或电影中看到过类似的场景,黑客面对一个黑色的屏幕,上面飘着密密麻麻的字符,梆梆一顿敲,就完成了窃取资料的任务。
- Linux 刚出世时没有什么图形界面,所有的操作全靠命令完成,就如同电视里的黑客那样,充满了神秘与晦涩。
- 近几年来,尽管 Linux 发展得非常迅速,图形界面越来越友好,但是在真正的开发过程中,Linux 命令行的应用还是占有非常重要的席位,而且许多Linux功能在命令行界面要比图形化界面下运行的快。可以说不会命令行,就不算会 Linux。
- Linux 提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。Linux 发行版本最少的命令也有 200 多个,这里只介绍比较重要和使用频率最多的命令。
4.2 shell 命令解释器
命令解析器的作用:交互式地解释、执行用户输入的命令,将用户的操作翻译成机器可以识别的语言,完成相应功能。
Linux系统中提供了好几种不同的命令解释器,如shell(/bin/sh)、bash(/bin/bash)等,一般默认使用bash作为默认的解释器。
05 Bash 解析器常用快捷键
5.1 Tab 键
- 补齐命令
- 补齐路径
- 显示当前目录下的所有目录
5.2 清屏
clear 作用为清除终端上的显示(类似于 DOS 的 cls 清屏功能),也可使用快捷键:Ctrl + L ( “L” 为字母 )。
5.3 中断进程
ctlr+c 的作用是中断终端的操作。
5.4 遍历输入的历史命令
- 从当前位置向上遍历:ctrl + p (↑)
- 从当前位置向下遍历: ctrl + n(↓)
5.5 光标相关操作
- 光标左移: ctrl + b (←)
- 坐标右移: ctrl + f (→)
- 移动到头部: ctrl + a(Home)
- 移动到尾部: ctlr + e(End)
5.6 字符删除
- 删除光标前边的字符:ctrl + h(Backspace)
- 删除光标后边的字符:ctrl + d,光标后边的字符即光标覆盖的字符
- 删除光标前所有内容:ctrl + u
- 删除光标后所有内容:ctrl + k
06 Linux 系统相关快捷键
6.1 图形打开终端方式:(三种方式)
1)Alt + F2 打开运行输入 gnome-terminal
2) 搜索您的计算机 --> 输入终端 --> 打开
3)右击桌面打开终端
6.2 终端相关快捷键
(终端必须选中)
Ctrl + Shift + N 新建一个终端 Ctrl + Shift + T 在终端里新建一个标签
Ctrl + Shift + W 关闭标签页 Ctrl + Shift + Q 关闭窗口
Ctrl + Shift + C 复制 Ctrl + Shift + V 粘贴
Alt + [1 - 9] 标签之间切换 Ctrl + Shift + = 放大终端字体
Ctrl + - 缩小终端字体 Ctrl + 0 普通大小
F11 全屏 再次按F11退出全屏 Ctrl + D 关闭当前一个终端
Alt + F4 关闭整个终端 Ctrl + Shift + F 查找
Alt + Tab 应用程序间切换 Ctrl + Alt + Backspace 注销
Ctrl + Alt + F7 回到图形界面 Ctrl + Alt + F1到 Ctrl + Alt + F6 可以访问6个虚拟控制台
终端字体推荐使用:DejaVu Sans Mono Book
编辑–> 配置文件首选项–> 常规
07 内建命令和外部命令
7.1 内建命令
shell 内建命令是指 bash(或其它版本)工具中集成的命令。操作系统中的有的命令可能会有多个版本,这种情况下操作系统会默认采用内建命令,比如 bash中的 echo 命令与 /bin/echo 是两个不同的命令,尽管他们行为大体相仿。当在 bash 中键入一个命令时系统会先看他是否是一个内建命令,如果不是才会查看是否是系统命令或第三方工具。所以在 bash 中键入 echo 命令实际上执行 bash 工具集中的 bash 命令也就是内建命令,而不是 /bin/echo 这个系统命令。
7.2 外部命令
外部命令是安装外部软件所带的命令
7.3 内建命令和外部命令对比
内建命令要比系统论命令有比较高的执行效率。外部命令执行时往往需要 fork 出(产生出)一个子进程,而内建命令一般不用。外部命令是在 bash 之外额外安装的,通常放在 /bin,/usr/bin,/sbin,/usr/sbin…等等。可通过 “echo $PATH” 命令查看外部命令的存储路径,比如:ls、vi等。
7.4 命令类型查看方法
使用 type 命令查看,格式:
type [-afptP] 名称 [名称 …] 显示命令类型的信息。
使用方法示例:
yxm@192:~$ type -a cd
cd is a shell builtin
# cd 是 shell 内建
yxm@192:~$ type -a echo
echo is a shell builtin
echo is /bin/echo
# echo 是 shell 内建
# echo 是 /bin/echo
yxm@192:~$ type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls
# ls 是 `ls --color=auto' 的别名
# ls 是 /bin/ls
如上所图 type -a echo
命令查找到两个类型,说明操作系统中的有的命令可能会有多个版本,这种情况下操作系统会默认采用内建命令。
08 Linux命令格式
command [ -options] [parameter1] …
说明:
- command:命令名,相应功能的英文单词或单词的缩写
- [-options]:选项,可用来对命令进行控制,也可以省略,[]代表可选
- parameter1 …:传给命令的参数,可以是零个一个或多个
【注意】linux 命令参数有的加一个 ‘-’,有的加两个 “–”:
- 加一个 ‘-’ 表示是省略模式,后面加单词简略的字母;
- 加两个 “–” 表示全写模式,后面加单词。
09 帮助文档查看方法
9.1 man
man 是 Linux 提供的一个手册,包含了绝大部分的命令、函数使用说明。该手册分成很多章节(section),使用 man 时可以指定不同的章节来浏览不同的内容。
格式: man [选项] 命令名,示例如下:
deng@itcast:~$ man man
man 中各个 section 意义如下(8种中常用的也就是前三种):
1).Standard commands(标准命令)
2).System calls(系统调用,如open,write)
3).Library functions(库函数,如printf,fopen)
4).Special devices(设备文件的说明,/dev下各种设备)
5).File formats(文件格式,如passwd)
6).Games and toys(游戏和娱乐)
7).Miscellaneous(杂项、惯例与协定等,例如Linux档案系统、网络协定、ASCII 码;environ全局变量)
8).Administrative Commands(管理员命令,如ifconfig)
man设置了如下的功能键:
功能键 | 功能 |
---|---|
空格键 | 显示手册页的下一屏 |
Enter键 | 一次滚动手册页的一行 |
b | 回滚一屏 |
f | 前滚一屏 |
q | 退出man命令 |
h | 列出所有功能键 |
/word | 搜索word字符串 |
用法示例:
man -k passwd 搜索关键词 passwd
man -a passwd 浏览 passwd 所有相关的页
man -f passwd 等价于 whatis
man 1 printf 浏览 printf 第 1 页介绍
man 2 read 浏览 read 第 2 页介绍
man 3 printf 浏览 printf 第 3 页介绍
man 5 passwd 浏览 passwd 第 5 页介绍
man 8 chpasswd 浏览 chpasswd 第 8 页介绍
示例:
查看 ls 的用法:man 1 ls ( 1:为数字“1”,代表第 1 个 section,标准命令 ) :
实际上,我们不用指定第几个章节也用查看,如,man ls。但是有一种情况,假如,命令的名字和函数的名字刚好重名(如:printf),它既是命令,也可以是库函数,如果我们不指定章节号,man printf,它只查看命令的用法,不会查询函数的用法,因为 man 是按照手册的章节号的顺序进行搜索的。
所以,使用 man 手册时,最好指定章节号:
9.2 内建命令(help)
格式: help + 内建命令,应用示例:
9.3 外部命令(–help)
一般是 Linux 命令自带的帮助信息,并不是所有命令都自带这个选项。
如我们想查看命令 ls 的用法:ls --help
10 绝对路径和相对路径
前置信息: [[01_Liux 基础介绍-基础命令1#03 Linux 目录结构|03 Linux 目录结构]]
Unix/Linux 路径由到达定位文件的目录组成。在 Unix/Linux 系统中组成路径的目录分割符为斜杠 “/”,而DOS则用反斜杠 “\” 来分割各个目录(Windows下是以 “\” 为分隔符,而linux下为 ”/“ 为分隔符。)。Linux 所有的目录和文件名大小写敏感。
路径分为绝对路径和相对路径:
1)绝对路径
- 绝对路径是从目录树的树根 “/” 目录开始往下直至到达文件所经过的所有节点目录。【注意】绝对路径都是从 “/” 开始的,所以第一个字符一定是“/”。
- 下级目录接在上级目录后面用 “/” 隔开。
/home/test
/var/ftp/pub
2)相对路径
- 相对路径是指目标目录相对于当前目录的位置。
- 如果不在当前目录下,则需要使用两个特殊目录 “.” 和 “…” 了。目录 “.” 指向当前目录,而目录 “…” 指向上一级目录。
11 目录相关的命令
11.1 pwd
格式:pwd [-LP] 打印当前工作目录的名字。
使用pwd命令可以显示当前的工作目录,该命令很简单,直接输入 pwd 即可,后面不带参数。
deng@itcast:~$ pwd
/home/deng
11.2 cd
在使用 Unix/Linux 的时候,经常需要更换工作目录。cd 命令可以帮助用户切换工作目录。Linux 所有的目录和文件名大小写敏感。cd 后面可跟绝对路径,也可以跟相对路径。如果省略目录,则默认切换到当前用户的主目录。
命令 | 含义 |
---|---|
cd | 切换到当前用户的主目录(/home/用户目录),用户登陆的时候,默认的目录就是用户的主目录。 |
cd ~ | 切换到当前用户的主目录(/home/用户目录) |
cd . | 切换到当前目录 |
cd … | 切换到上级目录 |
cd - | 可进入上一个进入的目录 |
【注意】
- 如果路径是从根路径开始的,则路径的前面需要加上 “ / ”,如 “ /mnt ”
- 通常进入某个目录里的文件夹,前面不用加 “ / ”。
11.3 mkdir
用法:mkdir [选项]… 目录…
通过 mkdir 命令可以创建一个新的目录(不能新建普通文件)。参数-p可递归创建目录。
- 参数 -p:若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录,即创建递归目录。
【注意】
- 新建目录的名称不能与当前目录中已有的目录或文件同名
- 目录创建者必须对当前目录具有写权限。
使用示例:
mkdir test 在当前目录下创建test目录
mkdir /tmp/test 在根目录下tmp目录里创建test目录
mkdir file{1..100} 在当前目录下创建file1到file100的目录,这里会创建100个目录
xm@192:~/test$ mkdir file{1..10}
yxm@192:~/test$ ls
file1 file10 file2 file3 file4 file5 file6 file7 file8 file9 ......
mkdir "file{1..100}" 在当前目录下创建file{1..100}目录,这里只创建一个目录
yxm@192:~/test$ mkdir "file{1..100}"
yxm@192:~/test$ ls
file{1..100}
mkdir -p a/b/c 在当前目录下创建a/b/c目录树
yxm@192:~/test$ mkdir -p a/b/c
yxm@192:~/test$ tree
.
└── a
└── b
└── c
mkdir "a b" 创建以"a b"命名的一个目录,注意:"a b"是一个文件名
yxm@192:~$ mkdir "a b"
yxm@192:~$ ls
a b myshare study
mkdir a\ b 创建以"a b"命名的一个目录,注意:"a b"是一个文件名
yxm@192:~$ mkdir a\ b
yxm@192:~$ ls
a b myshare study
mkdir a b 创建目录a和目录b
yxm@192:~$ mkdir a b
yxm@192:~$ ls
a b myshare study
【注意】mkdir创建文件夹时,如果文件名有特殊字符,可以使用转义字符,也可以在创建时给文件名加双引号或者单引号。
11.4 rmdir
用法:rmdir [选项]… 目录… 删除指定的空目录。可使用 rmdir 命令删除一个目录。【注意】必须离开目录,并且目录必须为空目录,不然提示删除失败。
使用示例:
rmdir test 删除当前目录的 test 目录,test 必须是空目录
rmdir /tmp/test 删除/tmp下的test目录
rmdir file{1..100} 删除 file1 到 file100 的目录
rmdir "file{1..100}" 删除 file{1..100} 目录
rmdir "a b" 删除 a b 这个目录
rmdir a\\ b 删除 "a b" 目录
rmdir a b c 删除目录 a 目录 b 目录 c
12 文件类型
前置信息: [[01_Liux 基础介绍-基础命令1#03 Linux 目录结构|03 Linux 目录结构]]
Unix/Linux 对数据文件(.mp3、.bmp),程序文件(.c、.h、.o),设备文件(LCD、触摸屏、鼠标),网络文件(socket)等的管理都抽象为文件,使用统一的方式方法管理。 Linux下一切皆文件。
在 Unix/Linux 操作系统中也必须区分文件类型,通过文件类型可以判断文件属于可执行文件、文本文件还是数据文件。在 Unix/Linux 系统中文件可以没有扩展名。
通常,Unix/Linux 系统中常用的文件类型有7种:普通文件、目录文件、设备文件、管道文件、链接文件和套接字。
1)普通文件
Linux 中最多的一种文件类型,普通文件一般包括纯文本文件(ASCII);二进制文件(binary);数据格式的文件(data);可执行的二进制程序文件;各种压缩文件。第一个属性为 [-]。
在 Unix/Linux 中可以通过 file 命令来查看文件的类型。如果 file 文件后面携带文件名,则查看指定文件的类型,如果携带通配符 “*”,则可以查看当前目录下的所有文件的类型。
# 普通文件
deng@itcast:~/test$ ls -l /etc/passwd
-rw-r--r-- 1 root root 2372 3月 21 22:48 /etc/passwd
2)目录文件
Unix/Linux 系统把目录看成是一种特殊的文件,利用它构成文件系统的树型结构。第一个属性为 [d]。
目录文件只允许系统管理员对其进行修改,用户进程可以读取目录文件,但不能对它们进行修改。每个目录文件至少包括两个条目,“…”表示上一级目录,“.”表示该目录本身。
# 目录文件
deng@itcast:~/test$ ls -ld /etc
drwxr-xr-x 134 root root 12288 5月 28 11:28 /etc
3)设备文件
Unix/Linux 系统把每个设备都映射成一个文件,这就是设备文件。它是用于向 I/O 设备提供连接的一种文件,分为字符设备和块设备文件。块设备文件第一个属性为 [b];字符设备第一个属性为 [c]。
字符设备的存取以一个字符为单位,块设备的存取以字符块为单位。每一种 I/O 设备对应一个设备文件,存放在 /dev 目录中,如行式打印机对应/dev/lp,第一个软盘驱动器对应/dev/fd0。
deng@itcast:~/share$ echo "hello world" > /dev/pts/22
hello world
# 字符设备
deng@itcast:~/test$ ls -l /dev/input/mouse0
crw-rw---- 1 root input 13, 32 5月 26 17:01 /dev/input/mouse0
# 块设备
deng@itcast:~/test$ ls -l /dev/sda1
brw-rw---- 1 root disk 8, 1 5月 26 17:01 /dev/sda1
4)管道文件
管道文件也是 Unix/Linux 中较特殊的文件类型,这类文件多用于进程间的通信。第一个属性为 [p]。
# 管道文件
deng@itcast:~/test$ mkfifo fifo
deng@itcast:~/test$ ls -l fifo
prw-rw-r-- 1 deng deng 0 5月 28 11:59 fifo
5)链接文件
似于 windows 下的快捷方式,链接又可以分为软链接(符号链接)和硬链接。第一个属性为 [l]。
# 符号链接
deng@itcast:~/test$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 11月 17 2017 /bin/sh -> dash
deng@itcast:~/test$
6)套接字文件
这类文件通常用在网络数据连接。可以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信。第一个属性为 [s],最常在 /var/run 目录中看到这种文件类型。
deng@itcast:~/tmp/test$ ls -l /run/systemd/notify
srwxrwxrwx 1 root root 0 8月 8 11:00 /run/systemd/notify
13 文件相关命令
13.1 ls
ls 是英文单词 list 的简写,其功能为列出目录的内容,是用户最常用的命令之一,它类似于 DOS下的 dir 命令。
Linux 文件或者目录名称最长可以有 256 个字符,“.” 代表当前目录,“…” 代表上一级目录,以 “.” 开头的文件为隐藏文件,需要用 -a 参数才能显示。
用法:ls [选项]… [文件]…,常用参数:
参数 | 含义 |
---|---|
-a | 显示指定目录下所有子目录与文件,包括隐藏文件 |
-l | 以列表方式显示文件的详细信息 |
-h | 配合 -l 以人性化的方式显示文件大小 |
使用示例:
ls -al 显示所有文件包括隐藏文件列表
ls -lt 显示按日期时间排序后的文件列表 等价于 ls -l -t
ls -lh 显示计算大小为KB为单位的文件列表
ls -dl 显示文件夹详细列表
图中列出的信息含义如下图所示:
通配符
与 DOS 下的文件操作类似,在 Unix/Linux 系统中,也同样允许使用特殊字符来同时引用多个文件名,这些特殊字符被称为通配符。
通配符 | 含义 |
---|---|
* | 文件代表文件名中所有字符 |
ls te* :查找以 te 开头的文件 | |
ls *html : 查找结尾为 html 的文件 | |
? | 代表文件名中任意一个字符 |
ls ?.c : 只找第一个字符任意,后缀为.c的文件 | |
ls a.? :只找只有3个字符,前2字符为a.,最后一个字符任意的文件 | |
[] | [”和“]”将字符组括起来,表示可以匹配字符组中的任意一个。“-”用于表示字符范围。 |
[abc] :匹配a、b、c中的任意一个 | |
[a-f]:匹配从a到f范围内的的任意一个字符 | |
ls [a-f]* : 找到从a到f范围内的的任意一个字符开头的文件 | |
ls a-f:查找文件名为 a-f 的文件,当 “-”处于方括号之外失去通配符的作用 | |
\ | 如果要使通配符作为普通字符使用,可以在其前面加上转义字符。“?”和“*”处于方括号内时不用使用转义字符就失去通配符的作用。 |
ls \*a : 查找文件名为 \*a 的文件 |
13.2 touch
用法:touch [选项]… 文件…
1)如果文件不存在, 创建新文件(只能是普通文件,不能是文件夹)
2)如果文件存在, 更新文件时间
示例:
touch file 创建file空文件,如果file存在则更新file的存取和修改时间
touch a.txt b.txt 同时创建多个文件
yxm@192:~/test$ touch a.txt b.txt
yxm@192:~/test$ ls
a.txt b.txt
touch file{2,3,4} 同时创建file2,file3,file4三个空文件
yxm@192:~/test$ touch file{2,3,4}
yxm@192:~/test$ ls
file2 file3 file4
touch "file{2,3,4}" 创建file{2,3,4}一个空文件
yxm@192:~/test$ touch "file{2,3,4}"
yxm@192:~/test$ ls
file{2,3,4}
【注意】touch 创建文件时,如果文件名有特殊字符,可以使用转义字符,也可以在创建时给文件名加双引号或者单引号。
13.3 cp
cp 命令的功能是将给出的文件或目录复制到另一个文件或目录中。常用选项说明:
选项 | 含义 |
---|---|
-a | 该选项通常在复制目录时使用,它保留链接、文件属性,并递归地复制目录,简单而言,保持文件原有属性。 |
-f | 删除已经存在的目标文件而不提示 |
-i | 交互式复制,在覆盖目标文件之前将给出提示要求用户确认 |
-r | 若给出的源文件是目录文件,则cp将递归复制该目录下的所有子目录和文件,目标文件必须为一个目录名。 |
-v | 显示拷贝进度 |
示例:
cp file dirs/ 把 file 文件复制到dirs目录下
cp file1 file2 dirs/ 把 file1 file2 文件拷贝到dirs目录下
cp -i file1 file2 把文件 file1 拷贝到 file2 中,并且提示
cp -t dirs file1 把文件 file1 拷贝到 dirs 目录下
cp -r dir1/ dir2/ 把 dir1 目录复制到 dir2 目录下
cp -R dir1 dir2 把 dir1 目录拷贝到 dir2 目录下
cp -a file dirs/ 把 file 文件复制到 dirs 目录下,保留文件的原来属性
cp -rf dir1/ dir2/ 强制复制文件夹,不提示
cp -rvf dir1/ dir2/ 把dir1目录复制到dir2目录下,并且显示复制过程
13.4 rm
rm 命令用于删除文件或目录。常用参数及含义如下表所示:
参数 | 含义 |
---|---|
-i | 以进行交互式方式执行 |
-f | 强制删除,忽略不存在的文件,无需提示 |
-r | 递归地删除目录下的内容,删除文件夹时必须加此参数 |
【注意】使用rm命令要小心,因为文件删除后不能恢复。为了防止文件误删,可以在 rm 后使用 -i 参数以逐个确认要删除的文件。 |
示例:
rm a 删除文件 a
rm a b c 删除文件 a b c
rm -i a 删除文件 a,在删除之前用户需确认是否删除该文件
rm -f a 删除文件 a,强制删除该文件,不需要用户确认是否删除
rm -v a 删除文件 a,删除之后会显式结果
rm -r dirs 递归删除目录 dirs
rm -rf dirs 强制递归删除目录 dirs
rm file* 删除所有file打头的文件
rm -i file* 删除所有 file 打头的文件,提示是否确定删除
rm -f file* 删除所有 file 打头的文件,不提示,强行删除
rm -f [ab].txt 等价于 rm -f a.txt b.txt
rm -f [^ab].txt 删除除 a.txt b.txt 以外的所有 ?.txt
rm -f ?.txt ? 代表一个字符
rm -f ???.txt
13.5 mv
mv 命令来移动文件或目录,也可以给文件或目录重命名。常用选项说明:
选项 | 含义 |
---|---|
-f | 禁止交互式操作,如有覆盖也不会给出提示 |
-i | 确认交互方式操作,如果mv操作将导致对已存在的目标文件的覆盖,系统会询问是否重写,要求用户回答以避免误覆盖文件 |
-v | 显示移动进度 |
示例:
mv file file2 把 file 文件重命名为 file2
mv file dirs/ 把 file 文件移动到 dirs 目录下
mv file1 file2 dirs/ 把 file1、file2 文件剪切到 dirs 目录下
mv dir1 dir2 dir3/ 把 dir1、dir2 目录剪切到 dir3 目录下
mv -i file1 dir1/ 把 file1 文件剪切到 dir1 目录下,如果存在覆盖就提示用户
mv -f file1 dir1/ 把 file1 文件剪切到 dir1 目录下,如果存在覆盖也不提示用户
mv -u dir1/* dir2/ 把 dir1 目录下所有文件移动到 dir2 目录下,并且根据文件时间来决定要不要移动
14 文件内容查看命令
14.1 cat
cat 将文件内容一次性输出到终端。
缺点:终端显示的内容有限,如果文件太长无法全部显示。
示例:
cat /etc/passwd 查看/etc/passwd内容
cat -n /etc/passwd 查看/etc/passwd内容,对输出的所有行编号
cat -b /etc/passwd 查看/etc/passwd内容并且给非空行编号
cat -A /etc/passwd 等价于 -vET
14.2 more
more 命令将文件内容分页显示到终端,但是只能一直向下浏览,不能回退。相关参数说明:
命令 | 作用 |
---|---|
回车 | 显示下一行 |
空格 | 显示下一页 |
q(ctrl + c) | 退出 |
h | 获取帮助 |
示例:
14.3 less
less 命令将文件内容分页显示到终端,可以自由上下浏览。相关参数说明:
命令 | 作用 |
---|---|
回车(ctrl + n) | 显示下一行 |
ctrl + p | 显示上一行 |
空格(PageDown) | 显示下一页 |
PageUp | 显示上一页 |
q | 退出 |
h | 获取帮助 |
14.4 head
head 命令从文件头部开始查看前 n 行的内容;如果没有指定行数,默认显示前10行内容。
命令格式:head –n [行数] 文件名
示例:
head /etc/passwd 查看 /etc/passwd 前 10 行内容
head -c 30 /etc/passwd 查看 /etc/passwd 前 30 个字符
head -30 /etc/passwd 查看 /etc/passwd 前 30 行
head -n 30 /etc/passwd 查看 /etc/passwd 前 30 行内容
head -q /etc/passwd 查看 /etc/passwd 的内容,但是不打印头信息
head -v /etc/passwd 查看 /etc/passwd 的内容,但是打印头信息
14.5 tail
tail 命令从文件尾部向上查看最后 n 行的内容;如果没有指定行数,默认显示最后 10 行内容。
命令格式:tail –n [行数] 文件名
示例:
tail /etc/passwd 查看 /etc/passwd 后 10 行内容
tail -n 30 /etc/passwd 查看 /etc/passwd 后 30 行内容
tail -c 30 /etc/passwd 查看 /etc/passwd 后 30 个字符
tail -f /etc/passwd 实时查看 /etc/passwd 文件内容
tail -q /etc/passwd 查看 /etc/passwd 的内容,但是不打印头信息
tail -v /etc/passwd 查看 /etc/passwd 的内容,但是打印头信息
15 du和df命令
15.1 du
du 命令用于查看某个目录大小。
du 命令的使用格式:du [选项] 目录或文件名
选项 | 含义 |
---|---|
-a | 递归显示指定目录中各文件和子目录中文件占用的数据块 |
-s | 显示指定文件或目录占用的数据块 |
-b | 以字节为单位显示磁盘占用情况 |
-h | 以K,M,G为单位,提高信息的可读性 |
示例:
15.2 df
df 命令用于检测文件系统的磁盘空间占用和空余情况,可以显示所有文件系统对节点和磁盘块的使用情况。
选项 | 含义 |
---|---|
-a | 显示所有文件系统的磁盘使用情况 |
-m | 以1024字节为单位显示 |
-h | 以K,M,G为单位,提高信息的可读性 |
示例:
16 查找相关命令
16.1 find
find 命令功能非常强大,通常用来在特定的目录下搜索符合条件的文件,也可以用来搜索特定用户属主的文件。
1、按文件名查询:使用参数 -name
命令:find + 路径 + -name +“文件名”
find /home -name “a.txt”
2、按文件大小查询:使用参数 -size
命令:find + 路径 + -size + 范围
- 范围:大于:+表示,如:+100k;小于:-表示,如:-100k;等于:不需要添加符号,如:100k
- 大小: M 必须大写(10M);k 必须小写(20k)
例子: 查询目录为家目录
find ~/ -size 100k 等于 100k 的文件
find ~/ -size +100k 大于100k的文件
find ~/ -size +50k -size -100k 大于50k, 小于100k的文件
3、按文件类型查询:使用参数 -typ
命令:find + 路径 + -type + 类型
- 类型:普通文件类型用 f 表示而不是 -;d -> 目录;l -> 符号链接;b -> 块设备文件;c -> 字符设备文件;s -> socket文件,网络套接字;p -> 管道
find /home -type f 查找指定目录下的普通文件
示例:
find /etc -name grub.conf 查找 /etc 目录下的 grub.conf 文件
find / -name "*.conf" 查找 / 下所有 .conf 文件
find / -iname grub.conf 查找 / 目录下的 grub.conf 文件,忽略大小写
find / -maxdepth 2 -name grub.conf 可以使用 -maxdepath 参数来控制查找的层次,就是说只查当前目录和子目录,最多查 2 级目录
find / -mindepth 2 -name grub.conf 最少查二级目录
find /etc -type d 查找 /etc/ 下所有的目录
find /etc -type f 查找 /etc/ 下的所有普通文件
find /etc -type l -name *.conf 查找 /etc/ 下软链接文件是 .conf 结尾的文件
find /etc -type s 查找 /etc/ 下所有socket文件
find /etc -type c 查找 /etc/ 下的所有字符设备文件
find /etc -type p 查找 /etc/ 下所有管道文件
find /etc -user root 查找 /etc/ 所属用户是root的文件
find /etc -group root 查找 /etc/ 所属用户组是root的文件
find /etc -uid 500 查找 /etc/ 下 uid 是 500 的文件,和 -user 类似
find /etc -gid 500 查找 /etc/ 下 gid 是 500 的文件,和 -group 类似
find /etc -nouser 查找没有所属用户的文件
find /etc -nogroup 查找没有所属用户组的文件
find /etc -perm 777 -type d 查找 /etc/ 下权限为 777 的目录
find . -perm 111 查找权限是111的文件
find . -size +10M 查找当前目录下大于 10M 的文件,单位可以有 K,M,G,b 等
find / -size -2M 查找根目录下少于 2M 的文件
find / -mtime 1 查找根目录下 1 天以前修改的所有文件
find / -mtime +2 查找根目录下 2 天以前修改的所有文件
find / -mtime -3 查找根目录下最近 3 天内修改的所有文件
find / -atime 1 查找根目录下 1 天以前访问或读过的所有文件
find / -atime -1 查找根目录下最近 1 天内读过或访问的文件
find / -ctime -3 查找根目录下最近 3 天内状态发生改变的文件
find / -cmin -3 查找根目录下最近 3 分钟内状态发生改变的文件
find / -empty 查找根目录下所有空白文件或者空目录
find / -false 查找根目录下总是错误的文件
高级用法
find / -false -exec ls -l {} \; 查找根目录下总是错误的文件并且用ls -l查看
find . -name "*.conf" -exec rm -rf {} \;
find . -name "*.conf" | xargs rm -rf 删除当前目录下所有以 .conf 结尾的文件
deng@itcast:~$ find cmd/ -name "txt" -ok rm -rf {} \; 删除之前做确认
< rm ... cmd/txt > ? y
16.2 grep
Linux 系统中 grep 命令是一种强大的文本搜索工具,grep 允许对文本文件进行模式查找。如果找到匹配模式, grep 打印包含模式的所有行。
grep 一般格式为:grep [-选项] ‘搜索内容串’ 文件名
在 grep 命令中输入字符串参数时,最好引号或双引号括起来,例如:grep ‘a ’1.txt;当然如果搜索内容串中没有特殊字符可以不用引号括起来。
常用选项说明:
选项 | 含义 |
---|---|
-v | 显示不包含匹配文本的所有行(相当于求反) |
-n | 显示匹配行及行号 |
-i | 忽略大小写 |
-r | 搜索目录 |
示例:
grep -r "hello,world" /home/itcast 查找 /home/itcast 下包含“hello,world“字符串的文件
grep -a hello /bin/ls 将二进制文件以文本文件的方式搜索 hello
grep -i hello /etc/passwd 在 /etc/passwd 文件里找 hello 并且忽略大小写查找
grep -n hello /etc/passwd 搜索 hello 结果并显示在文件里出现的行号
grep -w hello /etc/passwd 搜索完全匹配 hello 单词的行
grep -v hello /etc/passwd 显示出在 /etc/passwd 文件里没有 hello 的行
grep -r hello /etc/ 在 /etc/ 目录里所有文件里找 hello 并显示结果
grep -i hello /etc/passwd --color=auto 在/etc/passwd 文件中找 hello 并且忽略大小写,然后高亮显示匹配的关键字
17 管道
管道(|):一个命令的输出可以通过管道做为另一个命令的输入。
管道我们可以理解为现实生活中的管子,管子的一头塞东西进去,另一头取出来,这里“ | ”的左右分为两端,左端塞东西(写),右端取东西(读)。
18 压缩包管理
18.1 tar
计算机中的数据经常需要备份,tar 是 Unix/Linux 中最常用的备份工具,此命令可以把一系列文件归档到一个大文件中,也可以把档案文件解开以恢复数据。
tar 使用格式: tar [选项] 打包文件名 文件,常用参数:
参数 | 含义 |
---|---|
-c | 生成档案文件,创建打包文件 |
-v | 列出归档解档的详细过程,显示进度 |
-f | 指定档案文件名称,f后面一定是.tar文件,所以必须放选项最后 |
-t | 列出档案中包含的文件 |
-x | 解开档案文件 |
【注意】 |
- 除了 f 需要放在参数的最后,其它参数的顺序任意。
- tar 命令很特殊,其选项前面可以使用 “-”,也可以不使用。
常用示例(工作中几乎就是使用以下三种):
- tar -cvf 创建归档文件
- tar -xvf 解除归档文件(还原)
- tar -tvf 查看归档文件内容
18.2 gzip
tar 与 gzip 命令结合使用实现文件打包、压缩:tar 只负责打包文件,但不压缩,用 gzip 压缩 tar 打包后的文件,其扩展名一般用 xxxx.tar.gz。
gzip 使用格式如下:gzip [选项] 被压缩文件,常用选项:
选项 | 含义 |
---|---|
-d | 解压 |
-r | 压缩所有子目录 |
【注意】一次性压缩多个文件:gzip后面不能跟目录 |
tar 和 gzip 两步可以实现打包压缩功能,但是这两步骤可以合并到一步,如下:
tar 这个命令并没有压缩的功能,它只是一个打包的命令,但是在 tar 命令中增加一个选项(-z)可以调用 gzip 实现了一个压缩的功能,实行一个先打包后压缩的过程。
压缩用法: tar cvzf 压缩包包名 文件1 文件2 …
参数 | 含义 |
---|---|
-z | 指定压缩包的格式为:file.tar.gz |
示例:tar zcvf test.tar.gz 1.c 2.c 3.c 4.c 把 1.c 2.c 3.c 4.c 压缩成 test.tar.gz | |
解压用法: tar zxvf 压缩包包名
参数 | 含义 |
---|---|
-z | 指定压缩包的格式为:file.tar.gz |
解压到指定目录:-C (大写字母“C”)
例子:tar -xvf new.tar.gz -C ./test/ 将 new.tar.gz 解压到当前目录下的 test 目录下:
【注意1】上图中tar -xvf 的写法是正确,是万能解压的方式,详细可以看后面。
【注意2】如上所述,tar 压缩打包格式为:tar cvzf 压缩包包名 文件1 文件2 …
- 压缩打包时,如果文件前面携带路径,解压缩时也将解压缩到前面携带的路径中;
- 压缩打包时,如果文件前面没有携带路径,解压缩时将解压缩到当前文件夹。
# 示例1,推荐方法
yxm@192:~/myshare/tar_test$ ls
1.c 2.c
yxm@192:~/myshare/tar_test$ tar cvzf test.tar.gz ./* # 携带 ./ 路径
./1.c
./2.c
yxm@192:~/myshare/tar_test$ ls
1.c 2.c test.tar.gz
yxm@192:~/myshare/tar_test$ mkdir untar_test
yxm@192:~/myshare/tar_test$ cd untar_test/
yxm@192:~/myshare/tar_test/untar_test$ mv ../test.tar.gz ./
yxm@192:~/myshare/tar_test/untar_test$ tar zxvf test.tar.gz
./1.c # 解压缩到 ./ 路径
./2.c # 解压缩到 ./ 路径
yxm@192:~/myshare/tar_test/untar_test$ ls
1.c 2.c 3.c test.tar.gz
# 示例2
yxm@192:~/myshare/tar_test$ ls
1.c 2.c
yxm@192:~/myshare/tar_test$ cd ..
yxm@192:~/myshare$ tar cvzf test.tar.gz tar_test/* # 携带路径
tar_test/
tar_test/2.c
tar_test/1.c
yxm@192:~/myshare$ ls
tar_test test.tar.gz
yxm@192:~/myshare$ mkdir tar_test/untar_test
yxm@192:~/myshare$ mv test.tar.gz ./tar_test/untar_test/
yxm@192:~/myshare$ cd ./tar_test/untar_test/
yxm@192:~/myshare/tar_test/untar_test$ tar zxvf test.tar.gz
tar_test/
tar_test/2.c # 创建tar_test,并解压缩到 tar_test 路径
tar_test/1.c # 创建tar_test,并解压缩到 tar_test 路径
yxm@192:~/myshare/tar_test/untar_test$ ls
tar_test test.tar.gz
yxm@192:~/myshare/tar_test/untar_test$ cd tar_test/
yxm@192:~/myshare/tar_test/untar_test/tar_test$ ls
1.c 2.c
18.3 bzip2
- tar 与 bzip2 命令结合使用实现文件打包、压缩(用法和 gzip 一样)。
- tar 只负责打包文件,但不压缩,用 bzip2 压缩 tar 打包后的文件,其扩展名一般用 xxxx.tar.bz2。
- 在 tar 命令中增加一个选项(-j)可以调用 bzip2 实现了一个压缩的功能,实行一个先打包后压缩的过程。
- 压缩用法:tar jcvf (tar -cjvf) 压缩包包名 文件…
示例:tar jcvf bk.tar.bz2 *.c - 解压用法:tar jxvf (tar -xjvf)压缩包包名
示例:tar jxvf bk.tar.bz2 - tar -xvf 万能解压,可以解压gzip,也可以解压 bzip2
# 生成一个bz2压缩包
deng@itcast:~/share$ tar -cjvf test.tar.bz2 test
# 解压bz2压缩包
deng@itcast:~/share$ tar -xjvf share.tar.bz2
18.4 zip 和 unzip
通过 zip 压缩文件的目标文件不需要指定扩展名,默认扩展名为zip。
- 压缩文件:zip -r 目标文件(没有扩展名) 源文件
- 解压文件:unzip -d 解压后目录文件 压缩文件
19 文件权限管理
19.1 文件权限
文件权限就是文件的访问控制权限,即哪些用户和组群可以访问文件以及可以执行什么样的操作。在 Unix/Linux 中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录。
Unix/Linux 系统是一个典型的多用户系统,不同的用户处于不同的地位,对文件和目录有不同的访问权限。为了保护系统的安全性,Unix/Linux 系统除了对用户权限作了严格的界定外,还在用户身份认证、访问控制、传输安全、文件读写权限等方面作了周密的控制。
19.2 访问用户分类
通过设定权限可以从以下三种访问方式限制访问权限:
1)只允许用户自己访问(所有者)
所有者就是创建文件的用户,用户是所有用户所创建文件的所有者,用户可以允许所在的用户组能访问用户的文件。
2)允许一个预先指定的用户组中的用户访问(用户组)
用户都组合成用户组,例如,某一类或某一项目中的所有用户都能够被系统管理员归为一个用户组,一个用户能够授予所在用户组的其他成员的文件访问权限。
3)允许系统中的任何用户访问(其他用户)
用户也将自己的文件向系统内的所有用户开放,在这种情况下,系统内的所有用户都能够访问用户的目录或文件。在这种意义上,系统内的其他所有用户就是 other 用户类
这有点类似于 QQ 空间的访问权限:
- 这个 QQ 空间是属于我的,我相当于管理者(也就是“所有者”),我想怎么访问就怎么访问。
- 同时,我可以设置允许 QQ 好友访问,而这些 QQ 好友则类似于“用户组”。
- 当然,我可以允许所有人访问,这里的所有人则类似于(不完全等价)“其他用户”。
19.3 访问权限说明
用户能够控制一个给定的文件或目录的访问程度,一个文件或目录可能有读、写及执行权限:
- 读权限(r):对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目录的权限。
- 写权限(w):对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移动目录内文件的权限。
- 可执行权限(x):对文件而言,具有执行文件的权限;对目录来说该用户具有进入目录的权限,即只有目录有可执行权限才能够进入该目录。
【注意】通常,Unix/Linux 系统只允许文件的属主(所有者)或超级用户改变文件的读写权限。
19.4 chmod
chmod 命令用于修改文件权限。修改文件权限有两种使用格式:字母法与数字法。
字母法: chmod u/g/o/a +/-/= rwx 文件
[ u/g/o/a ] | 含义 |
---|---|
u | user 表示该文件的所有者 |
g | group 表示与该文件的所有者属于同一组( group )者,即用户组 |
o | other 表示其他以外的人 |
a | all 表示这三者皆是 |
[ ±= ] | 含义 |
---|---|
+ | 增加权限 |
- | 撤销权限 |
= | 设定权限 |
rwx | 含义 |
---|---|
r | read 表示可读取,对于一个目录,如果没有r权限,那么就意味着不能通过ls查看这个目录内部的内容。 |
w | write 表示可写入,对于一个目录,如果没有w权限,那么就意味着不能在目录下创建新的文件。 |
x | excute 表示可执行,对于一个目录,如果没有x权限,那么就意味着不能通过cd进入这个目录。 |
示例:
chmod o+w file 给文件 file 的其它用户增加写权限:
chmod u-r file 给文件 file 的拥有者减去读的权限:
chmod g=x file 设置文件 file 的所属组权限为可执行,同时去除读、写权限:
数字法:“rwx” 这些权限也可以用数字来代替
r | 读取权限,数字代号为 “4” |
---|---|
w | 写入权限,数字代号为 “2” |
x | 执行权限,数字代号为 “1” |
- | 不具任何权限,数字t代号为 “0” |
示例:
如执行:chmod u=rwx,g=rx,o=r filename
就等同于:chmod u=7,g=5,o=4 filename(不可以执行)
就等同于:chmod 751 filename
- 文件所有者:读、写、执行权限
- 同组用户:读、执行的权限
- 其它用户:执行的权限
chmod 777 file:所有用户拥有读、写、执行权限
【注意】如果想递归所有目录加上相同权限,需要加上参数“ -R ”。例如:chmod 777 test/ -R 递归 test 目录下所有文件加 777 权限。
【注意】chmod 0777与 chmod 777 效果相同,0 表示八进制,有的平台不加 0 会报错,因为会当做十进制,所以最好在使用的时候加上0。
19.5 chown
Linux 是多用户操作系统,用户与用户的权限不同,所以不同用户可以操作不同的文件(目录),所以有时候想要操作某个文件,除了要修改文件的读写可执行权限外,还需要获得文件的所有者权限。
chown 命令用于修改文件所有者。
格式:chown 用户名 文件或目录名
参数:-R 递归目录下所有文件
示例:
# 将文件所属者修改为root用户
deng@itcast:~/share/test: sudo chown root txt
deng@itcast:~/share/test ls -l txt -rw-rw-r-- 1 root deng 0 10月 10 11:12 txt
# 将文件所属者改为deng 所属组改为root
deng@itcast:~/share/test sudo chown deng:root txt
deng@itcast:~/share/test ls -l txt -rw-rw-r-- 1 deng root 0 10月 10 11:12 txt
# 单独只修改文件所属组
> deng@itcast:~/share/test sudo chown :root txt
> deng@itcast:~/share/test ls -l txt -rw-rw-r-- 1 deng root 0 10月 10 11:12 txt
19.6 chgrp
chgrp 命令用于修改文件所属组。(本小节了解即可)
格式:chgrp 用户组名 文件或目录名
示例:
# 单独修改文件所属组
deng@itcast:~/share/test sudo chgrp deng txt
deng@itcast:~/share/test ls -l txt -rw-rw-r-- 1 deng deng 0 10月 10 11:12 txt
20 进程管理
20.1 ps
ps 命令可以查看进程的详细状况,常用选项(选项可以不加“-”)如下:
选项 | 含义 |
---|---|
-a | 显示终端上的所有进程,包括其他用户的进程 |
-u | 显示进程的详细状态 |
-x | 显示没有控制终端的进程 |
-w | 显示加宽,以便显示更多的信息 |
-r | 只显示正在运行的进程 |
列出与作业控制相关的信息 |
常用选项组合:
- ps aux:显示当前用户下所有进程
- ps -ef:效果与ps aux差不多, ps aux最初用到 Unix Style 中,而 ps -ef 被用在 System V Style 中,两者输出略有不同。现在的大部分Linux系统都是可以同时使用这两种方式的。
- ps ajx :以比较完整的格式显示所有的进程
- ps -a
20.2 top
top 命令用来动态显示运行中的进程。top 命令能够在指定的时间间隔更新显示信息。
可以在使用 top 命令时加上 -d 来指定显示信息更新的时间间隔。
在top命令执行后,可以按下以下按键得到对显示的结果进行排序:
按键 | 含义 |
---|---|
M | 根据内存使用量来排序 |
P | 根据CPU占有率来排序 |
T | 根据进程运行时间的长短来排序 |
U | 可以根据后面输入的用户名来筛选进程 |
K | 可以根据后面输入的PID来杀死进程。 |
q | 退出 |
h | 获得帮助 |
20.3 kill
命令功能:发送指定的信号到相应进程,常用于用于删除执行中的程序或工作。
使用格式:kill [-signal] pid
其中,[[四、Linux下进程间通讯之信号机制|信号值(signal)]]从 0 到 15,其中 9 为绝对终止,可以处理一般信号无法终止的进程。
kill 9133 :9133 为应用程序所对应的进程号
查看信号编号: kill -l(字母)
有些进程不能直接杀死,这时候我们需要加一个参数“ -9 ”,“ -9 ” 代表强制结束([[四、Linux下进程间通讯之信号机制|9号信号为 SIGKILL]])。
杀死进程: kill -SIGKILL/(-9) 89899【进程标识号】
【注意】
- 前台程序:ctlr+c可以中断中断前台进程,但是无法中断后台进程;
- 后台程序:可以通过kill命令杀死后台进程( Linux 下后台运行程序,查看和关闭后台运行程序 )。 #TODO
20.4 killall
Linux 中每个进程号是唯一的,但是可能存在进程名相同的进程,如下所示:
killall 命令可以通过进程名字杀死所有进程名相同的进程。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YNJvJyac-1677561875568)(01_学习记录/02_专业领域/asstes/assets/1527498996963.png)]
21 软件安装和卸载
21.1 在线安装
如果是在 ubuntu 平台,软件的安装可以通过互联网在线安装,更加方便快捷:
命令 | 含义 |
---|---|
sudo apt-get update | 获得最新的软件包的列表 |
sudo apt-get install xxx | 从源中安装 xxx 软件 |
sudo apt-get remove xxx | 删除 xxx 软件 |
sudo apt-get clean | 清理安装包 |
21.2 软件包安装
在 Ubuntu下安装文件为 deb 格式
- 软件安装:sudo dpkg -i xxx.deb
- 软件卸载:sudo dpkg -r 软件名
示例:
# tree 软件安装
deng@itcast:~$ sudo dpkg -i tree_1.6.0-1_amd64.deb
# tree 软件卸载
deng@itcast:~$ sudo dpkg -r tree
22 重定向
重定向:Linux Shell重定向参考文章
- 标准输入 代码 0 默认设备为键盘
- 标准输出 代码 1 默认设备为屏幕
- 错误输出 代码 2 默认设备为屏幕
示例:
ls /etc/passwd > output.txt 标准正确输出重定向到 output.txt
ls /etc/shadow >> output.txt 标准正确输出追加重定向到 output.txt
ls dddddd 2> error.txt 标准错误输出重定向到 error.txt
ls ddddd 2>> error.txt 标准错误输出重定向到 error.txt,追加的方式
ls dddddd 2> /dev/null 标准错误输出重定向到黑洞
ls ddddd /etc/passwd &> /dev/null 标准正确输出标准错误输出全都重定向到黑洞
ls ddddd /etc/passwd &>> txt 标准正确输出标准错误输出以追加的方式全都重定向到txt
cat < file 标准输入重定向, file 作为 cat 输入的内容
23 其它命令
23.1 tree
tree 以树状形式查看指定目录内容,使用该命令需要安装软件 tree:sudo apt install tree
常用选项:
-L n(n 为层数) | 查看n层目录 |
---|---|
23.2 ln 链接
建立文件链接的目的一般是:当有多处使用同一个文件时,如果文件的位置或名称变更了,每一处都要随着更改,如果是使用软链接,则只需变更下软链接就可以了。
链接文件分为软链接和硬链接:
- 软链接(符号链接):
- 软链接本质上是一个独立的文件,但文件的内容只是执行源文件的一个引用或者说指针(即符号链接内部实际上存储的是指向源文件的路径),并不实际存储源文件的内容,所以源文件删除则软链接失效。
- 大小:不管源文件的内容有多大,软链接文件都是非常小的。
- 可以理解为,软链接只是源文件的一个快捷方式或别名,所以对软链接进行操作(增删改)不会影响到源文件。
- 硬链接:
- 硬链接本质上源文件的一个拷贝,占用的存储空间与源文件相同,所以即使删除了源文件,链接文件还是存在;
- 同时硬链接与源文件会保持同步更新,更二者之一,另一个的内容和时间戳都会同步更新。所以对硬链接进行操作(增改)会影响到源文件。
- 硬链接只能链接普通文件,不能链接目录。
ln 命令主要用于创建链接文件。Linux 链接文件类似于 Windows 下的快捷方式。
使用格式:
- ln 源文件 链接文件
- ln -s 源文件 链接文件
如果没有 -s 选项代表建立一个硬链接文件,硬链接用的相对较少,软连接用的相对多。
【注意】如果软链接文件和源文件不在同一个目录,创建链接时,源文件最好要使用绝对路径,不要使用相对路径。
readlink 命令读取符号链接文件的内容(存储目标文件的路径),示例:
deng@itcast:~/share$ readlink a\_link2 /home/deng/share/a
23.3 scp
scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。
scp 命令是 Linux 系统中功能强大的文件传输命令,可以实现从本地到远程,以及从远程到本地的双向文件传输,用起来非常方便,常用来在线上定位问题时将线上的一些文件下载到本地进行详查,或者将本地的修改上传到服务器上。
使用方式:
sudo apt-get install openssh-server
# 下载 122.152.222.180 的文件
scp liaoqingfu@122.152.222.180:/home/liaoqingfu/test.txt .
# 上传文件到 122.152.222.180
scp mi9.aac liaoqingfu@122.152.222.180:/home/liaoqingfu/
# 下载 test 整个目录到本地
scp -r liaoqingfu@122.152.222.180:/home/liaoqingfu/test .
# 上传本地 test 整个目录到 122.152.222.180
scp -r test liaoqingfu@122.152.222.180:/home/liaoqingfu/