- GNU bash shell
- GNU bash shell是一个程序,提供了对Linux系统的交互式访问。它是作为普通程序运行的,通常是在用户登录终端时启动。
- 使用shell提示符
- 默认的bash shell提示符是美元符号($),这个符号表明shell在等待用户输入命令。(不同的Linux发行版会采用不同格式的提示符。)Ubuntu Linux系统的shell提示符是这样的:
-
- 可以把shell CLI提示符想象成一位贴心的“助手”,它会帮助你使用Linux系统,给你有益的提示,告诉你什么时候shell可以接受新的命令。
- 默认的bash shell提示符是美元符号($),这个符号表明shell在等待用户输入命令。(不同的Linux发行版会采用不同格式的提示符。)Ubuntu Linux系统的shell提示符是这样的:
- 与bash手册交互
- man命令可以访问Linux系统的手册页。在man命令之后跟上想要查看的命令名,就可以显示相应的手册页。
-
该图展示了如何查找hostname命令的手册页。输入命令man hostname即可进入该页面。
-
- bash手册并不是按部就班的学习指南,而是作为快速参考来使用的
- 使用man命令查看命令手册页的时候,其中的信息是由分页程序(pager)来显示的。分页程序是一种实用工具,能够逐页(或逐行)显示文本。
- 你可以单击空格键进行翻页,或是使用Enter键逐行查看。也可以使用箭头键向前和向后滚动手册页的内容(假设你使用的终端仿真软件包支持箭头键功能);阅读完毕,可以按q键退出手册页
- bash手册甚至包含了一份有关自身的参考信息。输入man man可以查看与手册页相关的信息。
- 手册页将与命令相关的信息分成了多段。每一段的惯用名标准如下表。
- man命令可以访问Linux系统的手册页。在man命令之后跟上想要查看的命令名,就可以显示相应的手册页。
-
- 如果不记得命令名了,可以使用关键字来搜索手册页。语法为man -k keyword。例如,要查找与终端相关的命令,可以入man -k terminal。
- 按照惯例命名的各段,手册页中还有不同的节。每节都分配了一个数字,从1开始,一直到9
-
- Linux文件系统
- Linux会将文件存储在名为虚拟目录(virtual directory)的单个目录结构中。虚拟目录会将计算机中所有存储设备的文件路径都纳入单个目录结构。Linux虚拟目录结构只包含一个称为根(root)目录的基础目录。根目录下的目录和文件会按照其访问路径一一列出,这点跟Windows类似。
- 注意:Linux使用正斜线(/)而不是反斜线(\)来分隔文件路径中的目录。反斜线在Linux中用作转义字符
- 我们称在Linux系统中安装的第一块硬盘为根驱动器。根驱动器包含了虚拟目录的核心,其他目录都是从那里开始构建的。
- Linux会使用根驱动器上一些特别的目录作为挂载点(mount point)
- 挂载点是虚拟目录中分配给额外存储设备的目录。Linux会让文件和目录出现在这些挂载点目录中,即便它们位于其他物理驱动器中。
- 系统文件通常存储在根驱动器中,而用户文件则存储在其他驱动器中,如图
- 一块硬盘(Disk 1)与虚拟目录的根目录关联,其他硬盘可以挂载到虚拟目录结构中的任何地方。在这个图片中,另一块硬盘(Disk 2)被挂载到了/home,这是用户主目录所在的位置。
- 常见的Linux目录名
-
遍历目录
-
cd destination
-
单个参数destination,用以指定你想切换到的目录名。 (如果没有为cd命令指定目标路径,则会切换到你的用户主目录。)
-
-
destination参数可以用两种方式表示:一种是绝对路径,另一种是相对路径。
-
绝对路径:用户只需在cd命令后指定完整的路径名即可:
-
- 在上面的例子中,提示符开头有一个波浪号(~)。在切换到另一个目录之后,这个波浪号被bin替代了。CLI提示符正是用它来帮助你跟踪当前所在虚拟目录结构中的位置。
-
- 如果尚未配置提示符来显示当前shell会话的绝对路径,也可以使用shell命令来显示所处的位置。pwd命令可以显示出shell会话的当前目录,该目录被称为当前工作目录。
-
相对路径:相对路径不以代表根目录的正斜线(/)开头,而是以目录名(如果你准备切换到当前工作目录下的某个目录的话)或是一个特殊字符开始。
-
假如你位于home目录中,希望切换到Documents子目录,那么可以使用cd命令配合相对路径:
-
-
两个特殊字符可用于相对路径中:
-
·单点号(.),表示当前目录;
-
·双点号(..),表示当前目录的父目录。
-
如果你处于主目录下的Documents目录中,需要切换到主目录下的Downloads目录
-
-
必要时也可用多个双点号来向上切换目录。
-
-
-
-
-
-
-
- 列出文件和目录 列表命令(ls)
- ls命令输出的列表是按字母排序的(按列而不是按行排序)。
- ls命令还可以用不同的颜色来区分不同类型的文件。
- 没有安装彩色终端仿真器,可以使用ls命令的-F选项来轻松地区分文件和目录。使用-F选项可以得到如下输出:
- -F选项会在目录名之后添加正斜线(/),以方便用户在输出中分辨。类似地,它还会在可执行文件(比如上面的my_script文件)之后添加星号(*),以帮助用户找出可在系统中运行的文件。
- Linux经常使用隐藏文件来保存配置信息。在Linux中,隐藏文件通常是文件名以点号(.)开始的文件。这些文件并不会在ls命令的默认输出中出现。
- 要想显示隐藏文件,可以使用-a选项。
- -R是ls命令的另一个选项,称作递归选项,可以列出当前目录所包含的子目录中的文件。
- 命令 ls –F –R。可以将其合并:ls –FR。
- -l选项会产生长列表格式的输出,提供目录中各个文件的详细信息
- 查看单个文件的长列表,那么只需在ls -l命令之后跟上该文件名即可。
- 查看目录的相关信息,而非目录所包含的内容,则除了-l选项之外,还得添加-d选项,即ls -ld Directory-Name。
- 过滤输出列表
- 指定特定的文件名作为过滤器时,ls命令只会显示该文件的信息
- 有时你可能不知道要找的那个文件的确切名称。ls命令也能识别标准通配符(wildcard),并在过滤器中用其来进行模式匹配:·问号(?)代表任意单个字符;·星号(*)代表零个或多个字符; 方括号代表单个字符位置并给出了该位置上的多个可能的选择。还可以使用惊叹号(!)将不需要的内容排除在外:
- 指定特定的文件名作为过滤器时,ls命令只会显示该文件的信息
- 处理文件
- (1) 创建文件
- touch命令会创建好指定的文件并将你的用户名作为该文件的属主。注意,新文件的大小为0,因为touch命令只是创建了一个空文件。
- touch命令会创建好指定的文件并将你的用户名作为该文件的属主。注意,新文件的大小为0,因为touch命令只是创建了一个空文件。
- (2)复制文件
- cp source destination
- 当参数source和destination都是文件名时,cp命令会将源文件复制成一个新的目标文件,并以destination命名。
- 如果目标文件已经存在,则cp命令可能并不会提醒你这一点。最好加上-i选项,强制shell询问是否需要覆盖已有文件
- 也可将文件复制到现有目录中:
- 注意:先前的例子在目标目录名尾部加上了一个正斜线(/)。这表明Documents是一个目录而非文件。这有助于表明目的,而且在复制单个文件时非常重要。如果没有使用正斜线,同时子目录/home/christine/Documents又不存在,就会产生麻烦。在这种情况下,试图将一个文件复制到Documents子目录反而会创建名为Documents的文件,更是连错误消息都不会有。因此,记得在目标目录名尾部加上正斜线。
- 将源文件名很长的文件复制到当前工作目录中,可使用单点号:
- cp命令的-R选项威力强大。可以用它在单个命令中递归地复制整个目录的内容
- 也可以在cp命令中使用通配符:
-
使用命令行补全 (也称为制表键补全)
-
制表键补全允许你在输入文件名或目录名的时候,按一下制表键,让shell帮你将内容补充完整
-
使用制表键补全的技巧在于要给shell提供足够的文件名信息,使其能够将所需文件名与其他文件名区分开。假如有另一个文件名也是以really开头,那么就算按了制表键,也无法自动补全。这时候你会听到嘟的一声。要是再按一下制表键,shell会将所有以really开头的文件名都列出来。这个特性可以让你观察究竟应该输入哪些内容才能完成自动补全。
-
- cp source destination
- (1) 创建文件
-
链接文件 (链接是目录中指向文件真实位置的占位符)
-
符号链接(也称为软链接)是一个实实在在的文件,该文件指向存放在虚拟目录结构中某个地方的另一个文件。这两个以符号方式链接在一起的文件彼此的内容并不相同。要为一个文件创建符号链接,原始文件必须事先存在。然后可以使用ln命令以及-s选项来创建符号链接:
-
-
符号链接文件名slink_test_file位于ln命令的第二个参数的位置
-
长列表(ls -l)中显示的符号文件名后的->符号表明该文件是链接到文件test_file的一个符号链接
-
-
另一种证明链接文件是一个独立文件的方法是查看inode编号。 可以使用ls命令的-i选项:
-
-
-
硬链接创建的是一个独立的虚拟文件,其中包含了原始文件的信息以及位置。但是两者就根本而言是同一个文件。要想创建硬链接,原始文件也必须事先存在,只不过这次使用ln命令时不需要再加入额外的选项了:
-
-
以硬链接相连的文件共享同一个inode编号。 两者其实就是同一个文件。另外,彼此的文件大小也一模一样
-
-
-
-
文件重命名
-
重命名文件称为移动(moving)。mv命令可以将文件和目录移动到另一个位置或是重新命名:
-
mv fall fzll (将fall重命名fzll;mv指令只影响文件名)
-
也可以使用mv来移动文件的位置
-
和cp命令类似,使用-i选项。这样在mv试图覆盖已有的文件时会发出询问。
-
可以使用mv命令在移动文件的同时进行重命名
-
-
-
-
删除文件
- rm -i fall (删除文件fall)
- -i选项会询问你是否真的要删除该文件。shell没有回收站或者垃圾箱这样的东西,文件一旦被删除,就再也找不回来了。
- 也可以使用通配符元字符删除一组文件 如(rm -i f?ll )
- rm命令的另一个特性是,如果你要删除很多文件,又不想被命令提示干扰,可以用-f选项来强制删除。小心为妙!
- rm -i fall (删除文件fall)
-
管理目录
-
创建目录 mkdir New_Dir
-
可以根据需要“批量”地创建目录和子目录 (使用mkdir命令的-p选项)
-
-
删除目录 rmdir
-
-
在默认情况下,rmdir命令只删除空目录。因为我们在Wrong _ Dir目录下创建了一个文件newfile,所以rmdir命令会拒绝删除该目录。要想删除这个目录,需要先把目录中的文件删掉,然后才能在空目录中使用rmdir命令:
-
-
也可以在整个非空目录中使用rm命令。-r选项使得rm命令可以向下进入(descend into)目录,删除其中的文件,然后再删除目录本身
-
一口气删除目录树的最终解决方案是使用rm -rf命令。该命令不声不响,能够直接删除指定目录及其所有内容。
-
-
-
-
查看文件内容
-
查看文件类型 file命令 探测文件的内部并判断文件类型:
-
查看整个文件
-
1.cat命令(文本文件的内容)
- -n选项会给所有的行加上行号
- 给有文本的行加上行号,可以用-b选项
- 对大文件来说,cat命令多少有些烦人。文件内容会在屏幕上一闪而过。
-
2.more命令
-
more命令会显示文本文件的内容,但会在显示每页数据之后暂停下来
-
-
3.less命令
-
less命令提供了多个非常实用的特性,能够实现在文本文件中前后翻动,还有一些高级搜索功能。
-
less命令的操作和more命令基本一样
-
man less可以查看less命令的所有可用选项
-
-
-
查看部分文件(查看的数据经常位于文本文件的开头或末尾。)如果数据是在文件末尾(比如日志文件),则需翻过成千上万行的文本才能看到最后那部分。
-
1.tail命令 显示文件最后几行的内容 在默认情况下,它会显示文件的末尾10行。
-
可以向tail命令中加入-n选项来修改所显示的行数。通过加入-n 2,使得tail命令只显示文件的最后两行
-
-
2.head命令 默认前10行 也支持-n选项
-
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下