Shell命令

这篇博客详细介绍了Linux操作系统中的目录切换、创建、删除和复制,以及文件的创建、查看、编辑和压缩解压操作。此外,还涵盖了用户和组管理、权限设置、shell脚本编写以及标准文件描述符的使用。内容深入浅出,适合Linux初学者和运维人员参考。
摘要由CSDN通过智能技术生成

1.目录操作

        a.切换目录

                cd /   |切换根目录| 

                cd -   |切换目录| 

                cd ~或Enter  |切换用户目录| 

                cd ..  |返回上一级目录|

                cd /var |切换/var目录|

        b.创建目录

                mkdir -v test |在当前目录下创建test目录|  -v 显示已创建文件的提示语句

                mkdir test1 test2 |在当前目录同时创建test1和test2目录|

                mkdir -p test3/test4 test5 |在当前目录创建层级目录test3/test4、目录test5|

                mkdir -p -m 700 test6/test7 |在当前目录下创建test6/test7目录,并给test7设置目录权限|

        c.删除目录

               rm  -vrf test1 |在当前目录下递归删除test1目录| -v 显示详情 -r 递归删除 -f 强制删除不二次提示

        d.复制目录

                cp -a test test1 |复制目录test为test1目录|   -a相当于pdr p保留源属性r递归复制f强制覆盖

2.文件

        a.创建文件

                touch file.txt |创建文件|    stat file.txt |查看文件的大小和权限|  file file.txt |查看文件类型|

        b.查看文件  

                 /etc/passwd  root:x:0:0:root:/root:/bin/bash  登陆用户名:密码:UID:GID:备注字段:用户home目录:用户默认的shell

                /etc/shadow 登陆名:加密后的密码:上次修改过去的天数:多少天才能更改密码:多少天必须修改密码:过期提醒提前多少天提醒用户修改密码:密码过期几天后禁用账户:用户禁用的日期:预留字段

                /etc/group 组名:组密码:GID:属于该组的用户

                cat file.txt  |查看文件| -n 为文件中的所有行加行号 -b 为文件中的有文本的行加行号

                vim file.txt  |编辑文件|  1.行内移动 b/w向前/后移动一个单词 0^/$行首/行尾2.gg/G文件顶部/尾部 (:number 跳转行数)  ctrl+f/b 向下\上翻页 光标移动到屏幕(H\M\L)  段落切换({\})  成对括号切换(%)   标记(mx和‘x)x为a-z或A-Z 3.v可视模式|V可视行模式|ctrl+v可视块模式 4.u|ctrl+r撤销重做5. x|nx 删除单个字符    dd 删除整行 d0|d$删除到行首行尾 6. yy 复制整行  y0|y$| 7.缩进 >>|<< 进入可视模式 >|<   . 重复操作 8./str|?str 向下|上查找,n,N重复操作 9.:set nu|nonu

        c.压缩文件

                tar -cvf archive.tar foo bar |将foo、bar文件归档archive.tar| -f指定文件名-c创建-t查看内容列表-v显示详细信息

                tar -zcvf archive.tar.gz foo bar |将foo、bar文件压缩archive.tar.gz|  

                tar -rvf archive.tar.gz zoo |将文件zoo添加到archive.tar.gz中|

                        -z  tar.gz  gzip|ungzip|gunzip文件

                        -j   tar.bz2 bzip2文件

                        -J tar.zx  zx文件

        d.解压文件

                tar -xvf archive.tar -C test |解压archive.tar到test目录下|

                tar -zxvf archive.tar.gz -C test |解压archive.tar到test目录下|

3.别名

        alias mv='mv -i '    创建别名。一个别名仅在它创建的shell进程中才有效

