首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

管道(),fork();execve();我在` `cat | ls`中寻找与bash相同的行为

管道(Pipe)是一种在Linux和Unix系统中用于将一个进程的输出连接到另一个进程的输入的机制。它允许不同的进程之间进行数据传输和通信。管道可以通过使用竖线符号(|)来表示。

fork()是一个系统调用,用于创建一个新的进程,新进程是原进程的一个副本,它具有相同的代码、数据和资源。父进程调用fork()会创建一个子进程,而子进程会从fork()调用的位置开始执行代码。

execve()也是一个系统调用,用于执行一个新的程序。它会用新的程序替换当前进程的内容,包括代码、数据和资源。execve()可以将一个进程转变为另一个程序的执行上下文。

cat |,这是一条Shell命令,其中cat是一个用于将文件内容输出到标准输出的命令,而ls是一个用于列出目录内容的命令。|符号用于将cat命令的输出连接到ls`命令的输入,实现了通过管道进行数据传输。

与bash相同的行为是通过管道将cat命令的输出作为ls命令的输入,使得ls命令列出的是cat命令输出的文件内容。这样可以将文件内容通过管道传递给其他命令进行处理,实现了数据的流转和处理。

在腾讯云中,推荐使用的产品和服务可以包括:

  1. 云服务器(ECS):提供虚拟化的计算资源,可用于运行各种应用程序和服务。
  2. 云函数(SCF):提供事件驱动的无服务器计算服务,可以根据需求自动扩缩容,并支持多种编程语言。
  3. 云原生应用引擎(TKE):提供容器化应用部署和管理服务,可实现高可用、弹性伸缩的应用运行环境。
  4. 云数据库(CDB):提供可靠、高性能的数据库服务,支持关系型数据库、分布式数据库等多种类型。
  5. 云存储(COS):提供安全可靠的对象存储服务,适用于各种场景下的数据存储和访问需求。

以上产品和服务的详细介绍和链接地址可参考腾讯云官方文档和网站。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Linux大文件重定向和管道效率对比

以下来自@阿里褚霸分享: 这个问题挺有意思第一反应是: 没比较过,应该是一样,一个是cat负责打开文件,一个是bash 这种场景MySQL运维操作里面应该比较多,所以就花了点时间做了个比较和原理上分析.../b.out 再来写个systemtap脚本用来方便观察程序行为。...好了,场景齐全了,我们接着来比较下二种情况下速度,第一种管道: # 第一种管道方式 $ time (cat huge_dump.sql|....): -> sys_close 0 bash(26570): -> sys_wait4 0 bash(26570): -> sys_write stap收集数据了,我们另外一个窗口运行管道情况.../b.out 我们从systemtap日志可以看出: bash fork了2个进程。 然后execve分别运行cat 和 b.out进程, 这二个进程用pipe通信。

1.5K10

反弹shell-逃逸基于execve命令监控(上)

linux,启动外部进程,是通过execve系统调用进行创建,我们使用strace 打印一下bash启动ls系统调用,第一句就是通过execve启动ls。 ?...内置命令是shell解释器一部分,可以理解为是shell解释器一个函数,并不会额外创建进程。因此监控execve系统调用是无法监控这部分,当然能用作恶意行为内置命令并不多,算是一个补充。...其实是我们想借用linux自带系统命令来达到我们目的,尤其是linux以系统命令操作为主。 以 ls 命令为例子,功能是查看目录中有哪些文件,假如我们不想使用ls命令,那我们有什么办法呢?...大体操作流程如下: 第一步:首先我们fork出来一个子进程,然后子进程先调用ptrace,接着执行execve("ls xxxxxx"),这个时候基于execve监控到就是一个假参数。...四.新方法-无"命令"反弹shell 已知绕过方法,通过shellcode方式绕过内核态execve监控,算是相对优雅方式了,比较喜欢这种,但是这种方式又太麻烦,linux命令我都要重写成

