学一下Bash

学一下BASH


0x01 常用命令

  • ls
    ls命令用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)。

    参数 :
    -a 显示所有文件及目录 (ls内定将文件名或目录名称开头为"."的视为隐藏档,不会列出)
    -l  除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出
    -r  将文件以相反次序显示(原定依英文字母次序)
    -t  将文件依建立时间之先后次序列出
    -A  同 -a ,但不列出 "." (目前目录) 及 ".." (父目录)
    -F  在列出的文件名称后加一符号;例如可执行档则加 "*", 目录则加 "/"
    -R  若目录下有文件,则以下之文件亦皆依序列出
    
  • cd

    • cd命令用于切换当前工作目录至 dirName(目录参数)。(其中 dirName 表示法可为绝对路径或相对路径)
    • 另外,~ 表示 home 目录,. 则是表示目前所在的目录,.. 则表示目前目录位置的上一层目录。例如,cd ~进入home目录、cd ..进入当前目录的上一个目录。
  • pwd
    pwd命令用于显示工作目录。
    执行pwd指令可立刻得知您目前所在的工作目录的绝对路径名称。

    参数:
    --help 在线帮助。
    --version 显示版本信息。
    
  • cat
    cat 命令用于连接文件并打印到标准输出设备上。

    参数说明:
    -n 或 --number:由 1 开始对所有输出的行数编号。
    -b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。
    -s 或 --squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行。
    -v 或 --show-nonprinting:使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外。
    -E 或 --show-ends : 在每行结束处显示 $。
    -T 或 --show-tabs: 将 TAB 字符显示为 ^I。
    -A, --show-all:等价于 -vET。
    -e:等价于"-vE"选项;
    -t:等价于"-vT"选项;
    

    除此之外,还有如下用法:

    cat -n textfile1 > textfile2
    把 textfile1 的文档内容加上行号后输入 textfile2 这个文档里
    
    cat -b textfile1 textfile2 >> textfile3
    把textfile1和textfile2的文档内容加上行号(空白行不加)之后将内容附加到textfile3 文档里
    
    cat /dev/null > /etc/test.txt
    清空 /etc/test.txt 文档内容
    
  • more
    more 命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读。-n参数可以指定一次显示的行数(默认10行)。
    最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似),使用中的说明文件,请按 h 。

  • tail
    tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。
    tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。

    参数:
    -f 循环读取
    -q 不显示处理信息
    -v 显示详细的处理信息
    -c<数目> 显示的字节数
    -n<行数> 显示文件的尾部 n 行内容
    --pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
    -q, --quiet, --silent 从不输出给出文件名的首部
    -s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
    
  • cp
    cp命令主要用于复制文件或目录。

    参数
    -a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
    -d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。
    -f:覆盖已经存在的目标文件而不给出提示。
    -i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。
    -p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
    -r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
    -l:不复制文件,只是生成链接文件。
    
  • rm
    rm命令用于删除一个文件或者目录。删除文件可以直接使用rm命令,若删除目录则必须配合选项-r

    参数:
    -i 删除前逐一询问确认。
    -f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。
    -r 将目录及以下之档案亦逐一删除。
    
  • top
    top命令用于实时显示 process 的动态。
    top打开进程管理器,可以在top界面输入k,然后输入进程的 PID可以关闭进程

  • ps
    ps命令用于显示当前进程 (process) 的状态。
    通常使用-ef参数显示详细的信息,ps aux显示的信息则有些不同。

  • grep
    grep命令用于查找文件里符合条件的字符串。

    • 在当前目录中,查找后缀有 file字样的文件中包含 test 字符串的文件,并打印出该字符串的行。此时,可以使用如下命令:
      grep test *file

    • 以递归的方式查找符合条件的文件。例如,查找指定目录/etc/acpi 及其子目录(如果存在子目录的话)下所有文件中包含字符串update的文件,并打印出该字符串所在行的内容,使用的命令为:
      grep -r update /etc/acpi

    • 反向查找。前面各个例子是查找并打印出符合条件的行,通过-v参数可以打印出不符合条件行的内容。
      例如,查找文件名中包含 test 的文件中不包含test 的行,此时,使用的命令为:
      grep -v test *test*

  • ifconfig
    ifconfig命令查看修改当前的网络配置信息。

  • netstat
    netstat命令用来查看网络连接信息。
    -pantu一套参数,可以查看当前计算机和哪些网络的服务器产生了TCP、UDP连接。

  • cut
    cut命令用于显示每行从开头算起 num1 到 num2 的文字。

    语法:cut [-参数] [file]

    参数:
    -b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
    -c :以字符为单位进行分割。
    -d :自定义分隔符,默认为制表符。
    -f :与-d一起使用,指定显示哪个区域。
    -n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的
    范围之内,该字符将被写出;否则,该字符将被排除
    
  • sort
    sort命令用于将文本文件内容加以排序。
    sort可针对文本文件的内容,以行为单位来排序。

    参数说明:
    -b 忽略每行前面开始出的空格字符。
    -c 检查文件是否已经按照顺序排序。
    -d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
    -f 排序时,将小写字母视为大写字母。
    -i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
    -m 将几个排序好的文件进行合并。
    -M 将前面3个字母依照月份的缩写进行排序。
    -n 依照数值的大小排序。
    -o<输出文件> 将排序后的结果存入指定的文件。
    -r 以相反的顺序来排序。
    -t<分隔字符> 指定排序时所用的栏位分隔字符。
    +<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
    
  • mount
    mount是用来挂载目录的命令。
    用例:
    mount -o loop kali.iso /media/cdrom
    将kali的镜像挂载到 /media/cdrom,可以直接查看其内容。

  • find
    find命令用来在指定目录下查找文件。
    任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

    将目前目录及其子目录下所有延伸档名是 c 的文件列出来。
    
    # find . -name "*.c"
    将目前目录其其下子目录中所有一般文件列出
    
    # find . -type f
    将目前目录及其子目录下所有最近 20 天内更新过的文件列出
    
    # find . -ctime -20
    查找/var/log目录中更改时间在7日以前的普通文件,并在删除之前询问它们:
    
    # find /var/log -type f -mtime +7 -ok rm {} \;
    查找前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:
    
    # find . -type f -perm 644 -exec ls -l {} \;
    为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径:
    
    # find / -type f -size 0 -exec ls -l {} \;
    

0x02 管道符

  • |
    表示管道,上一条命令的输出,作为下一条命令参数,如只想查看 /etc/passwd文件中,包含ssl 字符串的一行:cat /etc/passwd | grep ssl

  • ||
    表示上一条命令执行失败后,才执行下一条命令,如:cat nofile || echo "fail"

  • &
    前后两个命令依次会去执行,如:cd .. & ls

  • &&
    表示前一条命令执行成功时,才执行后一条命令。如:echo '1‘ && echo '2'


0x03 shell脚本

  • Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
  • Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
  • Shell 编程跟 java、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。

这里不做详细的介绍,网上的教程很多,这里提供两个:
http://www.runoob.com/linux/linux-shell.html
https://www.shiyanlou.com/courses/944

仅提一下需要注意的两点:

  • #!/bin/bash是所有shell脚本默认的起始行,表示用/bin目录下的bash来解释脚本。

  • 在写完一个shell脚本后,要想运行该脚本,需要先用chmod +x 脚本名称命令,来给你下的脚本增加执行的权限,才能执行脚本。或者直接使用bash 脚本名称来运行脚本。

发布了42 篇原创文章 · 获赞 31 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42181428/article/details/89258554