4.父shell进程

        所有命令都是在父shell进程中执行的。直到运行bash命令,会产生子shell进程。

        查看是否有子进程 echo $BASH_SUBSHELL 为0没有子进程

        (命令1;命令2; echo $BASH_SUBSHELL )  开启子shell执行

        (命令1;命令2; echo $BASH_SUBSHELL ) &  开启子shell进程并后台执行

        coproc sleep 3 |后台产生子shell,并在shell中执行命令。协程|

        coproc Myjob { sleep 3; } |后台产生子shell,并在shell中执行命令,设置名称。协程|

        命令1;命令2; echo $BASH_SUBSHELL 在父shell进程下,开启一个子进程执行

        sleep 3000 & |在父shell进程下,开启一个子进程后台执行(称为job)|

5.全局变量

        env 查看全局变量  echo $HOME 查看某个全局变量的值。全局变量对子bash也是起作用的

        export MY_VARI="value" |设置全局变量|

        PATH 环境变量定义了用于命令和程序查找的目录

        PATH=PATH:/home/nginx/conf 向环境变量添加目录。PATH:.。

 6.局部变量

        my_variable=value或"value"  设置局部变量 echo $my_variable

        unset my_variable 删除变量

7.数组变量

        myarrtest=(one two three four five)

        echo $myarrtest 结果:one ;echo ${myarrtest[2]} 结果:three ;

        echo ${myarrtest[*]} 结果:one two three four five ; unset myarrtest 删除数组

8.登陆shell会从5个不同的文件中读取命令

        /etc/profile 默认的主启动文件

        $HOME/.bash_profile 启动文件会检查是否有.bashrc,有先执行

        $HOME/.bashrc  文件会在上面的文件中执行

        $HOME/.bash_login

        $HOME/.profile

9.创建用户

        useradd user1 |创建用户|  -c commnet 给用户添加备注,-e 2022-05-05 设置过期日期;

-f 5 账户过期后5天被禁用,0 已过期就被禁用,-1禁用这个功能;-p passwd 指定默认密码

9.删除用户

        userdel user1 |删除用户|。默认只会删除/etc/passwd文件中的用户信息。-r 会删除home及邮件目录

10.修改用户

        usermod  test1 |修改用户|  -L 锁定用户,无法登陆;-U 解锁锁定,用户登陆;-p 修改密码

-e 设置过期日期。-l 修改登陆名。-G test1用户添加到指定组。

        passwd  test1 |用户自己修改密码|。

11.创建组

        groupadd  shared |创建shared组|

        groupmod  shared |修改shared组|。-n 修改组名;-g 修改组id ;-p 修改组密码

12.权限

        文件一般权限rw-(6)。目录一般权限 r-x(5)。

        chmod 777 test1  |修改文件权限(r 4,w 2,x 1)|

        chmod o+r  newFile |在现有权限的基础上增加权限|。[ugoa]为权限作用的对象。[+-=]为增加、删除、设置。[rwxXstugo] 。-R 递归赋予权限。文件可以使用通配符。

        chown dan.shared|.share newFile |同时改变文件的属主和属组|

13.磁盘

        IDE硬盘机 /dev/hd[a-d]

        SCSI/SATA/USB硬盘机 /dev/sd[a-p]

14.shell脚本

        #!/bin/bash   注释

        ./xx.sh  执行该脚本,$0=./xx.sh。bash/sh  /root/xx.sh,$0=/root/xx.sh。. /root/xx.sh,$0=-bash。$# 脚本运行时的参数个数。$* 把所有变量当成单个参数。$@ 会单独处理每个参数。$$ 脚本运行的pid

        shift 默认移动一个位置。从$1中取值

        IFS=$IFS;IFS=$'\n'

        $Variable 在脚本中使用变量,同时可以在字符串中,"this is $Variable"

         脚本中定义变量 var1=value var2=$var1,使用变量 $var1。

         将命令执行结果赋予给变量 var1=$(date)。date 日期命令。

         输出/输入重定向:>|>>。ls > file.txt 将一个命令的输出作用到文件中。 wc < file.txt,wc << $PS2 |$PS2|为文本标记。

        将一个命令的输出作为另一个命令的输入,这个过程叫做管道。command1 | command2。

