CTF-All-In-One/doc/1.3_linux_basic.md
2017-08-06 14:52:07 +08:00

4.5 KiB
Raw Blame History

Linux 基础

常用基础命令

ls                  用来显示目标列表

cd [path]           用来切换工作目录

pwd                 以绝对路径的方式显示用户当前工作目录

man [command]       查看Linux中的指令帮助、配置文件帮助和编程帮助等信息

apropos [whatever]  在一些特定的包含系统命令的简短描述的数据库文件里查找关键字

cat [file]          连接文件并打印到标准输出设备上

less [file]         允许用户向前或向后浏览文字档案的内容

mv [file1] [file2]  用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中

cp [file1] [file2]  用来将一个或多个源文件或者目录复制到指定的目的文件或目录

rm [file]           可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉

nano / vim / emacs  字符终端的文本编辑器
管道命令符 "|"       将一个命令的标准输出作为另一个命令的标准输入

进程管理

  • top
  • 可以实时动态地查看系统的整体运行情况。
  • ps
  • 用于报告当前系统的进程状态。可以搭配 kill 指令随时中断、删除不必要的程序。
  • 查看某进程的状态:$ ps -aux | grep [file]其中返回内容最左边的数字为进程号PID
  • kill
  • 用来删除执行中的程序或工作。
  • 删除进程某 PID 指定的进程:$ kill [PID]

权限设置

 Linux 中,文件或目录权限的控制分别以读取、写入、执行 3 种一般权限来区分,另有 3 种特殊权限可供运用。

使用 ls -l [file] 来查看某文件或目录的信息:

$ ls -l /
lrwxrwxrwx   1 root root     7 Jun 21 22:44 bin -> usr/bin
drwxr-xr-x   4 root root  4096 Jul 28 08:48 boot
-rw-r--r--   1 root root 18561 Apr  2 22:48 desktopfs-pkgs.txt

第一栏从第二个字母开始就是权限字符串,权限表示三个为一组,依次是所有者权限、组权限、其他人权限。每组的顺序均为 rwx,如果有相应权限,则表示成相应字母,如果不具有相应权限,则用 - 表示。

  • r:读取权限,数字代号为 “4”
  • w:写入权限,数字代号为 “2”
  • x:执行或切换权限,数字代号为 “1”

通过第一栏的第一个字母可知,第一行是一个链接文件 l),第二行是个目录(d),第三行是个普通文件(-)。

用户可以使用 chmod 指令去变更文件与目录的权限。权限范围被指定为所有者(u)、所属组(g)、其他人(o)和所有人(a)。

  • -R递归处理将指令目录下的所有文件及子目录一并处理
  • <权限范围>+<权限设置>:开启权限范围的文件或目录的该选项权限设置
  • $ chmod a+r [file]:赋予所有用户读取权限
  • <权限范围>-<权限设置>:关闭权限范围的文件或目录的该选项权限设置
  • $ chmod u-w [file]:取消所有者写入权限
  • <权限范围>=<权限设置>:指定权限范围的文件或目录的该选项权限设置;
  • $ chmod g=x [file]:指定组权限为可执行
  • $ chmod o=rwx [file]:制定其他人权限为可读、可写和可执行

字节序

目前计算机中采用两种字节存储机制大端Big-endian和小端Little-endian

MSB (Most Significan Bit/Byte):最重要的位或最重要的字节。

LSB (Least Significan Bit/Byte):最不重要的位或最不重要的字节。

Big-endian 规定 MSB 在存储时放在低地址在传输时放在流的开始LSB 存储时放在高地址在传输时放在流的末尾。Little-endian 则相反。常见的 Intel 处理器使用 Little-endian而 PowerPC 系列处理器则使用 Big-endian另外 TCP/IP 协议和 Java 虚拟机的字节序也是 Big-endian。

例如十六进制整数 0x12345678 存入以 1000H 开始的内存中:

输入输出

  • 使用命令的输出作为可执行文件的输入参数
  • $ ./vulnerable 'your_command_here'
  • $ ./vulnerable $(your_command_here)
  • 使用命令作为输入
  • $ your_command_here | ./vulnerable
  • 将命令行输出写入文件
  • $ your_command_here > filename
  • 使用文件作为输入
  • $ ./vulnerable < filename