指令

指令结构

在Linux下,指令由命令和选项组成,并且可以包含参数和操作数。以下是指令的一般结构:

command [option(s)] [argument(s)]
  • command表示要执行的命令或程序名称。
  • option(s)是可选的,用于修改命令的行为或提供额外的功能。选项通常以短划线(-)或双短划线(–)开头。
  • argument(s)是命令的参数或操作数,用于提供命令操作所需的信息。

|

利用Linux所提供的管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入。连续使用管道意味着第一个命令的输出会作为 第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推。

>重定向符号

>是一个重定向符号,用于将命令的输出重定向到文件中。它不是cat命令特有的,而是用于shell(命令行解释器)的通用功能。

cat file1.txt file2.txt > merged.txt这个例子中,>符号将cat file1.txt file2.txt命令的输出重定向到merged.txt文件中。这意味着file1.txtfile2.txt的内容将被合并,并写入到merged.txt文件中。如果merged.txt文件不存在,则会创建该文件;如果文件已存在,则会覆盖文件的内容。

除了>符号外,还有其他一些重定向符号可以用于不同的目的:

  • >>:追加重定向符号。将命令的输出追加到文件的末尾,而不是覆盖文件的内容。
  • <:输入重定向符号。将文件的内容作为命令的输入。
  • 2>:错误重定向符号。将命令的错误输出重定向到文件中。

这些重定向符号是shell的通用功能,可以与各种命令一起使用。

比如说cat example.txt > example2.txt,本来cat example.txt执行后是将内容输出到标准输出(stdout)中的,这也是几乎所有命令的输出地方,也就是显示到屏幕上给我们看,而>正是让命令产生结果后拦截掉,不再让该命令输出到stdout,而是我们指定的位置。

grep

grep是Linux系统中一个非常有用的文本搜索工具。它可以在指定的文件或输入中搜索匹配给定的正则表达式或字符串的行。

grep的一般语法是:

grep [选项] ‘正则表达式’ 文件名

例如,要在文件中搜索含有”linux”字符串的行,可以使用:

grep linux 文件

grep的一些常用选项包括:

-i:不区分大小写
-v:反向选择,显示不匹配的行
-c:只输出匹配的行数
-n:输出行号
-l:只输出包含匹配内容的文件名

grep是一个强大的文本搜索工具,可以帮助用户快速地在Linux系统中查找需要的内容。配合正则表达式,可以实现非常复杂和高级的文本匹配搜索。

正则表达式

正则表达式(Regular Expression)是一种文本模式,用于在文本中查找匹配某个模式的字符串。

正则表达式的一些常见规则包括:

  • .– 匹配任意单个字符
  • *– 匹配前一个元素0次或多次
  • +– 匹配前一个元素1次或多次
  • ?– 匹配前一个元素0次或1次
  • []– 匹配方括号内的任意一个字符
  • [^]– 匹配不在方括号内的任意一个字符
  • |– 或,匹配竖线两边的任意一个表达式
  • ()– 分组
  • d– 匹配数字
  • w– 匹配字母或数字
  • s– 匹配任意空白符
  • – 匹配字符串的开始
  • $– 匹配字符串的结束
  • {n} 匹配确定的n次
  • {n,} 至少匹配n次
  • {n,m}匹配至少n次,至多m次

通过组合这些基本规则,可以构建非常复杂和强大的正则表达式,用来匹配文本中的模式。

ADB

什么是ADB

在安卓开发中,ADB是Android Debug Bridge的缩写,它是一个用于与Android设备进行通信和调试的命令行工具。ADB提供了一组命令和功能,使开发者能够与连接的Android设备或模拟器进行交互,并执行各种操作,包括应用程序安装、文件传输、日志记录、调试等。

ADB常用指令

以下是一些常见的ADB命令示例:

  • adb devices:列出当前连接的Android设备或模拟器。
  • adb install <apk_file>:安装一个APK文件到目标设备。
  • adb uninstall <package_name>:卸载指定包名的应用程序。
  • adb shell:进入目标设备的shell环境,可以执行命令和访问设备文件系统。
  • adb push <local_file> <remote_path>:将本地文件复制到目标设备上指定路径。
  • adb pull <remote_file> <local_path>:从目标设备上复制文件到本地路径。
  • adb logcat:查看设备上的系统日志和应用程序日志。

