初始Linux操作系统
作为后端开发、运维、测试必备技能,Linux 早已是技术人绕不开的必修课。这篇博客从零带你梳理 Linux 核心知识,从发展史、常用指令到权限体系,看完就能上手实操。
Linux 到底是什么?先搞懂起源与核心特点
很多人刚接触 Linux,都会疑惑:它和 Windows、Unix 有啥关系?
1. 起源:从 Unix 到 Linux
- 1969 年:贝尔实验室推出Unix,高效、多用户、多任务,成为服务器系统标杆。
- 1991 年:芬兰大学生Linus Torvalds发布 Linux 内核,受 Minix 启发,做轻量类 Unix 系统。
- 1994 年:Linux 1.0 正式版发布,开启开源传奇。
2. 开源:Linux 最核心的优势
Linux 遵循GPL 协议,任何人可自由使用、修改、分发源代码。
这也是它能在服务器、嵌入式、云计算领域一统天下的关键。
3. 应用场景:无处不在的 Linux
- 服务器领域:市场占比超 75%,政府、金融、电信主流选择。
- 桌面系统:Ubuntu、深度 Linux、中标麒麟,国内政企广泛使用。
- 嵌入式 / 移动:Android 底层就是 Linux 内核,路由器、智能设备全靠它。
- 云计算 / 大数据:86% 企业用 Linux 搭建平台,逐步取代 Unix。
4. 常见发行版(新手必看)
- Ubuntu:新手友好,桌面 / 服务器都好用。
- CentOS/RHEL:企业服务器标配,稳定可靠。
- Debian:极稳,适合服务器与进阶用户。
- Kali Linux:渗透测试专用,安全从业者必备。
- Fedora:红帽测试版,尝鲜新特性首选。
初识xshell
免费版xshell下载网站下载安装的时候选择home/school则为免费版本.
关于环境安装:博主用的是阿里云服务器,Scentos 7.8。
入门第一步:远程登录Xshell
部署好环境后开始以下操作:
1.新建会话
2.输入ssh 和你的云服务器公网ip
3.输入用户名为root
4.输入你在云服务器重载后的密码
链接成功:
注意:
只要命令行中如果还是这样:就是没成功链接服务器。
一些关于xshell的小tips:
全屏/退出全屏:Alt+Enter;
命令行中按↑↓键能寻找历史命令。
Linux的文件结构:
Linux的文件结构是一颗从根目录‘/’开始的多叉树。
叶子节点:一定是普通文件或空目录;
非叶子节点:一定是个非空目录。
d开头的是目录。
-开头的是普通文件。
.开头的是隐藏文件。
'.':指向目录自己;
‘. .':指向上一级目录。
特殊情况:根目录/的..指向自己。
任何一个目录,即便是空目录,系统都会自带 . 和 . . 。
在Linux中一切皆是文件。
命令其实就是文件。
linux 2.6.* 内核默认支持的文件系统有:xfs,ext2,ext3,ext4。
初步了解Linux⽬录结构含义
Linux理论知识:路径的认识
• ⽬录可能是叶⼦(空⽬录),也可能是路上节点
• 理解路径存在的意义:树状组织⽅式,都是为了保证快速定位查找到指定的⽂件,⽽定位⽂件就 需要具有唯⼀性的⽅案来进⾏定位⽂件。其中任何⼀个节点,都只有⼀个⽗节点,所以,从根⽬ 录开始,定位指定⽂件,路径具有唯⼀性。
•同目录下不能出现同名文件。
• 绝对路径:⼀般从/开始,不依赖其他⽬录的定位⽂件的⽅式
绝对目录是从系统的根目录开始查找:
从C盘开始查找,找到的这个文件。
• 相对路径:相对于当前⽤⼾所处⽬录,定位⽂件的路径⽅式
为了方便理解,以windows为例:
•绝对路径⼀般不会随着⽤⼾的路径变化⽽丧失唯⼀性,⼀般在特定服务的配置⽂件中经常被使⽤ •相对路径因为它的便捷性,⼀般在命令⾏中使⽤较多
初步使⽤40+个常⽤Linux命令
ls命令
语法:ls[选项][目录或文件]
功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信
息
选项:
•-a列出⽬录下的所有⽂件,包括以.开头的隐含⽂件。
•-d将⽬录像⽂件⼀样显⽰,⽽不是显⽰其下的⽂件。如:ls‒d指定⽬录
•-i输出⽂件的i节点的索引信息。如ls‒ai指定⽂件
•-k以k字节的形式表⽰⽂件的⼤⼩。ls‒alk指定⽂件
•-l列出⽂件的详细信息
•-n⽤数字的UID,GID代替名称。(介绍UID,GID)
•-F在每个⽂件名后附上⼀个字符以说明该⽂件的类型,“*”表⽰可执⾏的普通⽂件;“/”表⽰ ⽬录;“@”表⽰符号链接;“|”表⽰FIFOs;“=”表⽰套接字(sockets)。(⽬录类型识别)
•-r对⽬录反向排序
•-t以时间排序
•-s在l⽂件名后输出该⽂件的⼤⼩。(⼤⼩排序,如何找到⽬录下最⼤的⽂件)
•-R列出所有⼦⽬录下的⽂件。(递归)
•-1⼀⾏只输出⼀个⽂件。
示例:
我们只输入ls命令时发现什么都没有,因为这是在用户根目录,用户根目录的文件都被隐藏起来了,需要带-a显示出所有(all)文件,包括隐藏文件。
ls -l(常用):查看文件属性
ls -l -a:显示文件所有属性(包括隐藏文件)
ll -a跟上面一样,ll相当于ls的别名
ls -lad /:查看Linux根目录
ll或ls /目录名可以查看目标目录下的文件及目录
ls指令我们就先认识这2-3条,剩下的要用时再查阅即可。
pwd命令
语法:pwd
功能:显示用户当前所在的目录
当前在root目录。
touch命令
只能创建普通文件,不能创建文件夹/目录。
语法:touch[选项] 文件名(或者目录/文件名)
功能:touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件。
常用选项:
-a:change only the access time
-c:change only the modification time
mkdir指令
语法: mkdir [ 选项 ] dirname...
功能:在当前⽬录下创建⼀个名为“dirname”的⽬录(新建目录)
常⽤选项:
•-p/--parents: 可以是⼀个路径名称。此时若路径中的某些⽬录尚不存在,加上此选项后,系统将⾃ 动建⽴好那些尚不存在的⽬录,即⼀次可以建⽴多个⽬录。
关于tree命令下文有解释。
cd 命令
语法:cd 目录名
功能:改变工作目录。将当前工作目录改变到指定的目录下
已到a目录下:
cd . .:回到上一级目录
cd ~:回到当前用户家目录下
不管你现在在哪个目录,一键回到自己的用户目录,安全、不会报错。
#这三个命令效果一样 cd ~ cd cd $HOMEtree命令
语法:tree 目录名
功能:就是把文件夹里的所有内容,像树一样层级展示,一眼看清目录结构。
tree -L 2//例如在a目录下限制显示层数(比如只看 2 层):
最小化安装的 CentOS 7 是没有 tree 命令的,必须自己装。
安装命令:
yum install -y tree等待安装完成,就可以用了。
rmdir命令&&rm命令
rmdir是一个与mkdir相对应的命令,mkdir是建立目录,而rmdir是删除命令
语法:rmdir [-p][dirName]
适用对象:具有当前目录操作权限的所有使用者
功能:删除空目录
常用选项:
-p当子目录被删除后如果父目录也变成空目录的话,就连带父目录一起删除。
rm命令
默认只能删文件,不能删目录。
语法:rm [-f-i-r-v] [dirName/dir]
适用对象:所有使用者
功能:删除文件或目录
常用选项:
-f即使文件属性为只读(即写保护),亦直接删除
-i删除前逐一询问确认
-r删除目录及其下所有文件
比如我删除a下创建的普通文件test.c:
rm -f 文件:强制删除不询问;
rm -r:递归删除;
rm -rf /文件:删除指定目录开始的所有文件
注意:rm -rf / 或rm -rf *:删除根目录。
根目录删除了只能重装系统,云服务器还好,重装系统比较快,但是数据会丢失,谨慎操作!
man命令
Linux的命令有很多参数,我们不可能全记住,可以通过查看联机⼿册获取帮助。
CentOS 7最小化安装(Minimal Install)时,为了精简系统体积,默认不会安装man相关包。
安装指令:
yum install -y man man-db man-pages•-k根据关键字搜索联机帮助
• num只在第num章节查找
•-a将所有章节的都显⽰出来,⽐如manprintf它缺省从第⼀章开始搜索,知道就停⽌,⽤a选 项,当按下q退出,他会继续往后⾯搜索,直到所有章节都搜索完毕
解释⼀下:man⼿册分为9章(不同系统可能会有差别)
| 章节号 | 内容类型 | 示例 |
|---|---|---|
| 1 | 可执行命令 / Shell 命令 | man 1 ls、man 1 cd |
| 2 | 系统调用(内核提供的函数) | man 2 open、man 2 read |
| 3 | C 库函数 | man 3 printf、man 3 malloc |
| 4 | 设备文件说明(/dev 下的文件) | man 4 null、man 4 zero |
| 5 | 配置文件格式 | man 5 passwd、man 5 fstab |
| 6 | 游戏 / 趣味程序 | (较少用) |
| 7 | 杂项(协议、文件系统等) | man 7 tcp、man 7 socket |
| 8 | 系统管理命令(root 专用) | man 8 fdisk、man 8 mount |
| 9 | 内核相关(非标准) | (极少用) |
例如找ls的使用:
man lscp命令
语法:cp [选项] [源文件或目录目标文件或目录]
功能:复制文件或目录
说明:
cp指令用于复制文件或目录
如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定
的所有文件或目录复制到此目录中
常用选项:
-f或-force强行复制文件或目录,不论目的文件或目录是否已经存在
-i或-interactive覆盖文件之前先询问用户
-r递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符
号链接,则一律视为普通文件处理
拷贝单一目录:
拷贝一整个目录包括其中的所有文件:
例如:将contents中的内容连同目录都拷贝到contents2中,其目录下的文件也是。
mv命令
mv默认递归。
mv命令是move的缩写,可以用来移动文件或者将文件改名。
语法:mv [选项] [源文件或目录] . / [目标文件或目录]
功能:
视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。
当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。
当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。
常用选项:
-f:force强制的意思,如果目标文件已经存在,不会询问而直接覆盖
-i:若目标文件(destination)已经存在时,就会询问是否覆盖!
移动单一文件或者文件夹
如果目标文件不是目录且不存在就是重命名。
如果目标文件是目录且存在就是剪切。
stat命令
语法:stat文件名(或者目录/文件名)
功能:查看一个目录/文件的属性
Access,Modify和Change分别是什么意思?
Access(访问时间)
缩写:atime
定义:文件中最后被打开的时间。
Modify(修改时间)
缩写:mtime
定义:文件内容最后被修改的时间。
Change (状态改变时间)
缩写: ctime
定义: 文件的属性最后被改变的时间。
修改了文件的内容Modify和Change就会更新,而修改了文件的属性只有Change更新。
which命令
语法:which [选项] 命令名
功能:查看一个文件的属性
常用选项:
-a:列出PATH中所有匹配的路径,而不仅仅是第一个。
--skip-alias:忽略别名,只搜索外部命令。
--skip-dot:跳过以点(.)开头的隐藏目录。
--skip-tilde:跳过以波浪号(~)开头的备份文件所在的目录。
查看ls命令能够找到ls命令所在的目录,这说明ls本身也是一个文件,其本质是用C语言编写的可执行程序,我们能够执行这个程序,显示本目录下的文件。不仅如此,所有的命令均为文件,为用C语言编写的可执行程序。
clear命令
语法:clear
功能:清空屏幕上的信息
echo命令
经典输出屏幕语法:echo “字符串内容”
echo就是在终端输出文字 / 往文件里写内容的命令。
功能:
- 在屏幕上打印字符串
- 配合重定向往文件里写内容(后面会介绍重定向)
- 输出变量、环境信息
| 命令 | 作用 |
|---|---|
echo 内容 | 屏幕输出内容 |
echo -n 内容 | 输出不换行 |
echo -e "a\nb" | 支持\n\t转义 |
echo 内容 > 文件 | 覆盖写入文件 |
echo 内容 >> 文件 | 追加写入文件 |
配合重定向写入:
cat命令
语法:cat [选项] [文件]
功能:查看目标文件的内容
常用选项:
-b对非空输出行编号,空行不做编号
-n对输出的所有行编号
-s不输出多行空行
打印行号:
more命令
语法:more [选项] [文件名]
功能:more命令,功能类似cat(输出文件中的内容)
常用选项:
-n指定输出行数
q退出more
我在test.cpp中写了几行代码,用move输出出来
less命令
less⼯具也是对⽂件或其它输出进⾏分⻚显⽰的⼯具,应该说是linux正统查看⽂件内容的⼯具, 功能极其强⼤
less的⽤法⽐起more更加的有弹性,在more的时候,我们并没有办法向前⾯翻,只能往后⾯看
但若使⽤了less时,就可以使⽤[pageup][pagedown]等按键的功能来往前往后翻看⽂件,更 容易⽤来查看⼀个⽂件的内容
除此之外,在less⾥头可以拥有更多的搜索功能,支持光标上下移动翻页。
语法:less [选项] 文件名
功能:less与more类似,但使⽤less可以随意浏览⽂件,⽽more仅能向前移动,却不能向后移动,⽽ 且less在查看之前不会加载整个⽂件
功能:
| 分类 | 命令 / 按键 | 功能说明 |
|---|---|---|
| 打开文件 | less 文件名 | 打开文件分页查看 |
| less -N 文件名 | 显示行号 | |
| less -i 文件名 | 搜索忽略大小写 | |
| less -S 文件名 | 长行不换行(左右查看) | |
| 翻页移动 | 空格/ f | 向下翻一页 |
| b | 向上翻一页 | |
| 回车 / ↓ | 向下翻一行 | |
| ↑ | 向上翻一行 | |
| 跳转 | g | 跳转到文件开头 |
| G | 跳转到文件末尾 | |
| 搜索 | / 关键词 | 向下搜索 |
| ? 关键词 | 向上搜索 | |
| n | 下一个匹配结果 | |
| N | 上一个匹配结果 | |
| 退出 | q | 退出 less |
常用键盘操作:
| 操作 | 按键 | 作用 |
|---|---|---|
| 翻页 | 空格/f | 向下翻一页 |
| b | 向上翻一页 | |
| 跳转 | g | 跳到文件开头 |
| G | 跳到文件末尾 | |
| 搜索 | / 字符串 | 向下搜索 |
| n | 下一个匹配 | |
| N | 上一个匹配 | |
| 退出 | q | 退出 less |
举例:
在文件中输入了2000行hello world。用less显示出来,注意N要大写。
cnt=0; while [ $cnt -le 2000 ]; do echo "hello world"; let cnt++; done > temp.txtless -N temp.txthead指令
head与tail就像它的名字⼀样的浅显易懂,它是⽤来显⽰开头或结尾某个数量的⽂字区块,head⽤ 来显⽰档案的开头⾄标准输出中,⽽tail想当然尔就是看档案的结尾。
语法: head[参数]... [⽂件]...
功能: head⽤来显⽰档案的开头⾄标准输出中,默认head命令打印其相应⽂件的开头10⾏
选项:
•-n<⾏数>显⽰的⾏数
举例:
tail 指令
tail 命令从指定点开始将⽂件写到标准输出.使⽤tail命令的-f选项可以⽅便的查阅正在改变的⽇志⽂ 件,tail-f filename会把filename⾥最尾部的内容显⽰在屏幕上,并且不断刷新,使你看到最新的⽂件内容.
语法: tail 必要参数 [ ⽂件 ]
功能:⽤于显⽰指定⽂件末尾内容,不指定⽂件时,作为输⼊信息进⾏处理。常⽤查看⽇志⽂件
选项:
•-f循环读取
•-n显⽰⾏数
举例:
date 命令
date就是查看 / 设置系统时间的命令,工作中看时间、写日志、生成时间戳必用。
指定格式显⽰时间: date +%Y:%m:%d
⽤法: date [OPTION]... [+FORMAT]
默认date:
各种选项:
| 格式符 | 说明 |
|---|---|
%Y | 四位数年份 |
%y | 两位数年份 |
%m | 两位数月份(01-12) |
%d | 两位数日期(01-31) |
%H | 24 小时制小时(00-23) |
%I | 12 小时制小时(01-12) |
%M | 分钟(00-59) |
%S | 秒(00-60) |
%p | AM 或 PM |
%a | 缩写的星期几名称 |
%A | 完整的星期几名称 |
%b | 缩写的月份名称 |
%B | 完整的月份名称 |
%j | 一年中的第几天(001-366) |
%w | 星期几(0-6,0 代表星期日) |
%U | 一年中的第几周(周日为周起始) |
自定义date:(记得‘ + ’号)
date "+今天是 %A,%Y年%m月%d日 %H点%M分%S秒"cal 命令
cal命令可以⽤来显⽰公历(阳历)⽇历。公历是现在国际通⽤的历法,⼜称格列历,通称阳历。“阳 历”⼜名“太阳历”,系以地球绕⾏太阳⼀周为⼀年,为西⽅各国所通⽤,故⼜名“西历”。
命令格式: cal 参数 [ 年份 ]
功能:⽤于查看⽇历等时间信息,如只有⼀个参数,则表⽰年份(1-9999),如有两个参数,则表⽰⽉份 和年份
常⽤选项:
•-3显⽰系统前⼀个⽉,当前⽉,下⼀个⽉的⽉历
•-j 显⽰在当年中的第⼏天(⼀年⽇期按天算,从1⽉1号算起,默认显⽰当前⽉在⼀年中的天数)
•-y 显⽰当前年份的⽇历
举例:
单纯cal:
cal其他年份:
cal -3:当前月,前一个月,下一个月
find 命令
Linux下find命令在⽬录结构中搜索⽂件,并执⾏指定的操作。
语法: find pathname -options
功能:⽤于在⽂件树中查找⽂件,并作出相应的处理(可能访问磁盘)
常用选项:
-name [文件名/目录名]按照文件/目录名查找文件/目录。
比如我找名为temp.txt的文件:
whereis 命令
功能:⽤于找到程序的源、⼆进制⽂件或⼿册
举例:
alias 命令
功能:设置命令的别名
举例:
grep命令
语法:grep [选项] 搜寻字符串文件
功能:在文件中搜索字符串,将找到的行打印出来
常用选项:
-i:忽略大小写的不同,所以大小写视为相同
-n:顺便输出行号
-V:反向选择,亦即显示出没有搜寻字符串'内容的那一行
基本查找:
忽略大小写+输出所在行号:
grep带不带双引号都可以,如果查找的关键字有空格就要带上双引号。
例题:
在Linux系统中, 为找到文件try_grep含有以a字母为行开头的内容, 可以使用命令?(D)
A.grep -E #$ try_grep
B.grep -E #a try_grep
C.grep -E ^$ try_grep
D.grep -E ^a try_grep
解析:
grep选项中,-E选项可以用来扩展选项为正则表达式;
$表示匹配文件末尾,字符需要在$之前表示以字符结尾 a$表示以a结尾
^表示匹配文件起始,字符需要在^之后表示以字符起始 ^a表示以a起始
zip/unzip 命令
语法: zip 压缩⽂件 .zip ⽬录或⽂件
功能:将⽬录或⽂件压缩成zip格式
常⽤选项
-r:递归处理,将指定⽬录下的所有⽂件和⼦⽬录⼀并处理
大部分 Linux 系统默认没装zip命令,需要安装一次:
sudo yum install -y zip unzip例如我压缩一个目录:
语法:zip -r 压缩包名 被压缩目录名(不是目录可以不加-r)
再解压到windous:
语法:sz 压缩包名
先看看sz命令有没有安装,我们可以用sz version查看,如果没有就要安装:
安装命令:
sudo yum install -y lrzsz这里我保存到桌面上。
windows传Linux直接拖拽到xshell窗口即可。
解压zip文件:
语法:unzip [压缩包名称] [解压后文件名称]
解压到当前目录:unzip [压缩包名称]
解压到指定目录:unzip [压缩包名称] -d ./目录名
例:我再将压缩好的test.zip(里面有test.txt)文件解压到a目录下:
tar 命令(重要)
打包/解包(都默认迭代),不打开它,直接看内容
语法: tar [-cxtzjvf] ⽂件与⽬录 ....
参数:
-c:建⽴⼀个压缩⽂件的参数指令(create的意思);
-x:解开⼀个压缩⽂件的参数指令!
-t:查看tarfile⾥⾯的⽂件!
-z:是否同时具有gzip的属性?亦即是否需要⽤gzip压缩?
-j:是否同时具有bzip2的属性?亦即是否需要⽤bzip2压缩?
-v:压缩的过程中显⽰⽂件!这个常⽤,但不建议⽤在背景执⾏过程!
-f:使⽤档名,请留意,在f之后要⽴即接档名喔!不要再加参数!
-C:解压到指定⽬录
常用三条指令:
1.压缩(把文件 / 目录打成 .tar.gz 包)
tar -zcf 包名.tar.gz 要压缩的东西2.解压(把 .tar.gz 包解开)
tar -zxf 包名.tar.gz3.解压到xxx目录:
tar -zxf 压缩包名.tar.gz -C 目录名/实操例子:
1:压缩文件(最常用)
tar -zcf test.tar.gz test.txt2.解压到目录
比如我要解压到a目录:
tar -zxf test.tar.gz -C a/tar是 Linux最主流的压缩 / 解压命令,比 zip 更常用,专门用来打包、压缩目录和大文件。
scp命令
scp(Secure Copy) 是 Linux/Unix 系统中,基于 SSH 协议在本地与远程主机、或两台远程主机之间安全传输文件 / 目录的命令。
讲一下scp远程拷贝压缩包语法:
scp 压缩包名.tgz 用户名@目标机公网IP:目标机指定路径uname -r命令
语法:uname [选项]
功能:uname用来获取电脑和操作系统的相关信息。
补充说明:uname可显示linux主机所用的操作系统的版本、硬件的名称等基本信息。
常用选项:
-a或-all详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理
器类型,硬件平台类型,操作系统名称
lsb_release-a:查看操作系统版本
拓展命令
• 安装和登录命令:login、shutdown、halt、reboot、install、mount、umount、chsh、 exit、last;
• ⽂件处理命令:file、mkdir、grep、dd、find、mv、ls、diff、cat、ln;
• 系统管理相关命令:df、top(查看cpu资源使用状态)、free、quota、at、lp、adduser、groupadd、kill、crontab;
• ⽹络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、 mail、nslookup;
• 系统安全相关命令:passwd、su、umask、chgrp、chmod、chown、chattr、sudops、 who;
• 其它命令:tar、unzip、gunzip、unarj、mtools、man、unendcode、uudecode。
重要的⼏个热键
[Tab]按键---快速按两下,具有『命令补全』和『档案补⻬』的功能
[Ctrl]-c按键---让当前的程序『停掉』
[Ctrl]-d按键---通常代表着:『键盘输⼊结束(EndOfFile,EOF戒EndOfInput)』的意思;另外, 他也可以⽤来取代exit,还能退出当前用户。
管道符:|
管道符就是|,它是 Linux 最强大、最常用的符号之一,用来把前一个命令的输出,当作后一个命令的输入。
一句话理解:前一个命令的结果 → 传给后一个命令继续处理就像水管一样,数据从左边流到右边。
| 用法 | 作用 | |
|---|---|---|
| ` 命令 1 | 命令 2` | 把命令 1 的输出,交给命令 2 处理 |
| `ls | grep 关键词 ` | 过滤列表,只显示匹配内容 |
| `cat 文件 | grep 关键词 ` | 在文件里搜索关键词 |
| `ll | less` | 长列表分页查看 |
| `head -n | tail -m` | 取文件中间一段内容 |
| `ps -ef | grep 进程名 ` | 查找系统进程(运维最常用) |
例子:
# 1. 生成一个很多行的文件 echo -e "a\nb\nc\nd\ne" > test.txt # 2. 用管道只看包含 c 的行 cat test.txt | grep c结果:
重定向符:>,>>,<
1.>输出重定向(覆盖写)
把命令结果写到文件,文件原有内容会被清空,如果文件不存在,创建(普通文件)并写入。
echo "hello" > demo.txt echo "我是第一行" > demo.txt cat demo.txt直接覆盖了hello
- 屏幕不输出内容
- 内容直接进文件
- 文件已存在 →覆盖
2.>>追加重定向(不覆盖)
在文件末尾加内容,不删原来的
echo "我是第二行" >> demo.txt cat demo.txt- 不会覆盖
- 一行一行追加
3.<输入重定向(很少用)
让命令从文件读数据,而不是从键盘读
cat < demo.txt效果和cat test.txt一样。有点脱裤子放屁的感觉,所以很少用。
最直观对比表
| 符号 | 名字 | 作用 | 是否覆盖 |
|---|---|---|---|
> | 输出重定向 | 命令结果 → 写入文件 | 是 |
>> | 追加重定向 | 命令结果 → 追加到文件 | 否 |
< | 输入重定向 | 文件内容 → 送给命令 | - |