首页 > 系统相关 >LINUX 部分命令

LINUX 部分命令

时间:2023-06-11 13:01:29浏览次数:34  
标签:root logical echo 命令 sed LINUX test 部分 hello


1.

[root@test root]# grep [-acinv] '搜寻字符串' filename
参数说明:
-a :将 binary 档案以 text 档案的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
eg://[] 以及 [^] 以及 [] 



 1.grep -n 't[ae]st' regular_express.txt
 2.last | grep root
 3.grep -n 'oo' regular_express.txt 4.grep -n '[^g]oo' regular_express.txt//如果我不想要 oo 前面有 g 的话呢?此时,可以利用在集合字符的反向选择 [^] 来  5.grep -n '[^a-z]oo' regular_express.txt//前面不要小字  6. grep -n '[0-9]' regular_express.txt// 取得有数字的行
///行首与行尾字符 ^ $ 1.grep -n '^the' regular_express.txt 2. grep -n '\.$' regular_express.txt  3. grep -n '^$' regular_express.txt//空白行  4. grep -v '^$' /etc/syslog.conf | grep -v '^#'//去取空行,和#开头的行 任意一个字符 . 与重复字符 *  * 代表的是『重复 0 个或多个前面的 RE 字符』 『 . 』则代表『绝对有一个任意字符』的意思 grep -n 'ooo*' regular_express.txt//至少两个 o 以上的字符串 //限定连续 RE 字符范围 {} grep -n 'o\{2\}' regular_express.txt//假设我要找到两个 o 的字符串

2.格式化打印: printf

[root@linux ~]# printf '打印格式' 实际内容
参数:
关于格式方面的几个特殊样式:
       \a    警告声音输出
       \b    退格键(backspace)
       \f    清除屏幕 (form feed)
       \n    输出新的一行
       \r    亦即 Enter 按键
       \t    水平的 [tab] 按键
       \v    垂直的 [tabl] 按键
       \xNN NN 为两位数的数字,可以转换数字成为字符。
关于 C 程序语言内,常见的变数格式
       %ns   那个 n 是数字, s 代表 string ,亦即多少个字符;
       %ni   那个 n 是数字, i 代表 integer ,亦即多少整数字数;
       %N.nf 那个 n 与 N 都是数字, f 代表 floating (浮点),如果有小数字数,
             假设我共要十个位数,但小数点有两位,即为 %10.2f 啰!
范例:

