Linux 实战技能 100 讲
尹会生
前游戏公司技术总监,前新浪网技术经理
47505 人已学习
新⼈⾸单¥68
课程目录
已完结/共 118 讲
第五章:文本操作篇 (15讲)
Linux 实战技能 100 讲
登录|注册
留言
9
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 59 | 管道
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
01 | 课程介绍
02 | 内容综述
03 | 什么是Linux
04 | Linux的内核版本及常见发行版
05 | 安装VirtualBox虚拟机
06 | 在虚拟机中安装Linux系统
07 | 第一次启动Linux
08 | 万能的帮助命令:man、help、info
09 | 初识pwd和ls命令
10 | 详解ls命令
11 | 详解cd命令
12 | 创建和删除目录
13 | 复制和移动目录
14 | 如何在Linux下进行文本查看
15 | 打包压缩和解压缩
16 | Vim的四种模式
17 | Vim的正常模式
18 | Vim的命令模式
19 | Vim的可视模式
20 | 用户和用户组管理及密码管理
21 | su和sudo命令的区别和使用方法
22 | 用户和用户组的配置文件介绍
23 | 文件与目录权限的表示方法
24 | 文件权限的修改方法和数字表示方法
25 | 权限管理以及文件的特殊权限
26 | 网络管理
27 | 查看网络配置
28 | 修改网络配置
29 | 网络故障排除命令
30 | 网络管理和配置文件
31 | 软件包管理器的使用
32 | 使用rpm命令安装软件包
33 | 使用yum包管理器安装软件包
34 | 通过源代码编译安装软件包
35 | 如何进行内核升级
36 | grub配置文件介绍
37 | 使用ps和top命令查看进程
38 | 进程的控制与进程之间的关系
39 | 进程的通信方式与信号:kill命令
40 | 守护进程
41 | screen命令和系统日志
42 | 服务管理工具systemctl
43 | SELinux简介
44 | 内存与磁盘管理
45 | 内存查看命令
46 | 磁盘分区和文件大小查看
47 | 文件系统管理
48 | i节点和数据块操作
49 | 分区和挂载
50 | 分区和挂载磁盘配额
51 | 交换分区swap的查看与创建
52 | 软件RAID的使用
53 | 逻辑卷LVM的用途与创建
54 | 系统综合状态查看命令sar以及第三方命令
55 | 什么是Shell
56 | Linux的启动过程
57 | Shell脚本的格式
58 | 脚本不同执行方式的影响
59 | 管道
60 | 重定向
61 | 变量赋值
62 | 变量引用及作用范围
63 | 环境变量、预定义变量与位置变量
64 | 环境变量配置文件
65 | 数组
66 | 转义和引用
67 | 运算符
68 | 特殊字符大全
69 | test比较
70 | if判断的使用
71 | if-else判断的使用
72 | 嵌套if的使用
73 | case分支
74 | for的基本使用
75 | C语言风格的for
76 | while循环和until循环
77 | 循环的嵌套和break、continue语句
78 | 使用循环处理位置参数
79 | 自定义函数
80 | 系统函数库介绍
81 | 脚本资源控制
82 | 信号
83 | 一次性计划任务
84 | 周期性计划任务
85 | 为脚本加锁
86 | 元字符介绍
87 | find 演示
88 | sed和awk介绍
89 | sed替换命令讲解
90 | sed的替换指令加强版
91 | sed的其他常用命令
92 | sed多行模式空间
93 | 什么是sed的保持空间
94 | 认识awk
95 | awk的字段
96 | awk表达式
97 | awk判断和循环
98 | awk数组
99 | awk数组功能的使用
100 | awk函数
101 | 防火墙概述
102 | iptables规则的基本使用演示
103 | iptables过滤规则的使用
105 | firewalld
104 | iptables nat表的使用
106 | SSH介绍之Telnet明文漏洞
107 | SSH服务演示
108 | FTP服务器vsftpd介绍与软件包安装
109 | vsftpd配置文件介绍
110 | vsftp虚拟用户
111 | samba服务演示
112 | NFS服务
113 | Nginx基本配置文件
114 | 使用Nginx配置域名虚拟主机
115 | LNMP环境搭建
116 | DNS服务的原理
117 | NAS演示
118 | 结课测试&结束语
登录 后留言

全部留言(9)

  • 最新
  • 精选
blackpiglet
最后关于内部命令结果不会返回给父进程这块没理解,我用的 history (内部命令) 接 wc 来查看一共有多少条历史记录,看起来是可以正常工作,并且结果也会返回给父 shell。 $ history | wc -l $ 63