SHELL

什么是shell

shell是Linux系统中的一个命令解释器。它为用户提供了一个向Linux内核发送请求以便运行程序的界面,是用户与操作系统之间的桥梁。

shell的主要作用包括:

  1. 接受用户的命令并调用相应的应用程序。shell本身不做事情,它只是运行用户所要求的应用程序。
  2. 为用户提供了一个向Linux内核发送请求以便运行程序的界面。
  3. 操作文件和目录。大部分的文件和目录管理任务都可以通过shell来完成。
  4. 执行操作系统命令,例如ls, cp, mv等。这些命令实际上都是可执行的程序,shell能够找到并执行这些命令。
  5. 连接linux中的各个程序,实现在一个命令行中运行多个程序。
  6. 为用户提供了编程功能,可以编写shell脚本来执行各种任务。
  7. 自定义和自动化命令,减少重复输入。
  8. 提供丰富的功能,支持命令历史、命令补全、通配符、管道等机制。

也就是相当于windows下的cmd

使用Android中的指令

首先我们需要通过adb shell进入指定的安卓设备

用到的指令:

如果你想进入通过usb连接的安卓手机,可以使用这个指令,当然只允许有一个usb连接的手机才可用:

adb -d shell

-d 解释:use USB device (error if multiple devices connected)

或者指定连接的设备:

adb -s 设备号 shell

-s SERIAL 解释: use device with given serial (overrides $ANDROID_SERIAL)

设备号需要通过adb -devices获取。

which

which是一个常用的命令行工具,用于查找给定命令的可执行文件的路径。当你在终端中输入一个命令时,系统会根据环境变量中定义的路径来查找该命令的可执行文件。which命令可以告诉你系统在哪个目录下找到了该命令的可执行文件。

例如,如果你在终端中输入which ls,系统会在环境变量定义的路径中查找ls命令的可执行文件,并返回该文件的路径(例如/bin/ls)。如果系统找不到该命令,which命令将不会返回任何内容。

which命令通常用于确定系统上是否安装了特定的命令或程序,并查找它们的位置。这对于调试和查找特定命令的路径非常有用。

1|rubens:/ $ which ls
/system/bin/ls

安卓特有指令dumpsys

用于获取系统服务的调试信息和状态。它可以提供有关设备各个方面的详细信息,如活动管理器、包管理器、电池状态、网络状态、传感器、窗口管理器等。

通过运行dumpsys命令,你可以获取关于设备当前状态和正在运行的应用程序的各种信息。例如,你可以使用dumpsys battery获取有关电池的详细信息,使用dumpsys activity获取有关活动管理器的信息,使用dumpsys wifi获取有关Wi-Fi状态的信息,以此类推。

rubens:/ $ dumpsys battery
Current Battery Service state:
  AC powered: true
  USB powered: false
  Wireless powered: false
  Max charging current: 0
  Max charging voltage: 0
  Charge counter: 4706000
  status: 2
  health: 2
  present: true
  level: 100
  scale: 100
  voltage: 4423
  temperature: 344
  technology: Li-poly

使用说明:developer.android.com/tools/dumps…

dumpsys命令可以获取的信息非常丰富,以下是一些常见的示例:

  1. dumpsys battery:获取有关电池状态和电量的信息。
  2. dumpsys activity:提供有关活动管理器和应用程序的信息,如运行的活动、任务堆栈、进程等。
  3. dumpsys package:显示已安装应用程序的信息,包括包名、版本、权限等。
  4. dumpsys wifi:提供有关Wi-Fi连接状态和配置的信息。
  5. dumpsys bluetooth:获取有关蓝牙设备和连接状态的信息。
  6. dumpsys telephony.registry:显示与电话和移动网络相关的信息,如信号强度、SIM卡状态等。
  7. dumpsys sensor:提供有关设备上可用传感器的信息,如加速度计、陀螺仪、光线传感器等。
  8. dumpsys window:显示窗口管理器的信息,包括屏幕分辨率、显示器配置、窗口层次等。
  9. dumpsys meminfo:获取系统内存使用情况的详细信息。
  10. dumpsys cpuinfo:显示CPU使用情况的信息。
  11. gfxinfo:有关图形渲染性能和GPU使用情况的信息。

