Linux入门指南:从命令行到文件系统

发布时间:2026/7/6 14:56:07
Linux入门指南:从命令行到文件系统 1 初始Linux1.1 什么是LinuxLinux 是一套免费、开源、多用户、多任务的操作系统内核基于它搭配软件组成完整操作系统,类比:windowsmacOS等这些都是操作系统1.2 操作系统的定义定位以及操作方式1 定义操作系统Operating System简称 OS是管理计算机硬件与软件资源、为用户和应用程序提供服务的系统软件是电脑硬件和上层软件之间的中间桥梁。2 定位3 操作方式操作系统的操作方式有三种:1图形化GUI普通人最常用例如:windowsmacOS等2命令行 CLI程序员 / 运维核心操作方式3批处理 / 脚本自动化操作高级批量方式虽然Linux随着时代发展已经有图形化界面的产生但是我们程序员还是使用命令行是更为常见的所以之后的开发也是围绕着在Linux上用命令行做开发1.3 命令行和命令1 命令行命令行是一种操作界面和 Windows 桌面这种图形界面对应。图形界面鼠标点图标操作GUI命令行纯文字黑框键盘打字输入指令操作系统CLI2 命令命令就是你输入的一条条指令让系统做具体事情是真正干活的工具。实际上命令也是一种文件是一种可执行的文件。Linux 命令基础规则命令 [选项] [文件/目录路径]-----注意空格的分割1.4 初识Linux的shell命令以及运行原理1 引入Linux严格意义上称为操作系统我们称之为核心(kernel)但是我们用户一般不能直接使用kernel。而是通过kernel的外壳程序。也就是所谓的shell来与kernel沟通。这是我们就会产生疑问为什么不能直接使用kernel呢?shell又是什么?2 shell是什么shell简单来说就是命令行解释器(command interpreter)。3 shell的功能主要功能:1将使用者的命令翻译给核心(kernel)处理2将kernel运行的结果翻译给使用者上面这张图就很好的解释了shellkernell使用者直接的关系。小王就是使用者不擅长和女孩子(男孩子)打交道既使用者不擅长和kernel打交道因为他的底层都是一些任务管理子进程创建之类的复杂用c语言和汇编混合编写所以使用者会展现出不擅长。王婆就是shell了她擅长和别人打交道可以帮助传递命令2 初识Linux结构和文件系统对象我们想要彻底的理解Linux们首先要先明确 目录路径文件的概念以及它的结构2.1 目录目录文件夹目录Directory俗称文件夹是操作系统用于分类、组织、管理文件与子目录的容器结构。目录就是一种清单记录当前路径里有哪些文件在Linux中目录是类型为 d 的特殊文件遵循 Linux「一切皆文件」思想它本身占用独立 结点但和普通文件存储内容完全不同 普通文件存用户数据文本、二进制 目录内部只存储一张映射表:文件名——对应结点的编号。 目录的作用是把系统里所有文件分层收纳构建一棵以/为起点的树形文件系统。2.2 路径1 定义路径是定位文件 / 目录位置的一串字符用来告诉系统这个文件在文件系统树的哪一层。通常 . 来表示当前目录 .. 来表示上级目录在Linux中所有文件以 / 根目录起点形成唯一树形结构路径就是树上从起点到目标节点的路线。2 路径分类绝对路径:一般从/开始不依赖其他目录的定位文件的方式。绝对路径⼀般不会随着用户的路径变化而丧失唯⼀性⼀般在特定服务的配置文件中经常被使用相对路径:相对于当前用户所在的目录来定位文件的方式。相对路径因为它的便捷性⼀般在命令行中使用较多3 路径存在的意义树状组织方式都是为了保证快速定位查找到指定的文件而定位文件就需要具有唯一性的方案来进行定位文件。其中任何一个节点都只有一个父节点所以从根目录开始定位指定文件路径具有唯一性2.3 文件1 文件的定义一、通用计算机定义广义文件是存储在存储设备上、拥有独立名称、由一串二进制数据构成的有序数据集合系统会记录它的大小、访问权限、修改时间等元信息供程序读写。注意:如果在磁盘上创建一个空文件也是会占用内存空间的文件内容属性二、Linux 内核专属定义核心一切皆文件Linux 对文件的定义范围极大不局限于磁盘上存数据的文档凡是可以通过open/read/write/close这一套系统调用进行读写操作的对象都称之为文件。2 Linux下文件的分类标识类型说明示例-普通文件存储数据文本、二进制程序、压缩包a.txt、nginxd目录文件文件夹存放文件名与对应 inode 映射/home、/etcl软链接快捷方式指向另一个文件路径ln -s 创建b块设备硬盘、U 盘按块读写带缓存/dev/sdac字符设备键盘、串口逐字节流式读写/dev/ttyp管道文件进程间单向通信mkfifo 创建s套接字 socket本地进程双向通信服务本地通讯/var/run/mysql.sock3 Linux下对文件的理解--Everything is a file 一切皆文件在Linux系统中在 Linux 内核视角里所有软硬件资源都统一抽象成文件操作方式完全一致读、写、打开、关闭比如:键盘显示器目录(文件夹)还有用户其实在Linux都是一个一个的文件的形式存在的。其实不仅仅是Linux在windows下也是这样定义的例如在Windows上我们日常看到的桌面其实也是一个文件也可以对它进行读、写、打开、关闭只是windows做了图形化界面的处理而已2.4 Linux的结构Linux 文件系统是一棵以 /根目录为起点的树任何文件、目录都有唯一路径注意:1 非叶子结点:一定是一个非空目录2 叶子结点:一定是一个文件/空目录3 初始Linux基本指令ls指令语法ls [选项] [目录/文件]功能:对于目录列出当前目录下的子目录和文件。对于文件将来列出文件名以及信息常见选项• -a 列出目录下的所有文件包括以 . 开头的隐含⽂件。• -d 将目录像文件一样显示而不是显示其下的文件件。如ls ‒d 指定目录• -k 以 k 字节的形式表示文件的大小。ls ‒alk 指定文件• -l 列出文件的详细信息• -r 对目录反向排序• -t 以时间排序例:隐藏文件一、定义在 Linux 系统中文件名以英文小数点.作为第一个字符的文件或文件夹就是隐藏文件一般用ls命令看不到只有加上-a选项才可以看到例二、设计初衷存放程序配置、缓存、密钥、用户环境设置等不常手动修改的文件日常执行ls时默认不展示让目录界面更整洁避免大量配置文件干扰正常操作clear指令语法clear功能:清屏常见选项无例:clear之前clear之后pwd指令语法pwd功能:显示用户所在的目录常见选项:无例:cd指令语法:cd 目录名功能:改变工作目录从一个目录进入到另一个目录中常见选项:无例touch指令语法:touch [选项] 文件名/文件路径功能:touch命令参数可更改文档或目录的日期时间包括存取时间和更改时间或者新建⼀个不存在的文件常见选项:• -a 仅更新访问时间 atime不改动 修改时间mtime• -c 文件不存在时不创建新文件只修改已有文件时间例adduser指令语法:adduser [选项] 用户名功能:新建系统用户创建账号创建用户家目录常见选项:无例deluser指令语法:deluser [选项] 用户名功能:删除用户账号默认不会删除用户家目录、邮件文件常见选项:• --remove-home 删除用户 一并删除家目录 /home/xxx例passwd指令语法:passwd [选项] 用户名功能:修改用户密码、管理密码相关属性普通用户只能改自己密码root 可改所有人常见选项:•-d delete删除用户密码免密登录高危例mkdir指令语法:mkdir [选项] 目录名/目录路径 [-p 路径地址]功能:在当前目录下创建一个自定义名字的子目录目录常见选项:•-p/--parents: 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即⼀次可以建立多个目录例rmdir指令语法:rmdir [-p] [目录名]适用对象具有当前目录操作权限的所有使用者功能:删除空目录常见选项:•-p当子目录被删除后如果父目录也变成空目录的话就连带父目录录⼀起删除。例rm指令语法:rm [-f -i -r ] [目录名/文件]适用对象所有使用者功能:删除文件和目录常见选项:• -f 即使文件属性为只读(即写保护)亦直接删除• -i 删除前逐⼀询问确认• -r 删除目录及其下所有文件(递归删除)例man指令语法:man [选项] 命令适用对象所有使用者功能:查看指令的使用手册常见选项:• -k 根据关键字搜索联机帮助• num 只在第num章节查找• -a 将所有章节的都显示出来比如man printf 它缺省从第一章开始搜索知道就停止用a选项当按下q退出他会继续往后⾯搜索直到所有章节都搜索完毕注man手册分为9章(不同系统可能会有差别)• 1是普通的命令• 2是系统调用,如open,write之类的(通过这个至少可以很方便的查到调用这个函数需要加什么头文件)• 3是库函数,如printf,fread4是特殊文件,也就是/dev下的各种设备文件• 4略• 5是指文件的格式,比如passwd,就会说明这个⽂件中各个字段的含义• 6是给游戏留的,由各个游戏⾃⼰定义• 7是附件还有⼀些变量,⽐如像environ这种全局变量在这⾥就有说明• 8是系统管理⽤的命令,这些命令只能由root使⽤,如ifconfig• 9略例cp指令语法:cp [选项] 源文件/源目录 目标文件/目标目录功能:复制文件或目录说明:• cp指令用于复制文件或目录• 如同时指定两个以上的文件或目录且最后的目的地是⼀个已经存在的目录则它会把前面指定的所有文件或目录复制到此目录中常见选项:• -f 或--force强行复制文件或目录不论目的文件或目录是否已经存在• -i 或--interactive覆盖文件之前先询问用户• -r 递归处理将指定目录下的文件与子目录一并处理。若源文件或目录的形态不属于目录或符号链接则一律视为普通文件处理例:echo指令语法:echo [选项] [文件]功能:在终端输出文本、变量、字符串打印内容到标准输出。常见选项:• -n 不输出末尾换行(echo末尾默认换行-n取消换行)例但是echo只能输出到终端吗?其实echo还能输出到文件中这里就要提出一个新的概念----重定向重定向概念:程序运行有三种标准流标准输入 stdin文件描述符 0默认键盘输入标准输出 stdout文件描述符 1默认屏幕输出正常打印信息标准错误 stderr文件描述符 2默认屏幕输出报错信息重定向 改变输入 / 输出的目标不打印到屏幕写入文件或传给其他程序。符号作用标准输出覆盖写入文件标准输出追加写入文件2错误输出覆盖2错误输出追加标准 错误全部覆盖标准 错误全部追加从文件读取输入标记多行文本输入/dev/null屏蔽所有输出管道输出传给下一条命令例:cat指令语法:cat [选项] [文件]功能:查看文件的内容常见选项:• -b 对非空输出行编号空行不做编号• -n 对输出的所有行编号• -s 不输出多行空行例mv指令mv命令是move的缩写可以用来移动文件或者将文件改名move (rename) files,经常用来备份文件或者目录语法:mv [选项] [源目录/源文件] [目标目录/目标文件]功能:1. 视mv命令中第二个参数类型的不同是目标文件还是目标目录mv命令将文件重命名或将其移至⼀个新的目录中。2. 当第二个参数类型是文件时mv命令完成文件重命名此时源文件只能有一个也可以是源目录名它将所给的源文件或目录重命名为给定的目标文件名。3. 当第二个参数是已存在目录名称时源文件或目录参数可以有多个mv命令将各参数指定的源文件均移至目标目录中。常见选项:• -f force 强制的意思如果目标文件已经存在不会询问而直接覆盖• -i 若目标文件(destination)已经存在时就会询问是否覆盖例mv指令重命名:more指令语法:more [选项] 文件功能:more命令功能类似cat区别在于more可以浏览非常长的数据而且还可以翻页多用于查看日志常见选项:• -n 指定输出行数• q 退出more例:less指令•less工具也是对文件或其它输出进行分页显示的工具应该说是linux正统查看文件内容的工具功能极其强⼤• less 的用比起 more 更加的有弹性在 more 的时候我们并没有办法向前面翻只能往后面看• 但若使用了 less 时就可以使用 [pageup] [pagedown] 等按键的功能来往前往后翻看文件更容易用来查看一个文件的内容• 除此之外在 less 里头可以拥有更多的搜索功能不止可以向下搜也可以向上搜。语法:less [参数] 文件功能:less与more类似但使用less可以随意浏览文件而 more 仅能向前移动却不能向后移动而且less在查看之前不会加载整个文件。常见选项:• -i 忽略搜索时的大小写• -N 显示每行的行号• / 字符串向下搜索“字符串”的功能• ? 字符串向上搜索“字符串”的功能• n重复前⼀个搜索与 / 或 ? 有关• N反向重复前⼀个搜索与 / 或 ? 有关• q:quit例:head指令head 与 tail 就像它的名字⼀样的浅显易懂它是用来显示开头或结尾某个数量的文字区块head 用来显示档案的开头至标准输出中而 tail 想当然尔就是看档案的结尾。语法:head [参数] 文件功能:head 用来显示档案的开头至标准输出中默认head命令打印其相应文件的开头10行。常见选项:• n行数 显示的行数例:tail指令语法:tail [参数] 文件功能:用于显示指定文件末尾内容不指定文件时作为输⼊信息进行处理。常用查看日志文件。常见选项:• n行数 显示的行数• -f 循环读取例:但是如果我们想要读取5~10行的数据那我们又要怎么读呢?由此引出了管道的定义管道定义:管道是 Linux Shell 中一种进程间通信IPC机制语法符号为竖线 | 。作用:把前一条命令的标准输出stdout文件描述符 1直接作为后一条命令的标准输入stdin文件描述符 0数据在内存中流转不生成临时文件。例:date指令语法:date [选项] [格式字符串]功能:查看系统当前时间,自定义格式化输出时间常见功能:1.在显示方面使用者可以设定想要显示的格式格式设定为⼀个加号后接数个标记其中常用的标记列表如下• %H : 小时(00..23)• %M : 分钟(00..59)• %S : 秒(00..61)• %X : 相当于 %H:%M:%S• %d : 日 (01..31)• %m : 月份 (01..12)• %Y : 完整年份 (0000..9999)• %F : 相当于 %Y-%m-%d2.在设定时间方面• date -s //设置当前时间只有root权限才能设置其他只能查看。• date -s 20080523 //设置成20080523这样会把具体时间设置成空00:00:00• date -s 01:01:01 //设置具体时间不会对日期做更改• date -s “01:01:01 2008-05-23″ //这样可以设置全部时间• date -s “01:01:01 20080523″ //这样可以设置全部时间• date -s “2008-05-23 01:01:01″ //这样可以设置全部时间• date -s “20080523 01:01:01″ //这样可以设置全部时间3.时间戳• 时间-时间戳date %s• 时间戳-时间date -d1508749502• Unix时间戳英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp是从1970年1月1日UTC/GMT的午夜开始所经过的秒数不考虑闰秒例:cal指令cal命令可以用来显示公历阳历日历。公历是现在国际通用的历法又称格列历通称阳历。“阳历”又名“太阳历”系以地球绕行太阳一周为一年为西方各国所通用故又名“西历”。语法:cal [选项] [月份] [年份]功能:用于查看日历等时间信息如只有一个参数则表示年份(1-9999)如有两个参数则表示月份和年份常见选项:• -3 显示系统前一个当前月当前月下一个月的月历• -j 显示在当年中的第几天一年日期按天算从1月1号算起默认显示当前月在一年中的天数• -y 显示当前年份的日历例:find指令• Linux下find命令在目录结构中搜索文件并执行指定的操作。• 即使系统中含有网络文件系统(NFS)find命令在该文件系统中同样有效只要你具有相应的权限。• 在运行一个非常消耗资源的find命令时很多人都倾向于把它放在后台执行因为遍历一个大的文件系统可能会花费很长的时间(这里是指30G字节以上的文件系统)。语法:find [查找路径] [匹配条件] [执行动作]注:find比较特殊会将路径放在指令后而不是放在命令最后功能:用于在文件树中查找文件并作出相应的处理可能访问磁盘常见选项:• -name 按照文件名查找文件• 其他选项需要的时候在查这个命令其实比较复杂例:通配符核心定义* 是 Shell 元字符通配符匹配任意长度任意字符包含 0 个字符仅作用于文件名匹配不会匹配目录分隔符 /。注意仅在命令行参数、glob 匹配生效放到引号内会失去通配功能。例:如图’code*‘中*就是通配符的应用可以匹配当前目录下的所有有code的文件注意事项:1. 引号控制 * 是否被 Shell 提前解析例如上图中就要加上 防止*被shell提前解析2.*不会匹配隐藏文件.开头文件which指令语法:which 指令功能:搜索系统指定的命令常见选项:无例:whereis指令语法:whereis 目录/文件功能:用于找到程序的源、二进制文件或手册常见选项:无例:whoami指令语法:whoami功能:用于查找当前正在登录操作终端的用户名常见选项:无例:alias指令语法:alias新名字原始指令 [参数]功能:重命名指令常见选项:无例:grep指令语法:grep [选项] 搜寻字符串 文件功能:在文件中搜索字符串将找到的行打印出来注意和find区分grep实在文件里搜索字符串find是搜索文件/目录常见选项:• -i 忽略大小写的不同所以大小写视为相同• -n 顺便输出行号• -v 反向选择亦即显示出没有 搜寻字符串 内容的那一行例:bc指令语法:bc [选项] [文件]功能:Linux 终端高精度计算器常见选项:无例uname指令语法:uname [选项]功能:uname用来获取电脑和操作系统的相关信息常见选项:• -r 只打印当前系统内核发行版本号例zip指令语法:zip [选项] [路径]压缩文件.zip 目录/文件功能:将目录或文件压缩成zip格式常见选项:• -r 递归处理将指定目录下的所有文件和子目录一并处理例sz指令语法:sz [路径]压缩文件.zip功能:将zip格式的压缩文件发给Windows主机常见选项:无例unzip指令语法:unzip [选项] 压缩包.zip [-d 目标目录]功能:将zip格式的压缩包解压成目录/文件常见选项:• -d 指定文件解压到哪个目录例rz指令语法:rz [参数]功能:读取Windows上的压缩包常见选项:无例tar指令语法:tar [主操作参数] [辅助选项] -f 压缩包名.tgz 源文件/目录功能:压缩打包文件和解压压缩包常见选项:• -c 建立⼀个压缩文件的参数指令(create的意思)• -x 解开⼀个压缩文件的参数指令• -t 查看 tarfile 的文件• -z是否同时具有 gzip 的属性亦即是否需要用 gzip 压缩• -j 是否同时具有 bzip2 的属性亦即是否需要用 bzip2 压缩• -v 压缩的过程中显示文件这个常用但不建议用在背景执行过程• -f 使用档名请留意在 f 之后要立即接档名喔不要再加参数• -C 解压到指定目录例注意以上的这些命令和选项只是常用的部分其他常用指令会在后续穿插知识点章节讲解说明还有些不常用的命令可以在开发的时候现查