rpm -qa | sort | more。

        执行数学计算:$[$var1 * 2]。var1 = $(echo "scale=4;$var2 * $var3" | bc)

        查看命令的执行状态。date;$?。

15.结构化语句

        1. if command        

            then

                    commands

            fi

        2.if command;then

            commands

           fi

        3.if command;then

           commands

           else

           commands

          fi

        4.case $var in

        rich | varbara) echo xxxx;;

        *) echo xxxx;;

          esac

        5.for var in list;do

        commands

        done      list为 I don\'t "new baby",可以拼接list=$list" now"。遍历文件 $(cat $file)

        6.for ((a=1,b=10;a<=10;a++,b--))

        do

        commands

        done

        7. while echo $var

                [$var -ge 0]

            do

           commands

            done

        8.until [...]

         do

         commands

        done                                            

会执行command命令,如果命令的返回状态码为0,则会运行then中的commands。否则会跳过执行。数值比较 [-ne|-eq|-ge|-le|-gt|-lt]。字符串比较 [=|!=|\<|\>|-z|-n]。文件比较 -d file 检查file是否存在且是一个目录 ,-f file 检查file是否存在且是一个文件,-e file 检查file是否存在,-r/w/x file 检查文件是否存在并可读/可写/可执行,-s file 检查文件是否存在且非空,-O/G 是否属主/默认组于当前用户相同,-nt|ot 是否比新/旧

        set  -- $(getopt -q ab:cd "$@")  getopt命令将原始命令行参数格式化后结果,传入原始命令行。缺点不能识别"value1 value2"

16. 标准文件描述符

        处理脚本的输入和输出。0 STDIN 标准输入。1 STDOUT 标准输出。 2 STDERR 标准错误。

        2> file.log  重定向标准错误到文件file.log。

        1> file.log 重定向标准输出到文件file.log。

        &> file.log 重定向标准输出和错误到文件file.log。

        脚本中使用|echo "this is an error"  >&2 将消息重定向到标准错误文件描述符|,运行脚本时,使用 bash xx.sh 2> error.log,可以将错误信息重定向到错误文件。

        脚本中使用exec 1>testout 将标准输出重定向到testout文件

        脚本中使用 exec 0 < input.txt 将标准输入重定向到文件,而非键盘

        创建输出文件描述符。exec 3>|>>file.txt和echo "xxx msg" >&3

        创建输入文件描述符。exec 6<&0和exec 0<file

        关闭文件描述符。exec 3>&-

        删除文件内容。cat /dev/null > xxx.log。

        恢复默认。1.exec 3>&1。2. exec 1> fileout 3.恢复 exec 1>&3。

17.脚本函数

       1.function name {

                commands

        }

        2. name(){

                commands

        }

        3.调用函数:name|name value1 value2

        4.使用函数返回值:value=$(name|name value1 value2)

        5.传入数组:name $myarray传入数组第一个值。name ${myarray[*]} 传入整个数组。

            在函数内:newarray=(`echo "$@"`)或($(echo "$@"))

18.sed命令

        1.依次处理一行,将新的数据输出到STDOUT

        2.sed 's/dog/cat/' data1.txt 将文本的dog改为cat输出,不改变源文本。

        3.sed -e 's/dog/cat/; s/brown/green' data1.txt

        4.set -f script.sed data1.txt

19.gawk

        1.gawk -F :  '{ $4="newWord" print $1}' data1.txt 打印文本第一列数据。$0 代表整行。$1代表文本行的第1个数据字段。-F : 指定分割符为:。 $4="newWord" 替换为新值。

        2.'BEGIN {FS=",";OFS="<--->"} {$4="newWord" print $1} END {} '   源分隔符FS,目标分隔符

OFS,换行符RS和ORS。NF字段总数。NR处理记录数。FNR 正在处理记录行数。

       

        

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值