电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
Linux入门的基础知识点,有这篇就够了(持续更新)
分 享
扫描二维码分享
Linux入门的基础知识点,有这篇就够了(持续更新)
linux
一口Linux
关注
发布时间: 2021-05-21
丨
阅读: 742
很多粉丝给一口君留言,想要学习Linux资料,其实关注一口君的公众号,后台回复 1024 ,就有很多非常不错的电子书,但是有一个问题,很多粉丝是初学者,而这一大堆电子书,估计随便一本,还没看完就基本上开始劝退了。 **到底要如何Linux入门呢?** 因为Linux的知识体系非常的庞大,IT行业很多领域都需要使用到Linux,有运维的、有应用程序开发的、有驱动开发的、有系统优化的、有搞单片机的、有做系统移植的、有做网络产品的等等。 总结一句话,IT的很大部分从业者都需要掌握Linux的部分知识,但是由于每个人的从事领域不一样,对Linux的要求也不一样,这就直接导致,网上搜索学习路线有很多种,还有就是推荐的书籍很多都不利于初学者。 比如Linux命令的学习,很多人都力推《鸟哥的私房菜》这本书,一口君在直播间多次强调,初学者不要看这本书,不是说这本书不好,而是,这本书其实你要当做一本工具书来看,如果你的目标是想快速的基于Linux做一些开发工作,最迫切的就是快速掌握一些基本的命令,一些和开发相关的最基础的知识,而不是去学习那些可能这辈子都用不到的命令。 为了让初学者更好的学习Linux,入门Linux,一口君特地整理了Linux入门必须掌握的一些基础知识点,掌握这些知识点之后,就可以学习C编程的知识了,后续遇到一些不熟悉的命令和配置,只需要网上搜索下就可以很快上手了。 后续一口君会陆续录制Linux入门的视频,手把手教大家Linux入门。 欢迎大家访问我的B站空间,https://space.bilibili.com/661326452 正在更新中。 # 一、Linux操作系统概述 ## 1、发展 1991 Linus Linux 0.0.1版,代码为8K行。现在最新版本为5.12.4。Linux加入了GNU,整体基于GPL协议,允许开源、分享传播、修改。 内核下载的地址: [https://www.kernel.org/](https://www.kernel.org/) ## 2、组成 1. kernel内核: 核心程序,用于管理硬件设备、系统的线程进程、内存、交换空间、文件系统、精灵进程(守护进程)等。主要实现系统程序与硬件之间的控制管理功能。 2. Shell: 包裹在内核之外的人机交互界面,用于用户和内核之间打交道的功能,类似于windows的cmd。 通过Shell将输入的命令与内核通讯,好让内核可以控制硬件开正确无误的操作工作。 Shell有着不同的分类,比如Bourne shell(sh),Korn shell(ksh)、C shell (csh)、Bourne-again shell(bash)、tcsh。其中最常用的有csh和bash。 ubuntu 16.04的terminal如下: ![ ](https://img-blog.csdnimg.cn/20210515100124107.png) 3. user application Linux根据程序的运行,分为用户空间和内核空间,简单的理解就是,普通的应用程序运行在用户空间,一些涉及到系统核心资源的操作的程序运行在内核空间,比如TCP/IP协议栈、驱动、进程调度、内存管理、文件系统等都运行于Linux内核空间, >其实一些应用程序当需要访问系统资源的时候,必须通过系统调用,通过一些内核函数将系统资源由内核空间拷贝到用户空间。 4. Files System: 文件系统,管理文件和目录。 ![ ](https://img-blog.csdnimg.cn/20210515100317869.png) ## 3、Linux的特性: 多用户、多任务(进程、线程处理),多平台,图形化界面(x-windows)、硬件低配置、通信与联网、应用程序的支持(编辑器、编辑工具、数据库、办公软件、图形处理、Internet应用、游戏)。 # 二、Linux操作系统安装 ## 1、Linux的选择 **red hat:** 企业级的,已经开始收费(商用)。 **CentOS** 是RHEL的克隆版本。RedHat一直都提供源代码的发行方式,CentOS就是将RedHat发行的源代码重新编译一次,形成一个可使用的二进制版本。由于Linux的源代码是GNU,所以从获得RedHat的源代码到编译成新的二进制,都是合法。只是RedHat是商标,所以必须在新的发行版里将RedHat的商标去掉。 通常搭建服务器选用CentOS。 **ubuntu:** 桌面开源的,比较纯正的Linux,android官方指定的编译操作系统,发展快、已支持ARM架构。 ubuntu在开发者中,非常受欢迎,一口君所有的文章和视频都以ubuntu为主。 ## 2、安装Ubuntu Desktop Linux环境安装篇幅较长,安装详细步骤参考这篇文章: 《[linux环境搭建-ubuntu16.04安装](https://blog.csdn.net/daocaokafei/article/details/114294275)》 ## 3、基本操作 ```bash ctrl+alt F2 可以进入终端界面 ctrl+alt F7 进入桌面界面 ctrl+alt+t 文本编辑 ``` 我们通常用快捷键**ctrl+alt+t**打开一个终端,这个一定要记住。 ![ ](https://img-blog.csdnimg.cn/20210515220109380.png) 其中: ```bash peng 当前用户 ubuntu 主机名 ~ 当前用户主目录,/home/peng,每一个用户都会在/home下创建一个与用户名同名的目录 $ 普通用户 ``` 如果切换到管理员用户 ![ ](https://img-blog.csdnimg.cn/20210515220947486.png) ```bash root 管理员 /home/peng 当前工作目录 # 当前是管理员 ``` # 三、Linux文件系统及文件基础 ## 1、文件系统概述 Linux 中一切皆为文件,文件系统用来组织计算机的文件和资料的系统,是操作系统封装的一个系统服务程序,实际是一个软件程序,用来存储和管理计算机文件和资料。 文件系统分类如下: ```bash 磁盘文件系统:NTFS,EXT3 闪存文件系统:JFFS2,YAFFS 数据库文件系统:BFFS,WINFS 网络文件系统:NFS 虚拟文件系统:VFS(Proc) ``` 文件系统的功能:能定义文件的组织方式,文件的结构;提供建立和存取文件的环境(目录和文件) ## 2、Linux文件系统及文件 1. EXT3:是一个日志方式的文件系统,系统中的每个文件都有索引,用户对文件的每个操作都会记录在日志中,形成一个任务队列。 2. SWAP:是交换分区的文件系统,类似于windows的虚拟内存,其实现的方式有以下两种: 第一种是进行内存排列像内存池一样,进行优化; 第二种是把硬盘上的空间模拟成内存。 Swap是Linux 的虚拟内存,在安装时要设置好大小,一般设置为物理内存的两倍。 3. 目录结构 linux 的结构是由很多文件块区组成,与Windows分区不同。 |目录 | 应放置档案内容 | |--|:--| |/bin|系统有很多放置执行档的目录,但/bin比较特殊。因为/bin放置的是在单人维护模式下还能够被操作的指令。在/bin底下的指令可以被root与一般帐号所使用,主要有:cat,chmod(修改权限), chown, date, mv, mkdir, cp, bash等等常用的指令。| |/boot|主要放置开机会使用到的档案,包括Linux核心档案以及开机选单与开机所需设定档等等。Linux kernel常用的档名为:vmlinuz ,如果使用的是grub这个开机管理程式,则还会存在/boot/grub/这个目录。| | /dev | 在Linux系统上,任何装置与周边设备都是以档案的型态存在于这个目录当中。 只要通过存取这个目录下的某个档案,就等于存取某个装置。比要重要的档案有/dev/null, /dev/zero, /dev/tty , /dev/lp*, / dev/hd*, /dev/sd*等等 | |/etc | 系统主要的设定档几乎都放置在这个目录内,例如人员的帐号密码档、各种服务的启始档等等。 一般来说,这个目录下的各档案属性是可以让一般使用者查阅的,但是只有root有权力修改。 FHS建议不要放置可执行档(binary)在这个目录中。 比较重要的档案有:/etc/inittab, /etc/init.d/, /etc/modprobe.conf, /etc/X11/, /etc/fstab, /etc/sysconfig/等等。 另外,其下重要的目录有:/etc/init.d/ :所有服务的预设启动script都是放在这里的,例如要启动或者关闭iptables的话: /etc/init.d/iptables start、/etc/init.d/ iptables stop| |/etc/xinetd.d/ | 这就是所谓的super daemon管理的各项服务的设定档目录。| |/etc/X11/ | 与X Window有关的各种设定档都在这里,尤其是xorg.conf或XF86Config这两个X Server的设定档。 | /home| 这是系统预设的使用者家目录(home directory)。 在你新增一个一般使用者帐号时,预设的使用者家目录都会规范到这里来。比较重要的是,家目录有两种代号: ~ :代表当前使用者的家目录,而 ~guest:则代表用户名为guest的家目录。 |/lib |系统的函式库非常的多,而/lib放置的则是在开机时会用到的函式库,以及在/bin或/sbin底下的指令会呼叫的函式库而已 。 什么是函式库呢?妳可以将他想成是外挂,某些指令必须要有这些外挂才能够顺利完成程式的执行之意。 尤其重要的是/lib/modules/这个目录,因为该目录会放置核心相关的模组(驱动程式)。| |/media|media是媒体的英文,顾名思义,这个/media底下放置的就是可移除的装置。 包括软碟、光碟、DVD等等装置都暂时挂载于此。 常见的档名有:/media/floppy, /media/cdrom等等。| |/mnt|如果妳想要暂时挂载某些额外的装置,一般建议妳可以放置到这个目录中。在古早时候,这个目录的用途与/media相同啦。 只是有了/media之后,这个目录就用来暂时挂载用了。| |/opt|这个是给第三方协力软体放置的目录 。 什么是第三方协力软体啊?举例来说,KDE这个桌面管理系统是一个独立的计画,不过他可以安装到Linux系统中,因此KDE的软体就建议放置到此目录下了。 另外,如果妳想要自行安装额外的软体(非原本的distribution提供的),那么也能够将你的软体安装到这里来。 不过,以前的Linux系统中,我们还是习惯放置在/usr/local目录下。| |/root|系统管理员(root)的家目录。 之所以放在这里,是因为如果进入单人维护模式而仅挂载根目录时,该目录就能够拥有root的家目录,所以我们会希望root的家目录与根目录放置在同一个分区中。| |/sbin|Linux有非常多指令是用来设定系统环境的,这些指令只有root才能够利用来设定系统,其他使用者最多只能用来查询而已。放在/sbin底下的为开机过程中所需要的,里面包括了开机、修复、还原系统所需要的指令。至于某些伺服器软体程式,一般则放置到/usr/sbin/当中。至于本机自行安装的软体所产生的系统执行档(system binary),则放置到/usr/local/sbin/当中了。常见的指令包括:fdisk, fsck, ifconfig, init, mkfs等等。| |/srv|srv可以视为service的缩写,是一些网路服务启动之后,这些服务所需要取用的资料目录。 常见的服务例如WWW, FTP等等。 举例来说,WWW伺服器需要的网页资料就可以放置在/srv/www/里面。呵呵,看来平时我们编写的代码应该放到这里了。| |/tmp|这是让一般使用者或者是正在执行的程序暂时放置档案的地方。这个目录是任何人都能够存取的,所以你需要定期的清理一下。当然,重要资料不可放置在此目录啊。 因为FHS甚至建议在开机时,应该要将/tmp下的资料都删除。| ## 3. Linux文件属性: Linux文件属性一共7种: |类型| 字母 |说明 | |--|--|:--| |普通文件类型 | -| Linux中最多的一种文件类型, 包括 纯文本文件(ASCII);二进制文件(binary);数据格式的文件(data);各种压缩文件.第一个属性为 [-] | |目录文件 |d |就是目录, 能用 # cd 命令进入的。第一个属性为 [d],例如 [drwxrwxrwx] | |块设备文件 | b| 块设备文件 : 就是存储数据以供系统存取的接口设备,简单而言就是硬盘。例如一号硬盘的代码是 /dev/hda1等文件。第一个属性为 [b] | |字符设备 | c|字符设备文件:即串行端口的接口设备,例如键盘、鼠标等等。第一个属性为 [c] | |套接字文件 | s|这类文件通常用在网络数据连接。可以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信。第一个属性为 [s],最常在 /var/run目录中看到这种文件类型 | |管道文件 |p|FIFO也是一种特殊的文件类型,它主要的目的是,解决多个程序同时存取一个文件所造成的错误。FIFO是first-in-first-out(先进先出)的缩写。第一个属性为 [p] | |链接文件 | l| 类似Windows下面的快捷方式。第一个属性为 [l],例如 [lrwxrwxrwx] | ### 1、普通文件 使用 ls -l 命令后, ![ ](https://img-blog.csdnimg.cn/20210515115446177.png) 第一列第一个字符为 "-" 的文件为普通文件. ### 2、目录文件 Linux 中的目录也是文件,目录文件中保存着该目录下其他文件的 inode 号 和文件名等信息,目录文件中的每个数据项都是指向某个文件 inode 号的链接,删除文件名就等于删除与之对应的链接。目录文件的字体颜色是蓝色,使用 ls -l 命令查看,第一个字符为"d"(directory)。 目录文件的权限: * 1)r 表明该目录文件具有可读权限,即可以使用 ls 命令查看该目录的存储情况; * 2)w 表明该目录文件具有写权限,即可以往该目录下添加、修改、删除文件; * 3)x 表明该目录文件具有可执行文件,即可以使用 cd 命令进入到该目录下。 可以使用 chmod 指令来改变文件的权限。 ### 3、链接文件 链接文件一般指的是一个文件的软连接(或符号链接),使用 ls -l 命令查看,第一个符号为 "l",文件名为浅蓝色,如下: ![ ](https://img-blog.csdnimg.cn/2021051512024431.png) 这里,test_softlink 就是一个链接文件,从结果上还可以看到它是文件 test.txt 的软链接,删除原文件 test.txt 的话,对应的软链接文件 test_softlink 也会消失。可以使用 ln 命令来创建一个文件的链接文件: 1)软链接 软链接(又称符号链接),使用 ln -s file file_softlink 命令可以创建一个文件的软链接文件: ```bash ln -s test.txt test_softlink ``` 软链接相当于给原文件创建了一个快捷方式,如果删除原文件,则对应的软链接文件也会消失。 2)硬链接 硬链接,相当于给原文件取了个别名,其实两者是同一个文件,删除二者中任何一个,另一个不会消失;对其中任何一个进行更改,另一个的内容也会随之改变,因为这两个本质上是同一个文件,只是名字不同。使用 ls -i 命令查看,可以发现硬链接的两个文件的 inode 号是一样的: ![ ](https://img-blog.csdnimg.cn/2021051512021394.png) 同样的,使用 ln 命令可以创建一个文件的硬链接: ```bash ln test.txt test_hardlink ``` ### 4、设备文件 Linux 中的硬件设备如硬盘、鼠标等也都被表示为文件,即为设备文件。 设备文件一般存放在 /dev/ 目录下,文件名为黄色,如下: ![ ](https://img-blog.csdnimg.cn/20210515120407636.png) 设备文件分两种: * 1)块设备文件: 块设备文件支持以块(block)为单位的访问方式。在 EXT4 文件系统中,一个 block 通常为 4KB 的大小,也就是说每次可以存取 4096(或其整数倍) 个字节的数据。应用程序可以随机访问块设备文件的数据,程序可以自行确定数据的位置,硬盘、软盘等都是块设备。使用 ls -l 命令查看,块设备文件的第一个字符是 "b"(block)。 * 2)字符设备文件: 字符设备文件以字节流的方式进行访问,由字符设备驱动程序来实现这种特性,这通常要用到 open、close、read、write 等系统调用。字符终端、串口和键盘等就是字符设备。另外,由于字符设备文件是以文件流的方式进行访问的,因此可以顺序读取,但通常不支持随机存取。使用 ls -l 命令查看,字符设备文件的第一个字符是 "c"(char)。 ### 5、管道文件(FIFO文件) 管道文件主要用于进程间通信,使用 ls -l 命令查看,第一个字符为 "p"(pipe)。可以使用 mkfifo 命令来创建一个管道文件: ```bash mkfifo fifo_file ``` ![ ](https://img-blog.csdnimg.cn/2021051512053650.png) 在 FIFO 中可以很好地解决在无关进程间数据交换的要求,FIFO 的通信方式类似于在进程中使用文件来传输数据,只不过 FIFO 类型的文件同时具有管道的特性,在读取数据时,FIFO 管道中同时清除数据。 ### 6、套接字文件 套接字文件,通常指域套接字文件,使用 ls -l 命令查看,第一个字符为 "s"。 域套接字是进程间通信(IPC)的一种方法,是可靠的一种IPC通信,是POSIX标准的一个组件,只能用于同一主机间的通信。 后续学习进程间通信需要学习该知识。 ## 4. 文件颜色 常见的文件颜色如下: * 蓝色:目录文件 * 绿色:可执行文件 * 浅蓝色:链接文件 * 红色:压缩文件 * 黄色:字符设备 * 灰色:其他文件 ![ ](https://img-blog.csdnimg.cn/2021051510154315.png)![在这里插入图片描述](https://img-blog.csdnimg.cn/20210515115227350.png) # 四、Linux操作系统命令使用基础 ## 1、命令格式 ```bash $command [option(s)] [argument(s)] 命令名 空格 选项 空格 参数 ``` * command : 命令名 * [option(s)] :选项 * [argument(s)] :参数 **注意:** * 在命令行中,每两个部分之间有空格分隔 * 每个命令行可使用的最多的命令字符是256个 * 命令区分大小写 * 不同的命令提示符使用分隔符号 “/” * 命令中的参数/选项可以是多个,并且参数其实就是要传入命令程序主函数main的参数。 * **[ ]** 表示这个内容可以不包含,比如 [argument(s)] ,输入命令时可以不加参数 ## 2、联机帮助、清屏与历史纪录命令 ### 1)联机帮助 遇到一些函数和命令,不知道含义时可以是用命令man来查看帮助信息。 ```bash man ls man -k keyword ``` ![ ](https://img-blog.csdnimg.cn/20210515121843795.png) man手册根据内容分为9个手册,可以使用下面命令查看 ```bash man man ``` ![ ](https://img-blog.csdnimg.cn/20210515121955307.png) man文档的分类编号 ```bash 1 - commands(普通的命令) 2 - system calls(系统调用) 3 - library calls(库函数) 4 - special files(特殊文件:/dev下设备文件) 5 - file formats and convertions(文件格式) 6 - games for linux(游戏和娱乐) 7 - macro packages and conventions(杂项) 8 - system management commands(管理员命令) 9 - 其他(Linux特定, 用来存放内核例行程序的文档) ``` 使用-k参数,man可以在所有的man文档和简介中查找符合条件的命令。 ```bash peng@ubuntu:~/test$ man -k bash bash (1) - GNU Bourne-Again SHell bash-builtins (7) - bash built-in commands, see bash(1) bashbug (1) - report a bug in bash builtins (7) - bash built-in commands, see bash(1) dh_bash-completion (1) - install bash completions for package rbash (1) - restricted bash, see bash(1) ``` 有的关键词在系统中对应多个手册, 使用-f参数,用于查找同名的手册: ```c peng@ubuntu:~/test$ man -f time time (7) - overview of time and timers time (1) - run programs and summarize system resource usage time (2) - get time in seconds ``` ### 2)清屏 clear 清屏使用命令clear或者使用快捷键:ctrl + l ### 3)历史纪录 history(history -n) 这是一个非常有用的命令,想知道之前输入过的所有命令,就可以用他。 ```bash history :查看最近使用的命令,最多500条 history n :曾经使用的最近n条命令 !n :执行最近第n条命令 !! :执行最近使用的第一条命令 方向上键:执行上一条命令 方向下键:执行下一条命令 ``` # 五、文件管理 ## 1)查看文件目录 下面这几个命令是使用最频繁的命令: |命令 | 说明 | |--|:--| | pwd |显示当前工作目录 | | cd [要改变的目录] | 改变目录| | ls | 列出当前目录的文件和子目录 | | file |辨识文件类型 | * cd ```c cd //回到当前用户主目录 cd ~//回到当前用户主目录 cd ~[用户名] //进入指定用户主目录 ``` * file 功能说明:辨识文件类型。 ```bash 语法:file [-beLvz][-f <名称文件>][-m <魔法数字文件>…][文件或目录…] ``` 参数: ```bash -b 列出辨识结果时,不显示文件名称。 -c 详细显示指令执行过程,便于排错或分析程序执行的情形。 -f<名称文件> 指定名称文件,其内容有一个或多个文件名称呢感,让file依序辨识这些文件,格式为每列一个文件名称。 -L 直接显示符号连接所指向的文件的类别。 -m<魔法数字文件> 指定魔法数字文件。 -v 显示版本信息。 -z 尝试去解读压缩文件的内容。 ``` >补充说明:通过file指令,我们得以辨识该文件的类型。 ```bash peng@ubuntu:~/test$ file wait.c wait.c: ASCII text peng@ubuntu:~/test$ file fifo_file fifo_file: fifo (named pipe) ``` ## 2) 文件路径 什么是文件的路径? 就是文件存放的地方,可以联想为 文件的“家”。 在Linux中,存在着绝对路径和相对路径: ### 绝对路径: 路径的写法一定是由根目录 / 写起的,例如 /usr/local/mysql ### 相对路径: 路径的写法不是由根目录 / 写起的。 例如 首先用户进入到 /home,然后再进入到peng,执行的命令为 ```bash #cd /home #cd peng ``` 此时用户所在的路径为 /home/peng。 第一个cd命令后紧跟/home,前面有斜杠,是绝对路径; 而第二个cd命令后紧跟peng,前面没有斜杠,表示从当前目录下找peng这个目录,这个peng是相对于/home目录来讲的,所以称为相对路径。 ## 3)创建和删除文件目录 ### 1、创建文件touch 功能说明: ```bash 文件名不存在,则创建一个新的空文件 如果文件名存在,更新该文件或者目录的修改访问时间,内容不变。 ``` 语法: ```bash touch [-acfm][-d <日期时间>][-r <参考文件或目录>][-t <日期时间>][–help] [–version][文件或目录…] 或 touch [-acfm][–help][–version][日期时间][文件或目录…] ``` >补充说明: 使用touch指令可更改文件或目录的日期时间,包括存取时间和更改时间。 参数: ```bash -a或–time=atime或–time=access或–time=use 只更改存取时间。 -c或–no-create 不建立任何文件。 -d<时间日期> 使用指定的日期时间,而非现在的时间。 -f 此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。 -m或–time=mtime或–time=modify 只更改变动时间。 -r<参考文件或目录> 把指定文件或目录的日期时间,统统设成和参考文件或目录的日期时间相同。 -t<日期时间> 使用指定的日期时间,而非现在的时间。 –help 在线帮助。 –version 显示版本信息。 ``` ### 2、创建目录mkdir 功能说明: ```bash 建立目录 ``` 语法: ```bash mkdir [-p][–help][–version][-m <目录属性>][目录名称] ``` >补充说明: mkdir可建立目录并同时设置目录的权限。 参数: ```bash -m<目录属性>或–mode<目录属性> 建立目录时同时设置目录的权限。 -p或–parents 若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录。 –help 显示帮助。 –verbose 执行时显示详细的信息。 –version 显示版本信息。 ``` ### 3、删除文件rm 功能说明: ```bash 删除文件或目录。 ``` 语法: ```bash rm [-dfirv][–help][–version][文件或目录…] ``` >补充说明:执行rm指令可删除文件或目录,如欲删除目录必须加上参数”-r”,否则预设仅会删除文件。 参数: ```bash -d或–directory 直接把欲删除的目录的硬连接数据删成0,删除该目录。 -f或–force 强制删除文件或目录。 -i或–interactive 删除既有文件或目录之前先询问用户。 -r或-R或–recursive 递归处理,将指定目录下的所有文件及子目录一并处理。 -v或–verbose 显示指令执行过程。 –help 在线帮助。 –version 显示版本信息。 ``` 4、删除目录 rmdir(remove directory) 功能说明:删除目录。 语 法: ```bash rmdir [-p][–help][–ignore-fail-on-non-empty][–verbose][–version][目录…] ``` 补充说明:当有空目录要删除时,可使用rmdir指令。 参 数: ```bash -p或–parents 删除指定目录后,若该目录的上层目录已变成空目录,则将其一并删除。 –help 在线帮助。 –ignore-fail-on-non-empty 忽略非空目录的错误信息。 –verbose 显示指令执行过程。 –version 显示版本信息。 ``` ## 3)显示文件内容 ### 1. cat 功能: ```bash 把档案串连接后传到基本输出到屏幕或加 > fileName 到另一个档案 ``` 使用权限: ```bash 所有使用者 ``` 语法: ```bash cat [-AbeEnstTuv] [–help] [–version] fileName ``` 参数: ```bash -n 或 –number 由 1 开始对所有输出的行数编号 -b 或 –number-nonblank 和 -n 相似,只不过对于空白行不编号 -s 或 –squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行 -v 或 –show-nonprinting ``` 范例: ```bash cat -n textfile1 > textfile2 把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里 cat -b textfile1 textfile2 >> textfile3 把 textfile1 和 textfile2 的档案内容加上行号(空白行不加)之后将内容附加到 textfile3 里。 cat < /dev/stdin > 1.txt //利用输入重定向 CRTL+D 结束输入 cat /dev/null > 1.txt //输出重定向进行清空 ``` ### 2. head 功能: ```bash 查找文件的前多少行 ``` 语法: ```bash head [-n] filename ``` ### 3. tail 功能: ```bash 查找文件的莫问多少行 ``` 语法: ```bash tail [-n] filename ``` ### 4. more 功能: ```bash 分屏显示 ``` 用法 ```bash more filename ``` ## 4)拷贝和移动文件目录 ### 1. cp 功能说明: ```bash cp 源文件 目标文件 将源文件复制为目标文件或目录。 ``` 语法: ```bash cp [-abdfilpPrRsuvx][-S <备份字尾字符串>][-V <备份方式>][–help][–spares=<使用时机>][–version][源文件或目录][目标文件或目录] [目的目录] ``` >补充说明:cp指令用在复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到该目录中。若同时指定多个文件或目录,而最后的目的地并非是一个已存在的目录,则会出现错误信息。 ### 2. mv 功能说明: ```bash mv [源文件、目录] [目的文件、目录] 移动或更名现有的文件或目录。 ``` 语法: ```bash mv [-bfiuv][–help][–version][-S <附加字尾>][-V <方法>][源文件或目录][目标文件或目录] ``` >补充说明: >mv可移动文件或目录,或是更改文件或目录的名称。 参数: ```bash -b或–backup 若需覆盖文件,则覆盖前先行备份。 -f或–force 若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文 件或目录。 -i或–interactive 覆盖前先行询问用户。 -S<附加字尾>或 –suffix=<附加字尾> 与-b参数一并使用,可指定备份文件的所要附加的字尾。 -u或–up
date 在移动或更改文件名时,若目标文件已存在,且其文件日期比源文件新,则不覆盖目标文件。 -v或–verbose 执行时显示详细的信息。 -V=<方法>或 –version-control=<方法> 与-b参数一并使用,可指定备份的方法。 –help 显示帮助。 –version 显示版本信息 ``` ## 5)文件目录权限 ### 1. 权限 文件的权限: 以普通文件为例,使用 ls -l 命令,可以看到结果的第一列是 -rwxrwxrwx 的形式,其中第一个字符 "-" 表示这个文件为普通文件,它也可以是其他的字符,不同的字符代表不同类型的文件。其后的一串字符表明了该文件的权限,其中: * 1)r 表明该文件具有可读权限,若该位置为 "-" ,则表明文件不可读; * 2)w 表明该文件具有写权限,若该位置为 "-" ,则表明文件不可写; * 3)x 表明该文件具有可执行权限,若该位置为 "-" ,则表明文件不具有可执行权限; * 4)第一个 rwx 表示该文件的所有者对该文件的权限;第二个 rwx 表示该文件所属组对该文件的权限;第三个 rwx 表示其他用户对该文件的权限。 ### 2. 权限所属对象 文件所有者:生成文件或目录的当前人,权限最高,用u表示。 文件所属用户组:系统管理员分配的的同组一个或几个人,用g表示。 其他人对此文件的权限:除拥有者、用户组以外的人,用o 表示。 所有人:包括拥有者,所属用户组、其他用户,用a表示 ```bash -rwxr(所有者) -xr(所在组) -x(其他人) ``` ### 3.修改属性chmod chmod命令用来修改文件目录的访问权限,修改权限的前提条件是在修改权限时具有可操作权限。 (a)用字母表示权限 Who(u、g、o、a)+cp(“=”设置权限“+”添加权限“-”删除权限)+permission(“r”读权限“w”写权限“x”操作权限) 例如: ```bash chmod g=wr 1.c; chmod u+w,g-w,o=wr 1.c ``` (b)用八进制数字表示权限 ```bash r w x 0 0 0 无权限 1 1 1 有权限 R:4,w;2,x:1 ``` 例如 : ```bash Chmod 777 build 将build的权限成所有人rwx ``` ![ ](https://img-blog.csdnimg.cn/20210515203713870.png) 注意:在Ubuntu中建立的文件默认权限是664 ### 4. Chown改变文件的所属者和所属组 chown(英文全拼:change owner)命令用于设置文件所有者和文件关联组的命令。 语法 ```bash chown [-cfhvR] [--help] [--version] user[:group] file... ``` 参数 : ```bash user : 新的文件拥有者的使用者 ID group : 新的文件拥有者的使用者组(group) -c : 显示更改的部分的信息 -f : 忽略错误信息 -h :修复符号链接 -v : 显示详细的处理信息 -R : 处理指定目录以及其子目录下的所有文件 --help : 显示辅助说明 --version : 显示版本 ``` 实例: 把 /var/run/httpd.pid 的所有者设置 root: ```bash chown root /var/run/httpd.pid ``` ### 5. chgrp改变文件或目录所属组 Linux chgrp(英文全拼:change group)命令用于变更文件或目录的所属群组。 与 chown 命令不同,chgrp 允许普通用户改变文件所属的组,只要该用户是该组的一员。 语法 ```bash chgrp [-cfhRv][--help][--version][所属群组][文件或目录...] 或 chgrp [-cfhRv][--help][--reference=<参考文件或目录>][--version][文件或目录...] ``` 参数说明: ```bash -c或--changes 效果类似"-v"参数,但仅回报更改的部分。 -f或--quiet或--silent 不显示错误信息。 -h或--no-dereference 只对符号连接的文件作修改,而不更动其他任何相关文件。 -R或--recursive 递归处理,将指定目录下的所有文件及子目录一并处理。 -v或--verbose 显示指令执行过程。 --help 在线帮助。 --reference=<参考文件或目录> 把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同。 --version 显示版本信息。 ``` >Chown、chgroup使用频率较低,了解即可。 ## 6)find查找文件 Linux find 命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。 如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。 我们有时候还要模糊查找某个文件,比如根据文件的后缀名,文件创建时间,文件大小等等。 语法: ```bash find path -option [ -print ] [ - -ok command ] {} \; ``` find 根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部份为 path,之后的是 expression。 如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression。 expression 中可使用的选项有二三十个之多,在此只介绍最常用的部份。 参数说明: ```bash -name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写 -user 按照用户(文件的属主) -size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。 -mtime 按照最后一次修改时间 -atime 按照最后一次访问时间 -perm :按照文件的权限 -type typen : 查找文件类型为typen的文件 c: 字符设备 d: 目录 c: 字型装置文件 b: 区块装置文件 p: 具名贮列 f: 一般文件 l: 符号连结 s: socket ``` >注意 find 的使用条件所查找的路径必须具有读权限。 查找选项通过文件属性来查找。 例如: 实例 * 1.将当前目录及其子目录下所有文件后缀为 .c 的文件列出来: ```bash # find . -name "*.c" ``` * 2.将目前目录其其下子目录中所有一般文件列出 ```bash # find . -type f ``` * 3.将当前目录及其子目录下所有最近 20 天内更新过的文件列出: ```bash # find . -ctime -20 ``` * 4.查找 /var/log 目录中更改时间在 7 日以前的普通文件,并在删除之前询问它们: ```bash # find /var/log -type f -mtime +7 -ok rm {} \; ``` * 5.查找当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件: ```bash # find . -type f -perm 644 - ls -l {} \; ``` * 6.查找系统中所有文件长度为 0 的普通文件,并列出它们的完整路径: ```bash # find / -type f -size 0 - ls -l {} \; ``` 2. whereis whereis命令用于查找文件。 该指令会在特定目录中查找符合条件的文件。这些文件应属于原始代码、二进制文件,或是帮助文件。 该指令只能用于查找二进制文件、源代码文件和man手册页,一般文件的定位需使用locate命令。 语法 ```bash whereis [-bfmsu][-B <目录>...][-M <目录>...][-S <目录>...][文件...] ``` 参数: ```bash -b 只查找二进制文件。 -B<目录> 只在设置的目录下查找二进制文件。 -f 不显示文件名前的路径名称。 -m 只查找说明文件。 -M<目录> 只在设置的目录下查找说明文件。 -s 只查找原始代码文件。 -S<目录> 只在设置的目录下查找原始代码文件。 -u 查找不包含指定类型的文件。 ``` 实例: * 1.使用指令"whereis"查看指令"bash"的位置,输入如下命令: ```bash peng@ubuntu:~/test$ whereis bash bash: /bin/bash /etc/bash.bashrc /usr/share/man/man1/bash.1.gz ``` * 2.查找标准库头文件stdio.h位置 ```bash peng@ubuntu:~/test$ whereis stdio.h stdio: /usr/include/stdio.h /usr/share/man/man3/stdio.3.gz ``` ## 7)grep过滤和统计 功能: 查出包含某些字符串的结果,对文件或输出结果进行过滤,对于大小写有一定 要求。 语法: ```bash grep [option] string filename ``` >补充说明: grep指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为“-”,则grep指令会从标准输入设备读取数据。 ```bash -A<显示行数>:除了显示匹配 pattern 的那一行外,显示该行之后的内容 -B<显示行数>:除了显示匹配 pattern 的那一行外,显示该行之前的内容 -C<显示行数>:除了显示匹配 pattern 的那一行外,显示该行前、后的内容 -c:统计匹配的行数 -e:同时匹配多个pattern -i:忽略字符的大小写 -n:显示匹配的行号 -o:只显示匹配的字符串 -v:显示没有匹配pattern的那一行,相当于反向匹配 -w:匹配整个单词 ``` 举例: 1、在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行。此时,可以使用如下命令: ```bash grep test *file ``` 2、以递归的方式查找符合条件的文件。 例如,查找指定目录/etc/acpi 及其子目录(如果存在子目录的话)下所有文件中包含字符串"update"的文件,并打印出该字符串所在行的内容,使用的命令为: ```bash grep -r nu)| |gg |移动到这个档案的第一行,相当于 1G 啊! (**常用**)| |n
|n 为数字。光标向下移动 n 行(**常用**)| ### **搜索替换** | 快捷键| 含义 | |--|:--| |/word |向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可! (**常用**)| |?word | 向光标之上寻找一个字符串名称为 word 的字符串。| |n |这个 n 是英文按键。代表重复前一个搜寻的动作。举例来说, 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串,则按下 n 后,会向下继续搜寻下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话,那么按下 n 则会向上继续搜寻名称为 vbird 的字符串!| |N |这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。 例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird 。| **使用 /word 配合 n 及 N 是非常有帮助的!可以让你重复的找到一些你搜寻的关键词!** | 快捷键| 含义 | |--|:--| |:n1,n2s/word1/word2/g |n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2 !举例来说,在 100 到 200 行之间搜寻 vbird 并取代为 VBIRD 则:『:100,200s/vbird/VBIRD/g』。(**常用**)| |:1,$s/word1/word2/g 或 :%s/word1/word2/g |从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !(**常用**)| |:1,$s/word1/word2/gc 或 :%s/word1/word2/gc |从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !且在取代前显示提示字符给用户确认 (confirm) 是否需要取代!(**常用**)| ### **删除、复制与贴上** | 快捷键| 含义 | |--|:--| |x, X |在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (**常用**)| |nx |n 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。| |dd | 删除游标所在的那一整行(**常用**)| |ndd | n 为数字。删除光标所在的向下 n 行,例如 20dd 则是删除 20 行 (**常用**)| |d1G | 删除光标所在到第一行的所有数据| |dG |删除光标所在到最后一行的所有数据| |d$ | 删除游标所在处,到该行的最后一个字符| |d0 |那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符| |yy |复制游标所在的那一行(**常用**)| |nyy |n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(**常用**)| |y1G |复制游标所在行到第一行的所有数据| |yG |复制游标所在行到最后一行的所有数据| |y0 |复制光标所在的那个字符到该行行首的所有数据| |y$ |复制光标所在的那个字符到该行行尾的所有数据| |p, P |p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行! 举例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行。 (**常用**)| |J |将光标所在行与下一行的数据结合成同一行| |c |重复删除多个数据,例如向下删除 10 行,[ 10cj ]| |u |复原前一个动作。(**常用**)| |. |重复前一个动作的意思。 如果你想要重复删除、重复贴上等等动作,按下小数点『.』就好了! (**常用**)| |[Ctrl]+r |重做上一个动作。(**常用**)| 这个 u 与 [Ctrl]+r 是很常用的指令!一个是复原,另一个则是重做一次~ 利用这两个功能按键,你的编辑,嘿嘿!很快乐的啦! ### **一般模式切换到编辑模式的可用的按钮说明** 进入输入或取代的编辑模式 | 快捷键| 含义 | |--|:--| |i, I |进入输入模式(Insert mode):i 为『从目前光标所在处输入』, I 为『在目前所在行的第一个非空格符处开始输入』。 (**常用**)| |a, A |进入输入模式(Insert mode):a 为『从目前光标所在的下一个字符处开始输入』, A 为『从光标所在行的最后一个字符处开始输入』。(**常用**)| |o, O |进入输入模式(Insert mode):这是英文字母 o 的大小写。o 为在目前光标所在的下一行处输入新的一行; O 为在目前光标所在的上一行处输入新的一行!(**常用**)| |r, R |进入取代模式(Replace mode):r 只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下 ESC 为止;(**常用**)| |[Esc] |退出编辑模式,回到一般模式中(**常用**)| 上面这些按键中,在 vi 画面的左下角处会出现『--INSERT--』或『--REPLACE--』的字样。 由名称就知道该动作了吧!!特别注意的是,我们上面也提过了,你想要在档案里面输入字符时, 一定要在左下角处看到 INSERT 或 REPLACE 才能输入。 ### **一般模式切换到指令行模式的可用的按钮说明** 指令行的储存、离开等指令 | 快捷键| 含义 | |--|:--| |:w |将编辑的数据写入硬盘档案中(**常用**)| |:w! |若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊!| |:q |离开 vi (**常用**)| |:q! |若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。| |:wq |储存后离开,若为 :wq! 则为强制储存后离开 (**常用**)| |ZZ |这是大写的 Z 喔!如果修改过,保存当前文件,然后退出!效果等同于(保存并退出)| |ZQ |不保存,强制退出。效果等同于 :q!。| |:w [filename] |将编辑的数据储存成另一个档案(类似另存新档)| |:r [filename] |在编辑的数据中,读入另一个档案的数据。亦即将 『filename』 这个档案内容加到游标所在行后面| |:n1,n2 w [filename] |将 n1 到 n2 的内容储存成 filename 这个档案。| |:! command |暂时离开 vi 到指令行模式下执行 command 的显示结果!例如:『:! ls /home』即可在 vi 当中察看 /home 底下以 ls 输出的档案信息!| vim 环境的变更 | 快捷键| 含义 | |--|:--| |:set nu |显示行号,设定之后,会在每一行的前缀显示该行的行号(**常用**)| |:set nonu |与 set nu 相反,为取消行号!| 这些基础知识学会以后,就可以进入到下一步,学习Linux下的C程序开发了!
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
0
)
一口Linux
关注
评论
(0)
登录后可评论,请
登录
或
注册
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交