作者回复: 1 内部命令在子进程中的执行行为不会影响到父进程,并非执行结果的显示 2 history | wc -l 这条命令是把history的标准输出作为了wc的标准输入(这是管道的默认功能),wc执行的时候会创建子进程,并把标准输出指向父进程(当前shell)的标准输出,所以看到输出结果是63 3 对变量赋值操作 echo 123 | read a ,再查看 a变量的值 echo $a 是空值,这才是需要避免的子进程没有把变量返回给父进程的错误示例。

2019-09-02
3
6
勇敢的憨憨
老师,不是说如果管道符两边是外部命令的话才会产生子进程吗?还是说内部命令也会产生子进程啊?如果是只有外部命令才会产生子进程的话,最后讲的那个cd、pwd为啥不会对父进程产生影响啊?我真的好晕啊视频看了5、6遍还是晕

作者回复: 这个问题要分开来为你解释。 外部命令会产生子进程,管道符同样会产生子进程。内部命令在shell当前进程运行,不会产生子进程。 在管道符两端放置内部命令,相当于打开了新的子shell。内部命令执行结束之后,子shell也会跟着一起结束。因此在管道符两端放置内部命令,对当前的shell是不生效的。

2021-03-28
5
神经旷野舞者
老师为什么不是产生子线程呢?

作者回复: 线程的最大好处是把执行时间长的任务切换到后台去,对io密集型应用执行效率有很大帮助,但是管道的目的是顺序执行+通讯,所以管道没设计成多线程方式啊

2019-12-31
2
5
蜉蝣
关于管道符需要避开内建命令这里我还是没懂。如老师所说 ,echo 123 | read a 最后 echo $a 为空,但是用脚本把 echo 123 包起来,read a 还是接收不到 123。 希望这部分老师可以展开讲一下。

作者回复: a并非读不到值,是在子进程读取了值,又回到父进程 这里类似下面操作: shell> bash shell> a=123 shell> exit shell>

2020-04-04
4
John
[root@localhost ~]# cd /var | cat | ps -f 执行这个命令的时候, 会显示: UID PID PPID C STIME TTY TIME CMD root 9769 29848 0 13:04 pts/2 00:00:00 ps -f root 29848 29751 0 12:17 pts/2 00:00:00 -bash 问题: 1. 为啥cat命令没有打印出pid出来。 单独cat | ps -f会打印出来 2. 为啥路径还是在~, 而不是在/var. cd这个内部命令没有起作用么?

作者回复: 1 试一下 单独运行cat 和 cat <<< "hello" ,你会发现cat如果有输入并正常结束,是不会产生阻塞的;也就是执行ps命令的时候,cat命令已经执行结束了,自然看到cat进程。 2 管道符会产生子进程,cd /var 相当于执行bash 然后运行了cd /var 再执行了exit ,所以当前shell下“没起作用”

2019-09-26
2
2
飞飞来学习
使用cat > test.txt命令,输入了一些内容覆盖了原文件,按ctrl+c 退出后,还有办法恢复到原文件吗

作者回复: 除非文件已经被其他程序打开,比如记事本打开了旧的文件,否则无法恢复

2023-06-26
胡波 allenhu
老师, 我的电脑上执行:. vscode echo 1234 | read b ➜ .vscode echo $b 1234

作者回复: 执行之前先使用unset b,是否父进程提前为b做了赋值? 另外vscode我这里没有复现环境,考虑用标准的RHEL7试一下

2019-09-06
张向阳
能正常输出a的值,不是太明白: app@idea:/home/app $ echo 123 | read a app@idea:/home/app $ echo $a 123 app@idea:/home/app $
2022-10-08
1
ibin
不理解为什么 [root@a1 ~]# cat |ps -f UID PID PPID C STIME TTY TIME CMD root 7731 7727 0 03:49 pts/1 00:00:00 -bash root 8722 7731 0 04:05 pts/1 00:00:00 -bash root 8723 7731 0 04:05 pts/1 00:00:00 ps -f 没有cat,但是新开一个窗口,同时ps -ef|grep cat|grep -v是可以看到cat进程的。 还有为什么这样可以看到cat,管道符两边是并行运行的吗 [root@a1 ~]# cd /var|cat|ps -f UID PID PPID C STIME TTY TIME CMD root 7731 7727 0 03:49 pts/1 00:00:00 -bash root 8254 7731 0 03:58 pts/1 00:00:00 -bash root 8255 7731 0 03:58 pts/1 00:00:00 cat root 8256 7731 0 03:58 pts/1 00:00:00 ps -f
2022-07-22
收起评论