linux简介
Linux,全称GNU/Linux,是一个基于POSIX的多用户、多任务、支持多线程和多CPU,同时可以免费使用和自由传播的类UNIX操作系统,它支持和运行主流的Unix工具软件、应用程序和网络协议,32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
linux文件系统结构
Linux世界中的一切东西都可以通过文件的方式保存和管理,即“一切皆文件”的思想。
文件类型:
(1)普通文件(如:mp4、jgp、html)
(2)目录文件(即文件夹)
(3)字符设备文件和块设备文件(通常在/dev/目录下)
(4)套接字文件(socket)
(5)符号链接文件(symbolic link)
(6)管道文件(pipe)
树状目录结构:
以下是目录具体含义:
级别 | 目录 | 描述 |
---|---|---|
根目录 | / | linux系统的根目录,所有目录都是由根目录衍生出来的, 根目录与系统的开机、修复、还原密切相关 |
一级目录 | /bin | bin(Binaries :二进制文件)目录存放着最经常使用的命令 |
/boot | 系统引导文件存放目录,存放着启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件 | |
/dev | dev(Device:设备)目录存放的是 Linux 的外部设备及特殊文件存储位置 | |
/etc | etc(Etcetera:等等)目录存放所有的系统管理所需要的配置文件和子目录 | |
/home | 用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名 | |
/root | 该目录为系统管理员(超级权限者的用户主目录) | |
/run | 是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除 | |
/sbin | s(Super User)是 Superuser Binaries (超级用户的二进制文件) 的缩写,存放的是系统管理员使用的系统管理程序 | |
/tmp | tmp(temporary:临时)目录是用来存放一些临时文件 | |
/usr | usr(unix shared resources:共享资源)目录下存放用户的很多应用程序和文件,类似于 windows 下的 program files 目录 | |
/var | var (variable:变量)目录中存放着在不断扩充着的东西,例如各种日志文件 | |
/lib | lib(Library:库)目录存放着系统最基本的动态连接共享库,类似于 Windows 里的 DLL 文件 | |
/mnt | 为了让用户临时挂载别的文件系统,如 U 盘、移动硬盘和其他操作系统的分区 | |
/opt | opt(optional:可选)是给主机额外安装软件所摆放的目录,手工安装的源码包软件也可以安装到这个目录中 | |
/sys | 该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs ,sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建 | |
/proc | proc(Processes:进程)是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息 | |
/srv | 服务数据目录,该目录存放一些服务启动之后需要提取的数据 | |
/lost+found | 当系统意外崩溃或意外关机时,产生的一些文件碎片会存放在这里。在系统启动的过程中,fsck 工具会检查这里,并修复已经损坏的文件系统。这个目录只在每个分区中出现,例如,/lost+found 就是根分区的备份恢复目录,/boot/lost+found 就是 /boot 分区的备份恢复目录 | |
二级目录 | /usr/bin/ | 超级用户使用的比较高级的管理程序和系统守护程序,存放系统命令,普通用户和超级用户都可以执行。这些命令和系统启动无关,在单用户模式下不能执行 |
/usr/sbin | 存放根文件系统不必要的系统管理命令,如多数服务程序,只有 root 可以使用 | |
/usr/lib | 应用程序调用的函数库保存位置 | |
/usr/XllR6 | 图形界面系统保存位置 | |
/usr/local | 手工安装的软件保存位置 | |
/usr/share | 应用程序的资源文件保存位置,如帮助文档、说明文档和字体目录 | |
/usr/src | 源码包保存位置,手工下载的源码包和内核源码包都可以保存到这里。 | |
/usr/include | C/C++ 等编程语言头文件的放置目录 | |
/var/lib | 程序运行中需要调用或改变的数据保存位置,如 MySQL 的数据库保存在 /var/lib/mysql/ 目录中 | |
/var/log | 登陆文件放置的目录,其中所包含比较重要的文件如 /var/log/messages, /var/log/wtmp 等 | |
/var/run/ | 一些服务和程序运行后,它们的 PID(进程 ID)保存位置 | |
/var/spool | 一些临时存放且随时会被用户所调用的数据,例如 /var/spool/mail/ 存放新收到的邮件,/var/spool/cron/ 存放系统定时任务 | |
/var/www | RPM 包安装的 Apache 的网页主目录 | |
/var/nis和/var/yp | NIS 服务机制所使用的目录,NIS主要记录所有网络中每一个 client 的连接信息,yp 是 linux 的NIS服务的日志文件存放的目录 | |
/var/tmp | 存放一些应用程序在安装或执行时需要重启后使用的文件 |
文件目录寻址:
在linux树状结构目录中,对不同的文件进行操作时需要用到寻址的指令,文件寻址指令分为两种分别是:
- 绝对路径的语法:根目录/子目录/…
例如:根目录/目的目录/…
root@ubuntu18:/home# cd /home/alientek/ //转到/(根下)的home目录里的alientek目录里
root@ubuntu18:/home/alientek# ls //查看当前目录下的文件夹
Desktop linux Pictures st STM32CubeMX Videos
Documents mp157 Public STM32Cube ST_tools
Downloads Music qt-atk STM32CubeIDE Templates
- 相对路径的语法:先用[cd+绝对路径]转到目的目录中,再执行以下操作
例如:
root@ubuntu18:/home/alientek# touch 1.txt //在当前目录下创建文件1.txt
root@ubuntu18:/home/alientek# ls //查看当前目录下文件
1.txt Downloads Music qt-atk STM32CubeIDE Templates
Desktop linux Pictures st STM32CubeMX Videos
Documents mp157 Public STM32Cube ST_tools
注:touch为创建文件指令后续章节会讲述到相关内容,../
为回退上一级目录的意思
切换目录
cd(Change Directory)命令用来切换工作目录且cd 命令是 Shell 内置命令。linux命令根据来源可以分为shell内置命令和外部命令,其中shell内部命令时自带的命令没有执行文件;相反外部命令是由程序员自行开发的,所以是有命令执行文件。
语法:
root@ubuntu18:/# cd [选项] [相对路径或绝对路径]
选项
名称 | 描述 |
---|---|
~ | 当前登录用户的主目录 |
~用户名 | 指定用户的主目录 |
- | 上次所在目录 |
. | 当前目录 |
. .(此处是两个连续的点,中间无空格) | 上级目录 |
示例:
root@ubuntu18:/# cd ~ //表示回到自己的主目录
root@ubuntu18:~# pwd //查看当前所在目录的名称
/root
root@ubuntu18:~# cd .. //返回上一级目录
root@ubuntu18:/# cd //也表示回到当前登录用户的主目录
root@ubuntu18:~# pwd //查看当前所在目录的名称
/root
root@ubuntu18:~# cd ~alientek/ //表示切换到alintek这个用户的主目录,亦即 /home/alintek
root@ubuntu18:/home/alientek# pwd //查看当前所在目录的名称
/home/alientek
显示当前路径
pwd(Print Working Directory:打印工作目录)命令的功能是显示用户当前所处的工作目录。
whoami 命令用于确定当前登陆的用户。
语法:
root@ubuntu18:/# pwd [选项]
root@ubuntu18:/# whoami
选项
名称 | 描述 |
---|---|
-P | 显示出确实的路径,而非使用链接 (link) 路径 |
示例
root@ubuntu18:/home/alientek# pwd //打印当前的目录
/home/alientek
root@ubuntu18:/home/alientek# whoami //显示当前登录的用户名
root
查看目录下文件
ls(list:列表)命令是目录操作命令,其主要功能是显示当前目录下的内容
root@ubuntu18:/# ls [选项] 目录名称
选项:
名称 | 描述 |
---|---|
-a | 显示全部的文件,包括隐藏文件(开头为 . 的文件)也一起罗列出来,这是最常用的选项之一 |
-A | 显示全部的文件,连同隐藏文件,但不包括 . 与 … 这两个目录 |
-d | 仅列出目录本身,而不是列出目录内的文件数据 |
-f | ls 默认会以文件名排序,使用 -f 选项会直接列出结果,而不进行排序 |
-F | 在文件或目录名后加上文件类型的指示符号,例如,* 代表可运行文件,/ 代表目录,= 代表 socket 文件, |
-h | 以易读的方式显示文件或目录大小,如 1KB、1MB、1GB 等 |
-i | 显示 inode 节点信息 |
-l | 使用长格式列出文件和目录信息 |
-n | 以 UID 和 GID 分别代替文件用户名和群组名显示出来 |
-r | 将排序结果反向输出,比如,若原本文件名由小到大,反向则为由大到小 |
-R | 连同子目录内容一起列出来,等於将该目录下的所有文件都显示出来 |
-S | 以文件容量大小排序,而不是以文件名排序 |
-t | 以时间排序,而不是以文件名排序 |
–color=never | never 表示不依据文件特性给予颜色显示 |
–color=always | always 表示显示颜色,ls 默认采用这种方式 |
–color=auto | auto 表示让系统自行依据配置来判断是否给予颜色 |
–full-time | 以完整时间模式 (包含年、月、日、时、分)输出 |
–time={atime,ctime} | 输出 access 时间或改变权限属性时间(ctime),而不是内容变更时间 |
注:使用 -a可以看到 . 为开头的几个文件,以及蓝色显示的目录文件 (.)、(…)、.gconf 等等,这些都是隐藏的目录和文件。
示例
root@ubuntu18:/home# ls -a //显示全部的文件
. .. alientek Systemback
root@ubuntu18:/home# ls -A //显示全部的文件,连同隐藏文件,但不包括 . 与 .. 这两个目录
alientek Systemback
root@ubuntu18:/home# ls -d //仅列出目录本身
.
root@ubuntu18:/home# ls -f //使用 -f 选项会直接列出结果,而不进行排序
. .. alientek Systemback
root@ubuntu18:/home# ls -i //显示 inode 节点信息
7602178 alientek 7603485 Systemback
root@ubuntu18:/home# ls -n //以 UID 和 GID 分别代替文件用户名和群组名显示出来
total 8
drwxr-xr-x 36 1000 1000 4096 1月 8 20:08 alientek
drwxr-xr-x 2 0 1000 4096 1月 8 06:58 Systemback
root@ubuntu18:/home# ls -r //将排序结果反向输出
Systemback alientek
ls 命令还使用了 -l 选项显示具体信息描述:
列数 | 描述 |
---|---|
第一列 | 规定了不同的用户对文件所拥有的权限 |
第二列 | 表示该文件的硬链接个数,目录表示该目录有多少个一级子目录 |
第三列 | 所有者 |
第四列 | 所属组 |
第五列 | 大小,默认单位是字节 |
第六列 | 文件修改时间 |
第七列 | 文件名或目录名 |
示例
root@ubuntu18:/home# ls -l //长格式列出文件和目录信息
total 8
drwxr-xr-x 36 alientek alientek 4096 1月 8 20:08 alientek
drwxr-xr-x 2 root alientek 4096 1月 8 06:58 Systemback
创建目录(文件夹)
mkdir(make directories:创建目录)用于创建新目录
语法:
root@ubuntu18:/home# mkdir [-mp] 目录名
名称 | 描述 |
---|---|
-m | 配置文件的权限 |
-p | 递归创建所有目录 |
示例
root@ubuntu18:/# mkdir test //创建一名为 test 的新目录
root@ubuntu18:/# mkdir -p test1/test2/test3/test4
删除空目录
rmdir(emove empty directories:删除空目录)命令用于删除空目录
语法:
root@ubuntu18:/#rmdir [-p] 目录名
选项:
名称 | 描述 |
---|---|
-p | 递归创建所有目录 |
示例
root@ubuntu18:/#mdir -p home/movie
创建文件
touch 命令可以创建一个空白文件,其他功能是修改文件的时间参数。
语法:
root@ubuntu18:/#touch [选项] 文件名
选项:
名称 | 描述 |
---|---|
-a | 只修改文件的访问时间 |
-c | 仅修改文件的时间参数,如果文件不存在,则不建立新文件 |
-d | 后面可以跟欲修订的日期,而不用当前的日期 |
-m | 只修改文件的数据修改时间 |
-t | 命令后面可以跟欲修订的时间,时间书写格式为 YYMMDDhhmm |
示例
root@ubuntu18:/# touch 1.txt //创建文件1.txt
root@ubuntu18:/# ls 1.txt //显示1.txt文件
1.txt
root@ubuntu18:/# ll --time=atime 1.txt //查看文件的访问时间
-rw-r--r-- 1 root root 0 1月 8 22:13 1.txt
复制文件或目录
cp 命令可以用来复制文件和目录,还可以复制整个目录
语法:
root@ubuntu18:/#cp [选项] 源文件 目标文件
选项:
名称 | 描述 |
---|---|
-a | 相当于 -d、-p、-r 选项的集合 |
-d | 如果源文件为软链接(对硬链接无效),则复制出的目标文件也为软链接 |
-f | 询问,如果目标文件已经存在,则会询问是否覆盖 |
-f | 把目标文件建立为源文件的硬链接文件,而不是复制源文件 |
-l | 把目标文件建立为源文件的软链接文件,而不是复制源文件 |
-p | 复制后目标文件保留源文件的属性(包括所有者、所属组、权限和时间) |
-r | 递归复制,用于复制目录 |
-s | 复制成为符号链接档 (symbolic link),亦即『捷径』文件 |
-u | 若目标文件比源文件有差异,则使用该选项可以更新目标文件,此选项可用于对文件的升级和备用 |
示例
root@ubuntu18:/#cp 1.txt /tmp/ //将1.txt文件复制到/tmp/路径下
root@ubuntu18:/#cp -i ~/.test /tmp/test
cp: overwrite `/tmp/test'? n <==n不覆盖,y为覆盖
移除文件或目录
rm 命令可以永久性地删除文件系统中指定的文件或目录,且删除文件或目录,系统不会产生任何提示信息。
语法:
root@ubuntu18:/#rm [选项] 文件或目录
选项
名称 | 描述 |
---|---|
-f | 强制删除(force),系统将不再询问,而是直接删除目标文件或目录 |
-i | 在删除文件或目录之前,系统会给出提示信息,使用 -i 可以有效防止不小心删除有用的文件或目录 |
-r | 递归删除,主要用于删除目录,可删除指定目录及包含的所有内容,包括所有的子目录和文件 |
示例
root@ubuntu18:/#rm -f test1.txt
移动文件或目录
mv(move:移动)命令可以在不同的目录之间移动文件或目录,可以重命名。
root@ubuntu18:/#mv [选项] 源文件 目标文件
选项
名称 | 描述 |
---|---|
-f | 强制覆盖,如果目标文件已经存在,则不询问,直接强制覆盖 |
-i | 交互移动,如果目标文件已经存在,则询问用户是否覆盖 |
-n | 如果目标文件已经存在,则不会覆盖移动,而且不询问用户 |
-v | 显示文件或目录的移动过程 |
-u | 若目标文件已经存在,但两者相比,源文件更新,则会对目标文件进行升级 |
示例
root@ubuntu18:/#mv 1.txt /tmp //移动之后,源文件会被删除,类似剪切
root@ubuntu18:/#mkdir test1
root@ubuntu18:/#mv test/ /tmp //也可以移动目录
注:使用mv命令改名常用来代替删除命令,防止在一些情况下删除后无法恢复源文件
文件查看命令
CAT:由第一行开始显示文件内容
语法:
root@ubuntu18:/#cat [选项] 文件名
选项:
名称 | 描述 |
---|---|
-A | 相当于 -v、-E、-T 选项,可列出一些特殊字符而不是空白而已 |
-b | 列出行号,仅针对非空白行做行号显示(空白行不标行号) |
-E | 将结尾的断行字节 $ 显示出来 |
-n | 列印出行号,连同空白行也会有行号 |
-T | 将 [tab] 按键以 ^I 显示出来 |
-v | 列出一些看不出来的特殊字符 |
TAC 从最后一行开始显示
语法:
root@ubuntu18:/#tac 文件名
nl 显示输出行号
语法:
root@ubuntu18:/#nl [选项] 文件名
选项
名称 | 描述 |
---|---|
-b | 指定行号指定的方式 |
-b a | 表示不论是否为空行,也同样列出行号 |
-b t | 如果有空行,空的那一行不要列出行号(默认值) |
-n | 列出行号表示的方法 |
-n ln | 行号在荧幕的最左方显示 |
-n rn | 行号在自己栏位的最右方显示,且不加 0 |
-n rz | 行号在自己栏位的最右方显示,且加 0 |
-w | 行号栏位的占用的位数 |
more 一页一页的显示文件内容
语法:
root@ubuntu18:/#more 文件名
按键操作
具体按键 | 描述 |
---|---|
空白键 (space) | 代表向下翻一页 |
Enter | 代表向下翻一行 |
/字符串 | 代表在这个显示的内容当中,向下搜寻"字符串"这个关键字 |
:f | 立刻显示出档名以及目前显示的行数 |
q | 代表立刻离开 more ,不再显示该文件内容 |
b 或 [ctrl]-b | 代表往回翻页,不过这动作只对文件有用,对管线无用 |
less 与 more 类似,但是比 more 更好的是,他可以往前翻页
语法:
root@ubuntu18:/#more 文件名
按键操作
具体按键 | 描述 |
---|---|
空白键 (space) | 向下翻动一页 |
[pagedown] | 向下翻动一页 |
[pageup] | 向上翻动一页 |
/字串 | 向下搜寻“字串”的功能 |
?字串 | 向上搜寻”字串“的功能 |
n | 重复前一个搜寻 (与 / 或 ? 有关!) |
N | 反向的重复前一个搜寻 (与 / 或 ? 有关!) |
q | 离开 less 这个程序 |
head 只看头几行
语法:
root@ubuntu18:/#head [-n number] 文件 //-n :后面接数字,代表显示几行的意思
tail 只看尾巴几行
语法:
root@ubuntu18:/#tail [-n number] 文件 //-n:后面接数字,代表显示几行的意思
//-f :表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测
附录
linux系统学习思维导图:
注:点击相应的思维导图分支即可跳转到相应内容