3.1K20
  • 无命令反弹shell-逃逸基于execve命令监控(上)

    linux,启动外部进程,是通过execve系统调用进行创建,我们使用strace 打印一下bash启动ls系统调用,第一句就是通过execve启动ls。 ?...内置命令是shell解释器一部分,可以理解为是shell解释器一个函数,并不会额外创建进程。因此监控execve系统调用是无法监控这部分,当然能用作恶意行为内置命令并不多,算是一个补充。...其实是我们想借用linux自带系统命令来达到我们目的,尤其是linux以系统命令操作为主。 以 ls 命令为例子,功能是查看目录中有哪些文件,假如我们不想使用ls命令,那我们有什么办法呢?...大体操作流程如下: 第一步:首先我们fork出来一个子进程,然后子进程先调用ptrace,接着执行execve("ls xxxxxx"),这个时候基于execve监控到就是一个假参数。...四.新方法-无"命令"反弹shell 已知绕过方法,通过shellcode方式绕过内核态execve监控,算是相对优雅方式了,比较喜欢这种,但是这种方式又太麻烦,linux命令我都要重写成

    1.5K20

    Linux进程控制【进程程序替换】

    指令 本质上就是进行程序替换 关于简易版 bash 实现方法,将在下篇文章揭晓 ---- 2、七大替换函数 进程程序替换函数共有七个,其中六个都是调用函数6,因此函数6 execve 才是真正系统级接口...程序能继承 bash 环境变量表了 bash 下执行程序,等价于 bash 下替换子进程为指定程序,并将 bash 环境变量表 environ 传递给指定程序使用 其他没有带 e 替换函数...,默认传递当前程序环境变量表 2.6、函数6 execve execve 是系统真正提供程序替换函数,其他替换函数都是调用 execve 比如 execl 相当于将链式信息转化为 argv 表...,供 execve 参数2使用 execlp 相当于 PATH 中找到目标路径信息后,传给 execve 参数1使用 execle envp 最终也是传给 execve 参数3 #include...,期待留下一个小小赞,你支持是分享最大动力!

    23520

    SHELL(bash)脚本编程六:执行流程

    bash命令执行分为四大步骤:输入、解析、扩展和执行。 本文将详述bash命令一般处理过程: 如图所示 ? 输入 交互模式 交互模式下,输入来自终端。...将编辑缓冲区内容交给bash之前,Readline会执行历史扩展(见这里),之后由bash负责将本条命令存储到历史列表并进入下一步骤。 非交互模式 非交互模式下,输入一般来自文件。...管道命令 对于管道命令,管道两侧命令会在不同两个子进程执行。 此时命令要先后经历 1、fork()系统调用创建子进程。 2、连接管道 然后命令执行步骤如下述简单命令执行。...命令执行 对于命令执行,我们介绍更一般情况(命令位于磁盘文件系统之上情况): 1、bash执行fork()系统调用创建子进程(如果命令已经处于子shell内,则不会再次fork(),例如上述管道命令...,execve()失败,此时,bash会判断该文件,如果该文件有可执行权限并且不是一个目录,则认为该文件是一个脚本,于是调用默认解释器解释执行该文件内容。

    1.7K40

    C语言中调用系统命令(system popen...)

    1、system(执行shell 命令) 相关函数 forkexecve,waitpid,popen 表头文件 #include 定义函数 int system(const char...调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略。返回值 如果system()调用/bin/sh时失败则返回127,其他失败原因返回-1。...范例: #include main() { system(“ls -al /etc/passwd /etc/shadow”); } 2、popen(建立管道I/O) 相关函数 pipe...char * type); 函数说明 popen()会调用fork()产生子进程,然后从子进程调用/bin/sh -c来执行参数command指令。...依照此type值,popen()会建立管道连到子进程标准输出设备或标准输入设备,然后返回一个文件指针。随后进程便可利用此文件指针来读取子进程输出设备或是写入到子进程标准输入设备

    5.2K30

    当你 Linux 上启动一个进程时会发生什么?

    fork 和 exec Linux 上 posix_spawn 是通过两个系统调用实现,分别是 fork 和 exec(实际上是 execve),这些都是人们常常使用。...尽管 OS X 上,人们使用 posix_spawn,而 fork 和 exec 是不提倡,但我们将讨论是 Linux。 Linux 每个进程都存在于“进程树”。...事实证明,有了 C 或 Python 技能,你可以几个小时内编写一个非常简单 shell,像 bash 一样。(至少如果你旁边能有个人多少懂一点,如果没有的话用时会久一点。)...已经完成啦,真的很棒。 这就是 fork 和 exec 程序实现。写了一段 C 伪代码。请记住,fork 也可能会失败哦。...内存(你“地址空间”) 寄存器 可执行文件(/proc/$pid/exe) cgroups 和命名空间( Linux 容器相关) 当前工作目录 运行程序用户 其他还没想到 当你运行 execve

    1.1K70

    C++exec()函数

    exec()函数C++是一个进程控制函数,用于创建新进程执行其他程序或命令行指令。exec()函数可以替换当前进程代码和数据,创建新进程运行其他程序。...前言 fork 函数之后,如果想要把子进程换成一个想要执行进程,这时,就不得不使用 exec()函数了,这也是 fork()意义所在。...常见fork()调用例子有很多,比如从 wechat发起一个语音电话、从 bash或者zsh执行一个 a.out 程序,都是利用exec系统调用将新产生子进程完全替换成目标进程。...读者可以观察execl、execle、execlp语法execv、execve、execvp区别。 ③ 环境变量:exec函数族使用了系统默认环境变量,也可以传入指定环境变量。...这里以“e”(environment)结尾两个函数execle、execve就可以envp[]中指定当前进程所使用环境变量替换掉该进程继承所以环境变量,这极大地提供了灵活度。

    29120

    【Linux】详解进程程序替换

    一、替换原理 用fork创建子进程后执行是和父进程相同程序(但有可能执行不同代码分支),子进程往往要调用一种exec函数以执行另一个程序。...三、各种exec接口 其它六个接口底层都封装了execve系统调用接口。 3.1、execlp   exec接口中,l意为list,表示参数列表,v意为vector,就指的是数组。...名字带p这个p指的是PATH,也就是说你不用告诉系统,程序在哪里,只要告诉名字就行,系统会自动到你这个进程PATH环境变量中所保存路径寻找。...\n"); return 0; } 3.2、execv/execvp execv用法execl用法大致相同,只不过将execl后面的可变参数列表换成一个指针数组。...\n"); return 0; } 3.3、execle/execvpe/execve 程序替换不会替换环境变量数据。可以通过地址空间继承方法,让子进程拿到父进程所有环境变量。

    7610

    alias后门 | Linux 后门系列

    这些系统调用主要分为几类: 文件和设备访问类 比如open/close/read/write/chmod等 进程管理类 fork/clone/execve/exit/getpid等 信号类 signal...---- alias 可以设置别名,那么有几个疑问 如果一个可执行文件放在环境变量path下,同时设置一个这个文件名相同别名,看看哪一个会执行 ? ?...可以看到, helper 目录中新建了一个 .bash_aliases 文件,文件写入 alias ls='ls -al' 重新登录后,执行 ls 时候已经是执行 ls -al 了 此时,...我们使用 root 权限进行 ls 时候,执行就是 ls ,因为 root 家目录下没有 .bash_aliases 文件 我们看一下 ~/.bashrc 文件是如何载入 .bash_aliases...经过一番寻找,加上自己所剩无几经验,终于找到了一个目录 /etc/update-manager/ ,这个目录跟你说,一眼就相中了,这简直就是为后门设计呀 ?

    7.6K30

    linux 小结

    管道一般用于过滤, A|b 命令A正确输出作为命令B操作对象 grep 取出含有搜寻内容行 -v 反选,: ## tail 出有关键字日志并输出后10行 tail -f -n200 test.log...## 这里,我们每天早上 8 点整执行 find 命令;该命令会在 /home/s/coredump 目录下寻找 search 用户创建普通 7 天前文件,然后删除 0 8 * * * find...变量 var1="xxx" 0 表示获取当前执行shell脚本文件名, n 表示获取当前执行shell脚本第n个参数值 $# 获取当前shell命令行参数总个数, $?...Type:定义启动时进程行为。它有以下几种值。...Type=simple:默认值,执行ExecStart指定命令,启动主进程 Type=forking:以 fork 方式从父进程创建子进程,创建后父进程会立即退出 Type=oneshot:一次性进程

    1.3K10

    linux c程序获取shell脚本输出

    使用匿名管道   >一书中给出了一种通过匿名管道方式将程序结果输出到分页程序例子,因此想到,我们也可以通过管道来将外部命令结果同应用程序连接起来。...方法就是fork一个子进程,并创建一个匿名管道子进程执行shell命令,并将其标准输出dup 到匿名管道输入端,父进程从管道读取,即可获得shell命令输出,代码如下:   /**   *...  stream = popen( "ls -l", "r" ); //将“ls -l”命令输出 通过管道读取(“r”参数)到FILE* stream   wstream = fopen( "test_popen.txt...execve.c   -rwxr-xr-x 1 root root 1811 09-29 21:33 fork.c   -rwxr-xr-x 1 root root 162 09-29 18:54 getpid.c...小结   有统计数据表明,代码缺陷率是一定所使用语言无关。Linux提供了很多实用工具和脚本,程序调用工具和脚本,无疑可以简化程序,从而降低代码缺陷数目。

    5.6K20

    Linux-程序替换

    ,就不需要带替换程序路径了,只需要替换程序名字,OS中会 依照PATH环境变量来寻找该程序。  ...  mybin.c ,我们并没有传递环境变量表给子进程,但是子进程却能默认拿到环境变量表?   ...实际上,子进程会默认拿到父进程环境变量表,那么mybin 也是子进程,是bash子进程,所以mybin能拿到bash环境变量,而mybin子进程可以拿到父进程环境变量:   我们导入一个新环境变量系统里以供猜想...我们可以使用 putenv:   此时程序内写入了mytest环境变量,但是当我们系统查询时:   此时并没有系统中出现,但是当我们运行程序之后: 此时进程内就多了一项mytest环境变量...但他们功能都是进行程序替换,所以他们功能上没有区别。   他们仅仅是传参上有区别,其实我们 程序替换系统调用只有一个,就是 execve 接口,剩下六个全部都是由这个接口进行封装

    9710

    UNIX高级环境编程 第三次实验 实现带参数简单Shell

    新进程就是所谓子 进程,它是执行fork()函数进程(父进程)“克隆”,也就是说,子进程执行程序父进程完全一样。...当fork()函数返回值为0时表示处 于子进程;而返回值大于0时表示处于父进程,此时返回值是子进程进程id。因此,fork()返回值可以用来划分仅仅适合父进程 和子进程执行程序段。...fork()函数返回值为-1时表示出错。 如果子进程只是运行父进程完全一样程序,那用处是很有限。要让子进程运行不同于父进程程序,就必须调用execve函数,它是 所有其他exec函数基础。...// 注意,argv1 第一个字符串“/bin/ls,只有ls是有用。 系统调用waitpid()用于等待子进程结束、获取子进程运行状态,详细说明第八章。...fork创建子进程若出错则打印出错信息,pid=0表示子进程,若有重定向输入输出,则在redirect_stdin或 redirect_stdout处理,execvp填入可执行文件参数,子进程开始执行

    92420

    两个主题:躲避execve分析proc目录

    躲避execve,是原来文章基础上补充一个小思路,分析/proc/目录 是为了下一篇讲解内存修改函数做准备,要让大家提前知道这回事。...躲避execve小思路 之前文章讲解过各种躲避execve监控方法,如果有朋友没看到过,可以点下面文章链接熟悉一下: 无"命令"反弹shell-逃逸基于execve命令监控(上) linux...下面来说一下,这种方式按猜想该怎么监控: 复制一份bashbashMD5是不会变安全基线中有进程文件哈希库:一个名字不是bash文件哈希 和bash一样,你觉得可不可疑呢?...之前讲内容,我们讲到patch命令解释器方式,即使你改了bash名字,只要执行命令,还是会被HIDS知道是从bash解释器执行。 2....分析/proc/目录 接下来文章要讲解一下从linux进程内存修改函数,需要给大家提前预习一下基础知识。 proc文件系统是一个伪文件系统,它提供内核数据结构接口。通常安装在/过程。

    1.6K30

    超硬核,进程在内存样子!以及进程一生

    栈和堆分别向相对方向增长,系统会有相应保护措施,阻止越界行为发生。 Linux 系统,使用如下命令可查看一个运行进程内存排布。...程序可以根据 fork() 返回值,确定当前处于父进程,还是子进程——父进程,返回值为新创建子进程进程 ID,子进程,返回值是 0。... fork() 系统调用刚刚执行完那一刻,子进程即可拥有一份父进程完全一样数据拷贝。对于已打开文件,内核会增加每个文件描述符引用计数,每个进程都可以用相同文件句柄访问同一个文件。...这让想到了管道,父子进程各自关闭自己不使用一端,当时很疑惑,干嘛要关啊,不用就不用呗,放那碍你啥事了,现在想想,出于安全考虑,关闭确实是个好习惯。...execve() 系统调用通常 fork() 系统调用配合使用。从一个进程启动另一个程序时,通常是先 fork() 一个子进程,然后子进程中使用 execve() 变身为运行指定程序进程。

    76520

    线上执行器收不到信号,险些酿成悲剧...

    但是这个问题开发环境(Mac)并没有测试出来,因为开发环境工作好好。...那么 sh 两个系统上到底有怎么样不同呢? Mac 上,man sh 说: sh is a POSIX-compliant command interpreter (shell)....经过查看,可以发现其实 sh Mac 上是 bash: $ ls -l /private/var/select/sh lrwxr-xr-x 1 root wheel 9 Jan 1 2020 /...private/var/select/sh -> /bin/bash 对于 bash -c "sleep 99" 这个命令,bash 有一些优化,为了节省资源,bash 会直接通过 execve()... ubuntu 上 bash -c "sleep 99" 可以看到 bash 本身也是会消失。说明这个确实是 bash 行为。 说 bash 进程消失不太准确,它其实是换了一个形式存在而已。

    55020

    Linux 创建子进程执行任务实现方法

    Linux 系统通过 fork/vfork 系统调用来创建新进程。本文将介绍如何使用 fork/vfork 系统调用来创建新进程并使用 exec 族函数新进程执行任务。...,系统将创建一个当前进程相同新进程。...fork 函数特点是 “调用一次,返回两次”:父进程调用一次,父进程和子进程各返回一次。...父进程返回时返回值为子进程 PID,而在子进程返回时返回值为 0,并且返回后都将执行 fork 函数调用之后语句。如果 fork 函数调用失败,则返回值为 -1。...子进程执行任务 下面让我们通过 vfork 和 execve 函数实现在子进程执行 ls 命令: #include #include #include

    3.8K11

    SHELL(bash)脚本编程七:源码简析

    本文对bash源码(版本:4.2.46(1)-release)进行简要分析。 数据结构 bash是用C语言写成,其源码只使用了少量数据结构:数组,树,单向链表,双向链表和哈希表。...几乎所有的bash结构都是用这些基本结构实现。 源码中最主要结构都定义根目录下头文件command.h。...return (result); } 首先,对于需要在子shell执行命令(如管道命令),先调用job.cmake_child(),然后进一步执行系统调用fork()及execve()。...如果hash缓存未找到且不包含斜线,则调用find_user_command()及find_user_command_internal()等函数继续PATH寻找。...子进程,execute_disk_command()判断返回命令command,如果未搜索到命令,则返回报错并退出,如果找到命令,则调用shell_execve()并进一步执行系统调用execve

    1.8K41
    领券