范例一:将刚刚上头的数据变成档案,仅列出姓名与成绩:(用 [tab] 分隔
[root@linux ~]# printf '%s\t %s\t %s\t %s\t %s\t \n' `cat printf.txt`
Name     Chinese         English         Math    Average
DmTsai   80      60      92      77.33
VBird    75      55      80      70.00
Ken      60      90      70      73.33
# 假设我将上面的档案存成 printf.txt 档案档名,则可利用上面的案例,
# 将每个单字中间以 [tab] 按键隔开。由上面的输出来看,虽然第二行以后是 OK 的,
# 但是第一行则因为某些单字长度较长,所以就无法对齐了!而 %s 表示以字符串 (string)
# 的方式来展现该内容。而每个内容则以 \t 即 [tab] 来隔开啊!

范例二:将上述资料关于第二行以后,分别以字符串、整数、小数点来显示:
[root@linux ~]# printf '%10s %5i %5i %5i %8.2f \n' `cat printf.txt |\
> grep -v Name`
    DmTsai    80    60    92    77.33
     VBird    75    55    80    70.00
       Ken    60    90    70    73.33
# 这个时候的输出可就有趣了!我将几个内容分成不同的数据格式来输出,
# 最有趣的应该是 %8.2f 这个项目了!我可以针对不同的小数字数来进行格式输出,
# 例如变成底下的样子时,您自己试看看,会是输出什么结果喔!
# printf '%10s %5i %5i %5i %8.1f \n' `cat printf.txt | grep -v Name`

范例三:列出数值 45 代表的字符为何?
[root@linux ~]# printf '\x45\n'
E
# 这东西也很好玩~他可以将数值转换成为字符,如果您会写 script 的话,
# 可以自行测试一下,由 20~80 之间的数值代表的字符是啥喔!

3.sed 工具简介



[root@linux ~]# sed [-nefr] [动作]
参数:
-n  :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN
      的数据一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过
      sed 特殊处理的那一行(或者动作)才会被列出来。
-e  :直接在指令列模式上进行 sed 的动作编辑;
-f  :直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的
      sed 动作;
-r  :sed 的动作支持的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
-i  :直接修改读取的档案内容,而不是由屏幕输出。

动作说明:  [n1[,n2]]function
n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作
         是需要在 10 到 20 行之间进行的,则『 10,20[动作行为] 』

function 有底下这些咚咚:
a   :新增, a 的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)~
c   :取代, c 的后面可以接字符串,这些字符串可以取代 n1,n2 之间的行!
d   :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i   :插入, i 的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行);
p   :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运作~
s   :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配
      正规表示法!例如 1,20s/old/new/g 就是啦!
范例:

范例一:将 /etc/passwd 的内容列出,并且我需要打印行号,同时,请将第 2~5 行删除!
[root@linux ~]# nl /etc/passwd | sed '2,5d'
     1  root:x:0:0:root:/root:/bin/bash
     6  sync:x:5:0:sync:/sbin:/bin/sync
     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
.....(后面省略).....
# 看到了吧?因为 2-5 行给他删除了,所以显示的数据中,就没有 2-5 行啰~
# 另外,注意一下,原本应该是要下达 sed -e 才对,没有 -e 也行啦!
# 同时也要注意的是, sed 后面接的动作,请务必以 '' 两个单引号括住喔!
# 而,如果只要删除第 2 行,可以使用 nl /etc/passwd | sed '2d' 来达成,
# 至于第 3 到最后一行,则是 nl /etc/passwd | sed '3,$d' 的啦! 

范例二:承上题,在第二行后(亦即是加在第三行)加上『drink tea?』字样!
[root@linux ~]# nl /etc/passwd | sed '2a drink tea'
     1  root:x:0:0:root:/root:/bin/bash
     2  bin:x:1:1:bin:/bin:/sbin/nologin
drink tea
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
# 嘿嘿!在 a 后面加上的字符串就已将出现在第二行后面啰!那如果是要在第二行前呢?
# nl /etc/passwd | sed '2i drink tea' 就对啦!

范例三:在第二行后面加入两行字,例如『Drink tea or .....』『drink beer?』
[root@linux ~]# nl /etc/passwd | sed '2a Drink tea or ......\
> drink beer ?'
     1  root:x:0:0:root:/root:/bin/bash
     2  bin:x:1:1:bin:/bin:/sbin/nologin
Drink tea or ......
drink beer ?
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
# 这个范例的重点是,我们可以新增不只一行喔!可以新增好几行~
# 但是每一行之间都必须要以反斜线 \ 来进行新行的增加喔!所以,上面的例子中,
# 我们可以发现在第一行的最后面就有 \ 存在啦!那是一定要的喔!

范例四:我想将第2-5行的内容取代成为『No 2-5 number』呢?
[root@linux ~]# nl /etc/passwd | sed '2,5c No 2-5 number'
     1  root:x:0:0:root:/root:/bin/bash
No 2-5 number
     6  sync:x:5:0:sync:/sbin:/bin/sync
# 没有了 2-5 行,嘿嘿嘿嘿!我们要的数据就出现啦!

范例五:仅列出第 5-7 行
[root@linux ~]# nl /etc/passwd | sed -n '5,7p'
     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     6  sync:x:5:0:sync:/sbin:/bin/sync
     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
# 为什么要加 -n 的参数呢?您可以自行下达 sed '5,7p' 就知道了!(5-7行会重复输出)
# 有没有加上 -n 的参数时,输出的数据可是差很多的喔!

范例六:我们可以使用 ifconfig 来列出 IP ,若仅要 eth0 的 IP 时?
[root@linux ~]# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:51:FD:52:9A:CA
          inet addr:192.168.1.12  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::250:fcff:fe22:9acb/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
.....(以下省略).....
# 其实,我们要的只是那个 inet addr:..那一行而已,所以啰,利用 grep 与 sed 来捉
[root@linux ~]# ifconfig eth0 | grep 'inet ' | sed 's/^.*addr://g' | \
> sed 's/Bcast.*$//g'
# 您可以将每个管线 (|) 的过程都分开来执行,就会晓得原因啰!
# 去头去尾之后,就会得到我们所需要的 IP 亦即是 192.168.1.12 啰~

范例七:将 /etc/man.config 档案的内容中,有 MAN 的设定就取出来,但不要说明内容。
[root@linux ~]# cat /etc/man.config | grep 'MAN'| sed 's/#.*$//g' | \
> sed '/^$/d'
# 每一行当中,若有 # 表示该行为批注,但是要注意的是,有时候,
# 批注并不是写在第一个字符,亦即是写在某个指令后方,如底下的模样:
# 『shutdown -h now # 这个是关机的指令』,批注 # 就在指令的后方了。
# 因此,我们才会使用到将 #.*$ 这个正规表示法!

范例八:利用 sed 直接在 ~/.bashrc 最后一行加入『# This is a test』
[root@linux ~]# sed -i '$a # This is a test'  ~/.bashrc
# 上头的 -i 参数可以让你的 sed 直接去修改后面接的档案内容喔!而不是由屏幕输出。
# 至于那个 $a  则代表最后一行才新增的意思。
4.declare 宣告变量内容
[test @test test]# declare [-afirx] 
参数说明: 
-a  :定义为数组 array 
-f  :定义为函数 function  
-i  :定义为整数 integer 
-r  :定义为『只读』 
-x  :定义为透过环境输出变量 
范例: 
[test @test test]# declare -i a=3 
[test @test test]# declare -i b=5 
[test @test test]# declare -i c=$a*$b 
[test @test test]# echo $c 
15  <==变成数字啰!
5.read 的功能就是『依据您在键盘输入的结果 input 到变量内容中』
6.条件式判断:if...then...fi, case.....esac 
if [ 条件判断一 ] && (||) [ 条件判断二 ]; then            <== if 是起始的意思,后面可以接若干个判断式,使用 && 或 || 
    执行内容程序 
elif [ 条件判断三 ] && (||) [ 条件判断四 ]; then     <==第二段的判断,如果第一段没有符合就来此搜寻条件 
    执行第二段内容程序 
else                                            <==当前两段都不符合时,就以这段内容来执行! 
    执行第三段内容程序 
fi                                              <==结束 if then 的条件判断!
eg:
echo "Press y to continue" 
read yn 
if [ "$yn" = "y" ]; then 
        echo "script is running..." 
else 
        echo "STOP!" 
fi 
---------------------------逻辑判断式--------------------
if [ ! -e logical ]; then //断定到底有没有档案(用 -e )
            touch logical 
            echo "Just make a file logical" 
            exit 1 
elif [ -e logical ] && [ -f logical ]; then //名称是属于目录或者是档案( -d -f ),
            rm logical 
            mkdir logical 
            echo "remove file ==> logical" 
            echo "and make directory logical" 
            exit 1 
elif [ -e logical ] && [ -d logical ]; then 
            rm -rf logical 
            echo "remove directory ==> logical" 
            exit 1 
else 
            echo "Does here have anything?" 
fi-----使用 case ...esac 的方式 
case 种类方式(string) in               <==开始阶段,那个种类方式可分成两种类型,通常使用 $1 这一种直接下达类型! 
    种类方式一) 
       程序执行段 
       ;;                     <==种类方式一的结束符号! 
    种类方式二) 
       程序执行段 
       ;; 
    *) 
       echo "Usage: {种类方式一|种类方式二}"     <==列出可以利用的参数值! 
       exit 1 
esac                         <==这个 case 的设定结束处!eg:case $1 in                                   <==使用直接下达指令型态!  one)         echo "your choice is one"         ;;  two)         echo "your choice is two"         ;;  three)         echo "your choice is three"         ;;  *)         echo "Usage {one|two|three}"       <==列出可以使用的参数(如果使用者下达错误的参数时)         exit 1 esac   7.循环:for....do....done, while...do...done, until...do...done,
  • for (( 条件一; 条件二; 条件三 )) declare -i s # <==变量宣告
• for (( i=1; i<=100; i=i+1 )) 
do 
        s=s+i 
done 
echo "The count is ==> $s"
____________________-
LIST="Tomy Jony Mary Geoge" for i in $LIST 
do 
             echo $i 
done
----将你的 Linux 主机上的账号 ( account ) 印出来呢
account=`cut -d ":" -f1 /etc/passwd|sort` 
echo "The following is your linux server's account" for i in $account 
do 
            echo $i 
done
  • while [ condition1 ] && { || } [ condition2 ] ...//当条件相同的时候,就继续做!
• declare -i i 
declare -i s 
while [ "$i" != "101" ] 
do 
             s=s+i 
             i=i+1 
done 
echo "The count is ==> $s"
• 
• until [ condition1 ] && { || } [ condition2 ] ... //until:直到条件相同的时候才离开程序
declare -i i 
declare -i s 
until [ "$i" = "101" ] 
do 
             s=s+i 
             i=i+1 
done 
echo "The count is ==> $s"
-----------
echo "Press Y/y to stop" 
until [ "$yn" = "Y" ] || [ "$yn" = "y" ] 
do 
            read yn 
done 
echo "Stop here"
  • 先查看一下 /root/test/logical 这个名称是否存在;
  1. 若不存在,则建立一个档案,使用 touch 来建立,建立完成后离开;
  2. 如果存在的话,判断该名称是否为档案,若为档案则将之删除后建立一个档案,档名为 logical ,之后离开;
  3. 如果存在的话,而且该名称为目录,则移除此目录!
if [ ! -e logical ]; then 
        touch logical 
        echo "Just make a file logical" 
        exit 1 
elif [ -e logical ] && [ -f logical ]; then 
        rm logical 
        mkdir logical 
        echo "remove file ==> logical" 
        echo "and make directory logical" 
        exit 1 
elif [ -e logical ] && [ -d logical ]; then 
        rm -rf logical 
        echo "remove directory ==> logical" 
        exit 1 
else 
        echo "Does here have anything?" 
fi

8.script 如何 debug
sh [-nvx] scripts
-n :不要执行 scripts ,查询 scripts 内的语法,若有错误则予以列出!
-v :在执行 scripts 之前,先将 scripts 的内容显示在屏幕上;
-x :将有使用到的 scripts 内容显示在屏幕上,与 -v 稍微不同!

9.groupadd
groupadd [-g GID] groupname
参数说明:
-g GID :自行设定 GID 的大小
范例:
[root @test /root]# groupadd -g 55 testing<==设定一个群组,GID为 55

 

Sed 命令列可分成编辑指令与文件档部份。其中 , 编辑指令负责控制所有的编辑工作 ; 文件档表示所处理的档案

//

1.gcc hello.c
# 这个时候,在本目录下会产生一个名为 a.out 的执行档!
# 在预设的状态下,如果我们直接以 gcc 编译原始码,并且没有加上
# 任何参数,则执行档的档名会被自动设定为 a.out 这个文件名称!
运行:./a.out

2.gcc -c hello.c
# 会产生一个名为 hello.o 的目标文件,object file 的附档名为 *.o 喔!
 
gcc -o hello hello.o
# 这个步骤是利用 hello.o 这个目标文件制作出一个名为 hello 的执行档
# 详细的 gcc 语法我们会在后续章节中继续介绍!
# 透过这个动作后,我们可以得到 hello 及 hello.o 两个档案,
# 真正可以执行的是 hello 这个 binary file 喔!
 
# 3. 执行一下这个档案:
./hello

3. thanks.c调用thanks_2.c程序gcc -c thanks.c thanks_2.c
# 产生了两个目标文件!
gcc -o thanks thanks.o thanks_2.o
 
# 3. 执行一下这个档案:
./thanks

4.Gcc 参数
gcc -O -c thanks.c thanks_2.c # -O 为产生最佳化的参数
gcc -Wall -c thanks.c thanks_2.c
thanks.c: In function `main':
thanks.c:5: warning: implicit declaration of function `thanks_2'
thanks.c:6: warning: control reaches end of non-void function
thanks_2.c: In function `thanks_2':
thanks_2.c:3: warning: implicit declaration of function `printf'
# -Wall 为产生更详细的编译过程信息。上面的讯息为警告讯息( warning )
# 所以不用理会也没有关系!
============在编译与连结的时候将这个函式库给他连结进执行档里面=======
gcc sin.c -lm -L/lib -L/usr/lib
# 特别注意,那个 -lm
# -l 是『加入某个函式库(library)』的意思,而
# m 则是 libm.so 这个函式库,其中, lib 与附档名(.a 或 .so)不需要写
# 所以 -lm 表示使用 libm.so (或 libm.a) 这个函式库的意思~
# 至于那个 -L 后面接的路径呢?这表示:
#『我要的函式库 libm.so 请到 /lib 或 /usr/lib 里面搜寻!
#运行 ./a.out
注意:由于 Linux 预设是将函式库放置在 /lib 与 /usr/lib 当中
============关于程序中的#include <stdio.h>============
说的是要将一些定义数据由 stdio.h 这个档案读入,这包括 printf 的相关设定。这个档案其实是放置在 /usr/include/stdio.h 的!那么万一这个档案并非放置在这里呢?那么我们就可以使用底下的方式来定义出要读取的 include 档案放置的目录:gcc sin.c -lm -I/usr/include//默认值是放置在 /usr/include
=================================================
# 仅将原始码编译成为目标文件,并不制作连结等功能:
[guest@test guest]# gcc -c hello.c
# 会自动的产生 hello.o 这个档案,但是并不会产生 binary 执行档。
 
# 在编译的时候,依据作业环境给予最佳化执行速度
[guest@test guest]# gcc -O hello.c -c
# 会自动的产生 hello.o 这个档案,并且进行最佳化喔!
 
# 在进行 binary file 制作时,将连结的函式库与相关的路径填入
[guest@test guest]# gcc sin.c -lm -L/usr/lib -I/usr/include
# 这个指令较常下达在最终连结成 binary file 的时候,
# -lm 指的是 libm.so 或 libm.a 这个函式库档案;
# -L 后面接的路径是刚刚上面那个函式库的搜寻目录;
# -I 后面接的是原始码内的 include 档案之所在目录。
 
# 将编译的结果输出成某个特定档名
[guest@test guest]# gcc -o hello hello.c
# -o 后片接的是要输出的 binary file 檔名
 
# 在编译的时候,输出较多的讯息说明
[guest@test guest]# gcc -o hello hello.c -Wall
# 加入 -Wall 之后,程序的编译会变的较为严谨一点,
# 所以警告讯息也会显示出来!


/

nl:       在每一行前面加上行号
eg:      ls | nl

joint:    根据给定的字段(field)把两个文件中的行连接起来

cut:       剪除一行中的指定字段
csplit:    将一个文件中的指定行去除

banner: 用字符来组成字符
eg:        banner -c a hello
             用字母a组成一个hello的字样

od:        用二进制来显示文件内容

seq:       顺序的产生一组数字(1,3,5,7,。。。)
eg:         seq 2 2 10
              产生2,4,6,8,10

ascii:       显示ascii table

sort:      排序
uniq:      去除相同的行

watch: 循环运行指定的命令
eg:       watch -n 3 -d ps U wangwei
            每3秒运行一次命令" ps U wangwei ",同时将两次不同的地方以反白显示出来

sed:    stream editor
tee:    将stdin中的数据copy出一份,同时将数据传送给stdout

zip,unzip: zip data

tar:     将多个文件打包

diff,patch: 文件比较,补丁工具
umount /dev/hdb2
mount -a
more /etc/mtab
mount -a -o remount <==这个指令可以重新将 /etc/fstab 的咚咚 mount 下来!





标签:root,logical,echo,命令,sed,LINUX,test,部分,hello
From: https://blog.51cto.com/u_130277/6457499

相关文章

  • Linux 磁盘空间莫名被吃掉,该怎么查?
    在服务器运维过程中,我们时常会遇到这样的情况,收到服务器磁盘空间告警: 登录服务器,通过df-Hl查看 和告警信息一致,接着我们就是要找到导致磁盘空间满的目录或文件。如何找到占用空间大的目录或文件?一种比较笨的方法是,在根目录下,通过du-hs命令,列出各目录所占空间大小 之后再用同样......
  • phonegap3.1.0自学笔记01_命令行界面(CLI)简单使用
    要使用phonegap的CLI必须首先安装好phonegap,phonegap的安装还请参看我的另外一篇文章:windows7搭建phonegap3Android开发环境。本篇文章介绍CLI的简单使用,由于本人水平有限,还请大侠不要拍砖。 phonegap3.1.0使用命令行去创建应用程序的框架,然后我们可以基于命令行创建的程序再去进......
  • React - 28 redux部分源码解析
    myRedux.jsimport_from'./assets/utils';/*实现redux的部分源码*/exportconstcreateStore=functioncreateStore(reducer){if(typeofreducer!=='function')thrownewError("Expectedtherootreducertobeafunction");......
  • Linux服务器配置SSH免密码登录后,登录仍提示输入密码(一次真实的问题排查解决记录)
    我们知道两台Linux服务器机器之间如果使用ssh命令登录或scp/rsync命令传输文件每一次都需要输入用户名相对应的密码,如果要免密码,则需要对两台Linux服务器机器之间进行SSH互信。一.SSH介绍1.SSH互信原理虽然这是废话,也希望大家了解一下。SSH(SecureShell)是一种安全的传输协议,它可以......
  • 【Linux中断】中断下半部-软中断softirq的原理与使用
    软中断软中断是中断下半部的典型处理机制,是随着SMP的出现应运而生的,也是tasklet实现的基础,软中断的出现是为了满足中断上半部和下半部的区别,使得对时间不敏感的任务延后执行,而且可以在多个CPU上并行执行,使得总的系统效率可以更高。软中断有以下特性:产生后并不是马上可以执行,必......
  • linux防火墙相关命令
    查看防火墙状态:systemctlstatusfirewalld启动防火墙:systemctlstartfirewalld关闭防火墙:systemctlstopfirewalld禁用防火墙:systemctldisablefirewalld重启防火墙(修改配置后要重启防火墙):firewall-cmd--reload开放指定端口:firewall-cmd--permanent--a......
  • 在Windows上无docker直接将基于Solon的jar包通过IDEA部署到Linux的docker上
    为何会选择学习solon?springboot对于我开发小企业应用太重,启动太慢,下班太晚!为何都用windows,还想着不安装dockerdesktop洁癖,运行路径能短就短。步骤(以solon官网的helloword为例)1、下载helloworld代码传送阵:点击我2、通过IDEA打开代码,并运行它(我是下载基于maven版本的)。3......
  • Linux系统下配置Nginx服务器
    Nginx是一个高性能的开源HTTP和反向代理服务器,也可以作为电子邮件(SMTP/POP3/IMAP)代理服务器、负载均衡器和HTTP缓存服务器,使用在安装Nginx之前,需要安装一些其他软件依赖,如gcc、pcre、zlib和openssl。1、yum installgcc-ygcc是GNUCompilerCollection的简称,包含编译器和其他编......
  • Linux下六个有关file使用的实例
    FILE命令用来识别文件类型,也可用来辨别一些文件的编码格式。它是通过查看文件的头部信息来获取文件类型,而不是像Windows通过扩展名来确定文件类型的。本文介绍Linux下的六个有关file的实例。简介file的官方解释为:file - determine file type也就是说可以识别文件......
  • linux如何同时执行两个命令,如何同时运行两个或者多个终端命令
    [-d~/aa]||mkdir~/aa[-f~/sample.txt]&&echo"Fielexits"||touch~/sample.txt查看前一条命令的返回值echo$?echo$?查看命令执行成功与否的原理“进程生命周期”当一个进程执行完毕时,该进程会调用一个名为_exit的例程来通知内核它已经做好......