cat

cat是一个常用的命令行工具,用于在终端中查看文件内容或将多个文件合并输出。它的名称代表”concatenate”(连接),它的主要功能是将文件内容连接在一起并输出到终端。

以下是几个cat命令的示例用法:

  1. 查看文件内容:你可以使用cat命令来查看文本文件的内容。例如,如果你有一个名为example.txt的文本文件,可以运行以下命令来在终端中显示该文件的内容:

    cat example.txt
    
  2. 合并文件:cat命令还可以将多个文件的内容合并输出到一个文件中。例如,如果你有两个名为file1.txtfile2.txt的文本文件,可以使用以下命令将它们的内容合并到一个新文件merged.txt中:

    cat file1.txt file2.txt > merged.txt
    
  3. 显示行号:通过使用-n选项,你可以让cat命令在输出中显示每一行的行号。例如,运行以下命令可以显示example.txt文件的内容,并在每一行前显示行号:

    cat -n example.txt
    

    加上行号后的内容覆盖file2.txt

    cat -n example.txt > file2.txt
    
  4. 通过管道传递数据:cat命令还可以与其他命令一起使用,通过管道(|)将一个命令的输出作为另一个命令的输入。例如,以下命令将file.txt文件的内容传递给grep命令进行匹配:

    cat file.txt | grep "keyword"
    

这些只是cat命令的一些常见用法示例,它还有其他选项和功能,可以根据需要进行使用。你可以通过在终端中运行man cat命令来查看更多关于cat命令的详细信息和用法说明。

ls显示文件类型

要让ls命令显示文件类型,可以使用-F选项。-F选项会在文件名后面添加一个字符,表示文件的类型。

下面是一个示例:

ls -F

这将显示当前目录下的所有文件和文件夹,并在文件名后面添加一个字符来表示文件类型。常见的字符表示如下:

  • /表示目录
  • *表示可执行文件
  • @表示符号链接
  • |表示FIFO(命名管道)
  • =表示套接字
  • 无特殊字符表示普通文件

例如,如果当前目录中有一个名为example.txt的文本文件和一个名为myfolder的文件夹,使用ls -F命令将显示如下结果:

example.txt
myfolder/

其中,example.txt后面没有特殊字符,表示它是一个普通文件,而myfolder/后面有/字符,表示它是一个文件夹。

其中

@符号链接

符号链接(Symbolic Link),也被称为软链接(Soft Link),是一种特殊类型的文件,它是指向另一个文件或目录的引用。符号链接类似于Windows系统中的快捷方式或Mac系统中的别名。

与实际的文件或目录不同,符号链接本身只是一个指向目标文件或目录的路径,而不包含实际的数据。当你打开或访问符号链接时,系统会自动跟随链接并访问链接所指向的目标文件或目录。

使用符号链接的主要优点是它们提供了一种灵活的方式来引用文件或目录,而不需要复制或移动实际的数据。这使得你可以创建一个指向其他位置的链接,而不需要在多个位置保留副本。

在文件系统中创建符号链接的常见命令是ln -s。以下是一个创建符号链接的示例:

ln -s /path/to/target linkname

其中,/path/to/target是目标文件或目录的路径,linkname是符号链接的名称。创建成功后,可以通过linkname访问目标文件或目录。

符号链接在命令行中常用于创建快捷方式、跨文件系统引用文件、创建可移植的脚本等场景。

|表示FIFO(命名管道)和套接字文件

FIFO(First-In-First-Out)是一种特殊类型的文件,也被称为命名管道(Named Pipe)。它提供了进程间通信的一种方式,允许不相关的进程通过读取和写入FIFO来进行数据传输。

FIFO在文件系统中以文件的形式存在,但它并不是传统意义上的文件。它允许一个或多个进程以顺序的方式读取和写入数据,就像数据在管道中流动一样。一个进程可以将数据写入FIFO,并由另一个进程从FIFO读取数据,实现进程间的数据交换。

