Linux是一种免费使用和自由传播的类UNIX操作系统,继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux有上百种不同的发行版,如基于社区开发的Debian、Arch Linux,和基于商业开发的Red Hat Enterprise Linux、SUSE、Oracle Linux等。
相关阅读:macOS终端常用指令大全&疑难解析
Linux常用命令大全:
1 目录结构
在Linux或Unix操作系统中,所有的文件和目录都被组织成以一个根节点开始的倒置的树状结构。/表示根目录,.(或./)代表当前目录,..(或../)代表上一层目录。目录或文件名以.开始表示是隐藏目录或文件(如.bashrc)。
1.1 系统目录
根目录下各目录与系统文件的详解如下所示——
系统启动必须:
/boot:存放的启动Linux时使用的内核文件,包括连接文件以及镜像文件。/etc:存放所有的系统需要的配置文件和子目录列表,更改目录下的文件可能会导致系统不能启动。/etc/rc.d:系统服务程序/etc/sysconfig:系统配置/etc/X11:X11配置/etc/cron.d:cron服务配置
/lib:存放基本代码库(如C++库),其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。/sys:(Linux2.6内核重大变化)该目录下安装了2.6内核中新出现的文件系统sysfs,其集成了以下3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中。
指令集合:
/bin:存放最常用的程序和指令。/sbin:只有系统管理员能使用的程序和指令。
外部文件管理:
/dev:存放Linux的外部设备(Device)。注意在Linux中访问设备和访问文件的方式是相同的。/media:Linux系统会自动识别一些设备,例如U盘、光驱等,识别后linux会将设备放到该目录下。/mnt:临时挂载其他文件系统。可以将光驱挂载在该目录下,然后进入该目录即可查看光驱中的内容。
临时文件:
/run:临时文件系统,存储系统启动以来的信息。当系统重启时,该目录下的文件会被删掉或清除。如果你的系统上有/var/run目录,应让其指向run。/lost+found:一般情况下为空,系统非法关机后,此处会存放一些文件。/tmp:用于存放一些临时文件。
账户:
/root:系统管理员的用户主目录。/home:用户的主目录,以用户的账号命名。/usr:用户的应用程序和文件都放在该目录下,类似于Windows中的Program Files目录。/usr/bin:系统用户使用的应用程序与指令。/usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。/usr/src:内核源代码默认放置目录。/usr/include:C/C++文件/usr/lib:应用程序库文件/usr/local:用户自行安装的程序/usr/share:共享文档及文件/usr/X11R6:图形界面系统
运行过程中使用:
/var:数据目录,存放经常修改的数据。/var/cache:应用程序产生的缓存文件/var/lib:应用程序产生的数据文件/var/log:系统及程序日志文件/var/run:应用程序的进程PID文件/var/spool:数据文件缓冲池/var/www:Web服务默认网页存放目录
/proc:管理内存空间,属于虚拟目录(该目录中的内容不在硬盘上而是在内存里),是系统内存的映射。可直接访问该目录来获取系统信息,亦可直接修改其中文件。
扩展:
/opt:默认为空,安装的额外软件会放在该目录下。/srv:存放服务启动后需要提取的数据(不用服务器即为空)
1.2 关键目录
以下目录对进行特权升级/执行后期开发有一定启发作用:
| 路径 | 描述 |
|---|---|
/etc/passwd |
包含了本地Linux的用户。 |
/etc/shadow |
包含了哈希过的本地账户密码。 |
/etc/group |
包含了本地账户分组。 |
/etc/init.d/ |
包含了服务网初始化脚本–具体都安装了些啥应该值得一瞧。 |
/etc/hostname |
系统的hostname。 |
/etc/network/interfaces |
网络接口。 |
/etc/resolv.conf |
系统的DNS服务。 |
/etc/profile |
系统的环境变量。 |
~/.ssh/ |
SSH密钥。 |
~/.bash_history |
用户的bash历史日志。 |
/var/log/ |
Linux系统的日志文件一般就被存放在这里。 |
/var/adm/ |
UNIX系统的日志文件一般就被存在在这里。 |
/var/log/apache2/access.log /var/log/httpd/access.log |
Apache访问日志文件通常的存在路径。 |
/etc/fstab |
挂载的文件系统。 |
2 渗透测试命令
WIP - Linux 机器的渗透测试命令备忘表
2.1 网络配置与端口枚举
| 命令 | 描述 |
|---|---|
netstat -tulpn |
显示对应了进程ID(PID)的网络端口 |
watch ss -stplu |
通过套接字实时观察TCP、UDP端口 |
lsof -i |
显示确认了的连接 |
macchanger -m MACADDR INTR |
修改MAC地址 |
ifconfig eth0 192.168.2.1/24 |
设置ID地址 |
ifconfig eth0:1 192.168.2.3/24 |
向现有的网络接口添加IP地址 |
ifconfig eth0 hw ether MACADDR |
使用ifconfig修改MAC地址。 |
ifconfig eth0 mtu 1500 |
使用ifconfig修改MTU的大小(将1500改为想要的MTU) |
dig -x 192.168.1.1 |
对IP地址进行反向查找 |
host 192.168.1.1 |
在一个IP地址上进行反向查找,适用于未安装dig的情况 |
dig @192.168.2.2 domain.com -t AXFR |
使用dig执行一次DNS区域传输 |
host -l domain.com nameserver |
使用host执行一次DNS区域传输 |
nbtstat -A x.x.x.x |
获取IP地址对应的域名 |
ip addr add 192.168.2.22/24 dev eth0 |
添加一个隐藏的IP地址,在执行ifconfig命令时不会显示这个IP地址 |
tcpkill -9 host google.com |
阻止从主机访问google.com |
echo "1" > /proc/sys/net/ipv4/ip_forward |
启用IP转发,将Linux盒子变成一个路由器——由此方便通过这个盒子来进行路由流量的控制 |
echo "8.8.8.8" > /etc/resolv.conf |
使用Google的DNS |
2.2 系统信息命令
适用于本地的枚举检查。
| 命令 | 描述 |
|---|---|
whoami |
显示当前已登录用户 |
id |
向用户显示当前已登录的用户和组 |
last |
显示最后一次登陆的用户 |
mount |
显示已挂载的驱动 |
df -h |
用人类可读的输出显示磁盘使用情况 |
echo "user:passwd" | chpasswd |
用一行命令重置密码 |
getent passwd |
列出Linux上的用户 |
strings /usr/local/bin/blah |
显示非文本文件(例如二进制文件)的内容 |
uname -ar |
显示运行中的内核版本 |
PATH=$PATH:/my/new-path |
添加一个新的路径,方便进行本地文件系统(FS)操作 |
history |
显示用户在之前执行的bash脚本历史记录,还有敲入的命令 |
2.3 基于Redhat/CentOS/RPM的发行版
| 命令 | 描述 |
|---|---|
cat /etc/redhat-release |
显示Redhat/CentOS版本号 |
rpm -qa |
在基于RPM的Linux上列出所有已经安装上的RPM包 |
rpm -q –changelog openvpn |
检查已安装的RPM是否针对CVE打了补丁,可以用grep命令过滤出跟CVE有关的输出。 |
2.4 YUM命令
基于RPM的系统使用了包管理器,可以用这些命令获取到有关已安装包或者其它工具的有用信息。
| 命令 | 描述 |
|---|---|
yum update |
使用YUM更新所有的RPM包,也会显示出哪些已经过时了 |
yum update httpd |
更新单独的包,在此例中是HTTPD(Apache) |
yum install package |
使用YUM安装一个包 |
yum –exclude=package kernel* update |
在使用YUM时将一个包排除在外不更新 |
yum remove package |
使用YUM删除包 |
yum erase package |
使用YUM删除包 |
yum list package |
列出有关YUM包的信息 |
yum provides httpd |
显示一个包的用途,例如Apache HTTPD Server |
yum info httpd |
显示包的信息、架构、版本等 |
yum localinstall blah.rpm |
使用YUM来安装本地RPM,从资源库进行安装 |
yum deplist package |
显示包的提供方信息 |
yum list installed | more |
列出所有已安装的包 |
yum grouplist | more |
显示所有的YUM分组 |
yum groupinstall 'Development Tools' |
安装YUM分组 |
2.5 基于Debian/Ubuntu /.deb的发行版
| 命令 | 描述 |
|---|---|
cat /etc/debian_version |
显示Debian版本号 |
cat /etc/*-release |
显示Ubuntu版本号 |
dpkg -l |
在基于Debian/.deb的Linux发行版上列出所有已安装的包 |
2.6 用户管理
| 命令 | 描述 |
|---|---|
useradd new-user |
创建一个新的Linux用户。 |
passwd username |
重置Linux用户密码,如果你是root用户,只要输入密码就行了。 |
deluser username |
删除一个Linux用户。 |
2.7 压缩与解压缩命令
在Linux上解析不同的压缩包(tar、zip、gzip、bzip2等格式),以及其它一些在压缩包中进行搜索等操作的小技巧。
| 命令 | 描述 |
|---|---|
unzip archive.zip |
提取zip包中的文件 |
zipgrep *.txt archive.zip |
在一个zip压缩包中搜索 |
tar xf archive.tar |
提取tar包中的文件 |
tar xvzf archive.tar.gz |
提取tar.gz包中的文件 |
tar xjf archive.tar.bz2 |
提取tar.bz2包中的文件 |
tar ztvf file.tar.gz | grep blah |
在一个tar.gz文件中搜索 |
gzip -d archive.gz |
提取gzip中的文件 |
zcat archive.gz |
以不解压缩的方式读取一个gz文件 |
zless archive.gz |
用较少的命令实现对.gz压缩包相同的功能 |
zgrep 'blah' /var/log/maillog*.gz |
对.gz压缩包里的内容执行搜索,例如被压缩过的日志文件 |
vim file.txt.gz |
使用vim读取.txt.gz文件 |
upx -9 -o output.exe input.exe |
使用UPX压缩.exe文件 |
zip -r file.zip /dir/* |
创建一个.zip文件 |
tar cf archive.tar files |
创建一个tar文件 |
tar czf archive.tar.gz files |
创建一个tar.gz文件 |
tar cjf archive.tar.bz2 files |
创建一个tar.bz2文件 |
gzip file |
创建一个.gz文件 |
2.8 文件命令
| 命令 | 描述 |
|---|---|
df -h blah |
显示文件/目录的大小 |
diff file1 file2 |
比对/显示两个文件之间的差别 |
md5sum file |
生成MD5摘要 |
md5sum -c blah.iso.md5 |
检查文件的MD5摘要(此处假设文件和.md5处在相同的路径下) |
file blah |
查找出文件的类型,并显示文件是32还是64位 |
dos2unix |
将Windows的行结束符转为Unix/Linux的 |
base64 < input-file > output-file |
对输入文件进行Base64编码,然后该Base64编码文件 |
base64 -d < input-file > output-file |
对输入文件进行Base64解码,然后该Base64解码文件 |
touch -r ref-file new-file |
使用来自于引用文件的时间戳数据创建一个新文件(-r用于简单创建) |
rm -rf |
不显示确认提示就删除文件和目录 |
2.9 其他命令
| 命令 | 描述 |
|---|---|
init 6 |
从命令行重启Linux |
gcc -o output.c input.c |
编译C代码 |
gcc -m32 -o output.c input.c |
交叉编译C代码,在64位Linux上编译出32位的二进制文件 |
unset HISTORYFILE |
关闭bash历史日志记录功能 |
rdesktop X.X.X.X |
从Linux连接到RDP服务器 |
kill -9 $$ |
关闭当前会话 |
chown user:group blah |
修改文件或目录的所有者 |
chown -R user:group blah |
修改文件或目录,以及目录下文件/目录的拥有者——递归执行chown |
chmod 600 file |
修改文件/目录的权限设定(详见文件系统权限) |
3 文件系统权限
Linux文件系统权限通过符号表示法和八进制数值表示法共同标识。符号表示法由9个字符组成,按所有者(Owner)- 所属组(Group)-其他用户(Others)划分为三组,每组 3 个字符依次对应读(r)、写(w)、执行(x)权限,若某权限未开启则用“-”替代;八进制数值表示法通过累加每组权限对应数值(r=4、w=2、x=1)得到,用于快速设置权限。
我将以清晰的Markdown表格格式呈现Linux文件系统权限内容,表格前会先以准确正式的语言说明权限表示法,确保信息结构清晰、易于查阅。
| 八进制取值 | 意义 |
|---|---|
| 777 | rwxrwxrwx:所有用户(所有者、所属组、其他用户)均具备读、写、执行权限,无权限限制。 |
| 755 | rwxr-xr-x:所有者拥有读、写、执行权限,所属组与其他用户仅拥有读、执行权限。 |
| 700 | rwx------:仅所有者拥有读、写、执行权限,所属组与其他用户无任何权限。 |
| 666 | rw-rw-rw-:所有用户均拥有读、写权限,无执行权限。 |
| 644 | rw-r--r--:所有者拥有读、写权限,所属组与其他用户仅拥有读权限。 |
| 600 | rw-------:仅所有者拥有读、写权限,所属组与其他用户无任何权限。 |
《Linux系统使用指南&渗透测试命令》有1条评论