FIFO通常用于需要在不同进程之间传递数据的情况,特别是在使用命令行工具或脚本编程时。它提供了一种简单而有效的方式来实现进程间通信。

套接字(Socket)是一种在网络编程中使用的通信机制。它允许不同的计算机通过网络进行通信。在Unix-like系统中,套接字也以文件的形式存在于文件系统中。

套接字文件在文件系统中被视为一种特殊类型的文件,用于进程之间的网络通信。通过套接字,进程可以建立网络连接、发送和接收数据,以实现网络通信的功能。

查看日志利器 tail

tail命令用于显示文件的末尾内容,默认情况下,它会显示文件的最后10行。该命令在查看日志文件、实时监视文件变化或仅查看文件的最新部分时非常有用。

tail命令的基本语法如下:

tail [选项] 文件名

其中,选项是可选的,用于指定不同的行为和输出格式。常用的选项包括:

  • -n <行数>:指定要显示的行数。例如,tail -n 20 file.txt将显示文件file.txt的最后20行。
  • -f:实时跟踪文件的变化,并持续输出新增的内容。适用于查看日志文件等实时更新的文件。
  • f Follow FILE(s) by descriptor, waiting for more data to be appended
  • F Follow FILE(s) by filename, waiting for more data, and retrying

f和F的不同:
tail -F命令会在文件重新出现时自动重新打开,即使文件被删除或重命名后再次创建,或者文件被移动到另一个位置。这样,即使你在使用tail -F命令时修改了文件,它也会继续监视并正确显示更新的内容。

如果tail -f没有实时更新文件内容,很可能是你的文件修改后重新创建了同名文件,而tail -f不会尝试监控新创建的文件,这时候改用tail -F即可。

例如,要显示文件example.txt的最后5行,可以运行以下命令:

tail -n 5 example.txt

执行该命令后,example.txt文件的最后5行内容将被显示在终端窗口上。

如果你希望实时跟踪文件的变化,可以使用tail -f命令。例如,要实时监视名为logfile.txt的日志文件,可以运行以下命令:

tail -f logfile.txt

或者

tail -F logfile.txt

执行该命令后,tail命令将不断输出logfile.txt文件新增的内容,方便你实时查看日志更新。

top

用来显示实时系统监控工具

-H Show threads

-h Usage graphs instead of text

-k Fallback sort FIELDS (default -S,-%CPU,-ETIME,-PID)

-o Show FIELDS (def PID,USER,PR,NI,VIRT,RES,SHR,S,%CPU,%MEM,TIME+,CMDLINE)

-O Add FIELDS (replacing PR,NI,VIRT,RES,SHR,S from default)

-s Sort by field number (1-X, default 9)

-b Batch mode (no tty)

-d Delay SECONDS between each cycle (default 3)

-m Maximum number of tasks to show

-n Exit after NUMBER iterations

-p Show these PIDs

-u Show these USERs

-q Quiet (no header lines)

比如:我要显示前6名的进程,并且疫苗刷新一次

top -d 1 -m 6

watch

watch是一个命令行实用程序,用于周期性地运行指定的命令,并在终端上实时显示其输出。它可以帮助你监视命令的执行结果,以及随着时间的推移的变化。

watch命令的基本语法如下:

watch [options] command

其中,options是一些可选的参数,用于定制watch命令的行为,而command是要周期性运行的命令。

watch命令的默认行为是每2秒钟运行一次指定的命令,并在终端上显示其输出。它会将前一次运行结果与当前运行结果进行比较,只显示发生变化的部分。

以下是一些常用的watch命令选项:

  • -n <秒数>:指定刷新间隔,即运行命令的时间间隔。
  • -d:高亮显示发生变化的部分。
  • -t:在每行的顶部显示当前时间。
  • -c:清除屏幕并在每次刷新时显示命令的输出。
  • -b:以批处理模式运行watch,将输出发送到标准输出而不是交互式界面。

以下是一个示例,演示如何使用watch命令每隔1秒钟监视系统的负载情况:

watch -n 1 uptime

上述命令将每秒运行一次uptime命令,并在终端上实时显示系统的负载情况。你可以根据需要替换uptime命令为其他命令,以监视不同的系统信息或进程活动。

awk

可以看这篇:juejin.cn/post/684516…