返回介绍

2.3. Linux 命令

发布于 2024-05-10 12:56:23 字数 15017 浏览 0 评论 0 收藏 0

2.3.1. Linux 常用命令

// 获取帮助的命令
info, help, man, type
// 日期时间
date, hwclock, cal, uptime
// 输出、查看命令
echo, cat, head, tail, less, more
// 查看硬件信息
lspci, lsusb, lsmod
// 关机、重启、注销
shutdown, reboot, poweroff, init, logout
// 归档、压缩
zip, unzip, gzip, tar
// 查找
find,locate,which,where,wc
// 查询用户
w、who、last、lastlog
// 用户交流
write、mesg、wall
// 用户邮箱
mail

2.3.2. Linux 常见网络命令

网络参数设定命令:ifconfig,ifup,ifdown,route,ip,iwlist,iwconfig,dhclient
网络检错与观察指令:wall(发送广播信息),ping,traceroute(追踪数据包到主机间的路径),netstat,host,nslookup
连接指令:telnet,ftp,lftp,sftp
文字浏览器:links
下载器:wget,axel
封包撷取:tcpdump,wireshark,nc,netcat,write
邮件发送:mail
2.3.2.1. netstat 命令
# 查看主机对外开放端口
$ netstat -ntlp
# 查看本机监听的端口
$ netstat -tlun
# 查看本机所有的网络连接
$ netstat -ano
# 查看本机路由表
$ netstat -rn
2.3.2.2. nc 命令

介绍

netcat 是网络工具中的瑞士军刀,它能通过 TCP 和 UDP 在网络中读写数据。通过与其他工具结合和重定向。 netcat 所做的就是在两台电脑之间建立链接并返回两个数据流。你能建立一个服务器,传输文件,与朋友聊天,传输流媒体或者用它作为其它协议的独立客户端。

安装

// Redhat/CentOS/Fedora
$ yum install nc
// Debian/Ubuntu
$ sudo apt-get install netcat

常见使用

端口扫描经常被系统管理员和黑客用来发现在一些机器上开放的端口,帮助他们识别系统中的漏洞。
$ nc -z -v -n 172.31.100.7 21-25
可以运行在 TCP 或者 UDP 模式,默认是 TCP,-u 参数调整为 udp.
z 参数告诉 netcat 使用 0 IO,连接成功后立即关闭连接, 不进行数据交换(谢谢 @jxing 指点)
v 参数指使用冗余选项(译者注:即详细输出)
n 参数告诉 netcat 不要使用 DNS 反向查询 IP 地址的域名
Banner 是一个文本,Banner 是一个你连接的服务发送给你的文本信息。
一旦你发现开放的端口,你可以容易的使用 netcat 连接服务抓取他们的 banner。
$ nc -v 172.31.100.7 21

聊天工具

// Server
$ nc -l 1234
// Client
$ nc 172.168.100.7 1234

文件传输

// Server > Client
$ nc -l 1234 > file.txt
$ nc 172.168.100.7 1234 <file.txt

目录传输

// Server > Client
$ tar -cvf - dir_name | nc -l 1234
$ nc -n 172.168.100.7 1234 | tar -xvf -
这里在 A 服务器上,我们创建一个 tar 归档包并且通过-在控制台重定向它,然后使用管道,重定向给 netcat,netcat 可以通过网络发送它。
在客户端我们下载该压缩包通过 netcat 管道然后打开文件。
如果想要节省带宽传输压缩包,我们可以使用 bzip2 或者其他工具压缩。
// Server
$ tar -cvf – dir_name| bzip2 -z | nc -l 1234
// Client
$ nc -n 172.31.100.7 1234 | bzip2 -d |tar -xvf -

加密网络传输数据

// Server
$ nc localhost 1234 | mcrypt –flush –bare -F -q -d -m ecb > file.txt
// Client
$ mcrypt –flush –bare -F -q -m ecb < file.txt | nc -l 1234

流视频

// Server
$ cat video.avi | nc -l 1234
从一个视频文件中读入并重定向输出到 netcat 客户端
// Client
$ nc 172.31.100.7 1234 | mplayer -vo x11 -cache 3000 -
从 socket 中读入数据并重定向到 mplayer。

克隆一个设备

已经安装配置一台 Linux 机器并且需要重复同样的操作对其他的机器,而你不想在重复配置一遍。
假如你的系统在磁盘/dev/sda 上:
// Server
$ dd if=/dev/sda | nc -l 1234
// Client
$ nc -n 172.31.100.7 1567 | dd of=/dev/sda
dd 是一个从磁盘读取原始数据的工具,我通过 netcat 服务器重定向它的输出流到其他机器并且写入到磁盘中,它会随着分区表拷贝所有的信息。
但是如果我们已经做过分区并且只需要克隆 root 分区,我们可以根据我们系统 root 分区的位置,更改 sda 为 sda1,sda2.等等。

参考资料

https://blog.csdn.net/zhangxiao93/article/details/52705642   

2.3.3. Linux 文件权限(Permission)

2.3.3.1. 理解

使用文件权限符

$ ls -lh

drwxr-xr-x 3 zrg zrg 4.0K Apr 21 16:24 练手项目 -rw-r–r– 1 zrg zrg 2.5M Apr 21 11:51 练手项目.rar

Table 8: 解释
drwxr-xr-x3zrgzrg4.0KApr 21 16:24练手项目
文件类型。文件权限。对于普通文件:链接数用户名组名文件大小,单位:字节最后修改日期时间文件名
d 目录文件从左往右分别代表所有者权限、组用户权限和其他用户权限对于目录文件:第一级子目录数     
- 普通文件r 可读      
l 链接文件w 可写      
c 字符型设备文件x 可执行      
b 块设备文件- 无执行权限      
n 网络设备文件       
s 套接字文件       
  1. 默认文件权限
    umask 命令用来设置所创建文件和目录的默认权限。
2.3.3.2. 共享文件(Share File)

Linux 为每个文件和目录存储了 3 个额外的信息位。

  • 设置用户 ID(SUID)
  • 设置组 ID(GID)
  • 粘着位:进程结束后文件还驻留(粘着)在内存中。
Table 9: chmod SUID、SGID 和粘着位的八进制值
二进制值八进制值描述
0000所有位都清零
0011粘着位置位
0102SGID 位置位
0113SGID 位和粘着位都置位
1004SUID 位置位
1015SUID 位和粘着位都置位
1106SUID 位和 SGID 都置位
1117所有位都置位

创建一个共享目录

$ mkdir testdir
$ chgrp shared testdir
$ chmod g+s testdir
$ umask 002
$ cd testdir
$ touch testfile

2.3.4. Linux 文件搜索

2.3.4.1. find 命令

find 命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

根据文件名查找

格式:find [搜索范围][匹配条件]
// 默认在当前目录下搜索
$ find -name "MyCProgram.c"
// 忽略大小写
$ find -iname "MyCProgram.c"
// 查找以 my 开头,后面包含三个字符的文件
$ find -name my??? 
// 深度查找
// 在 root 目录及其子目录下查找 passwd 文件。
$ sudo find / -maxdepth 2 -name passwd
// 在第二层子目录和第四层子目录之间查找 passwd 文件。
$ sudo find / -mindepth 3 -maxdepth 5 -name passwd
// 找到 home 目录及子目录下所有的空文件(0 字节文件) 
$ find ~/ -empty
// 列出你 home 目录里的空文件。
$ find ~/ -maxdepth 1 -empty
// 列出 home 目录下的非隐藏空文件。
$ find ~/ -maxdepth 1 -empty -not -name ".*"
// 相反匹配
// 显示所有的名字不是 MyCProgram.c 的文件或者目录。
$ find -maxdepth 1 -not -iname "MyCProgram.c"
// 在查找到的文件上执行命令
// 在查找到名为“MyCProgram.c”的文件上计算 MD5 验证和。
$ find -iname "MyCProgram.c" -exec md5sum {} \;
// 在 /etc 目录下查找 inittab 文件并显示其详细属性
$ sudo find /etc -name initab -exec ls -l {} \;
// 注意:{} 将会被当前文件名取代。
-exec/-ok <command> {} \; 对搜索结果执行操作,使用 -ok 会询问是否确认。

文件大小查找

格式:+n 大于;-n 小于;n 等于
// 在 root 目录下查找大于 100MB 的文件
$ sudo find / -size +204800
// 注意:在 Linux 里面,1 数据块 = 512 byte = 0.5 KB,100 MB = 102400 KB = 204800 数据块
// 在 /etc 目录下查找大于 80MB 小于 100MB 的文件
$ sudo find /etc -size +163840 -a size -204800
-a 表示两个条件同时满足
-o 表示两个条件满足一个即可
// 列出当前目录及子目录下的 5 个最大的文件。这会需要一点时间,取决于命令需要处理的文件数量。
$ find . -type f -exec ls -s {} \; | sort -n -r | head -5
// 查找 5 个最小的文件
$ find . -type f -exec ls -s {} \; | sort -n  | head -5
// 上面的命令中,很可能你看到的只是空文件(0 字节文件)。因此,你可以使用下面的命令列出最小的文件,而不是 0 字节文件。
$ find . -not -empty -type f -exec ls -s {} \; | sort -n  | head -5
//查找并删除大于 100M 的 *.zip 文件。
$ find / -type f -name *.zip -size +100M -exec rm -i {} \;
// 注意:{} 和 \ 之间是有空格的!

根据文件变动情况查找

// 在/etc 目录下查找 5 分钟内被修改过属性的文件和目录
$ sudo /etc -cmin -5
-amin 访问时间 access
-cmin 文件属性 change
-mmin 文件内容 modify
// 显示所有的在 ordinary_file 之后创建修改的文件。
$ ls -lrt
$ find -newer ordinary_file

根据文件类型查找

// f 文件,d 目录,l 软链接,s socket 文件
// 查找所有的一般文件
$ find ./ -type f
// 查找所有的隐藏文件和目录
$ find ./ -type f -name ".*"
$ find ./ -type d -name ".*"

根据文件权限、所属关系查找

$ find /home -user zrg
$ find /home -group zrg
// 查到当前目录下对同组用户具有读权限的文件
$ find ./ -perm -g=r -type f -exec ls -l {} \;
// 找到对组用户具有只读权限的文件。
$find ./ -perm g=r -type f -exec ls -l {} \;  
// 找到对组用户具有只读权限的文件(使用八进制权限形式)。
$ find ./ -perm 040 -type f -exec ls -l {} \;

使用 inode 编号查找

// 任何一个文件都有一个独一无二的 inode 编号,借此我们可以区分文件。
// 使用选项 -i,可以看到文件的 inode 编号,借此可以区分这两个文件。
$ ls -i1 test*
16187429 test-file-name
16187430 test-file-name
// 使用 inode 编号来删除那些具有特殊符号的文件名。
$ find -inum 16187430 -exec rm {} \;
2.3.4.2. locate 命令

该命令建立了一个文件资料库,查找文件时直接在资料库中查找。类似 Windows 下的 Everything 工具。

// 安装:
$ sudo apt install mlocate
// 使用
$ locate init
// 注意:locate 命令不会查找 /tmp 目录下内容。
// 更新文件资料库:
$ updatedb

2.3.5. Linux 文本处理

grep,sed,awk
2.3.5.1. grep
语法格式:grep -iv [指定字符串][文件]
-i 不区分大小写
-o 正则匹配指定内容
-v 排除指定字符串
// 查找指定字符串的行并显示
$ grep 123 test.txt
// 查找匹配到的内容
$ grep -o 'engine\[\0-9a-z]*\]'
// 打印没有匹配到的行
$ grep -v ^# config.txt
2.3.5.2. sed

一款几乎包括所有 UNIX 体系的轻量级流编辑器,主要用来进行数据的提取、替换、删除、新增。

// 查看文件的第 2 行
$ sed -n '2p' test.txt
// 删除从第 2 行到第 4 行的数据
$ sed '2,4d' test.txt
// 在第 2 行追加 hello
$ sed '2a hello' test.txt
// 在第 2 行前插入两行数据
$ sed '2i hello \
wold' test.txt
// 数据替换
$ sed '2c No such person' test.txt

字符串替换

// g 表示全文替换
$ sed 's/oldStr/newStr/g' fileName
// 将某个目录下的所有文件中的某个字符进行替换成新字符串,格式如下:
$ sed -i 's/oldStr/newStr/g' `grep oldStr -rl /path`
2.3.5.3. awk

对文件内容进行统计,适合处理格式化数据,比如表格

// 打印第一切片和第四切片内容
$ awk '{print $1,$4}' netstat.txt
// 打印以逗号为分隔符分隔,并打印第二列
$ awk -F "," '{print $2}' test.txt
$ awk '$1=="tcp" && $2==1 {print $0}' netstat.txt
$ grep 'partial\[true\]' test.log |grep -o 'engine\[[0-9a-z]*\]' | awk '{enginearr[$1]++}END{for(i in enginearr)print i "\t" enginearr[i]}'

2.3.6. Linux 压缩(Compression) 和打包(Packaging)

tar.png

另外还有不常见的,但时有遇到:
.tar.xz
$ tar xpvf file.tar.xz
.tgz
$ tar zxf  name.tgz

//解压到指定目录
$ unzip name.zip -d ./dir

2.3.7. 扩展阅读:关机和重启及系统运行级别

关机/重启命令

$ sudo shutdown -r now
// 其他重启命令
halt, poweroff, init 0
$ sudo reboot
$ sudo init 6
// 注销命令
logout

系统运行级别

Table 10: 系统运行级别
级别描述
0关机,不允许设置为初始化默认值
1单用户模式
2不完全多用户,不含 NFS 服务
3完全多用户
4未分配
5图形界面
6重启,不允许设置为初始化默认值
$ cat /etc/initable
// 查看系统运行级别
$ sudo runlevel

2.3.8. 扩展阅读:解决问题 & 获取帮助

2.3.8.1. man 命令

查看在线帮助手册(an interface to the on-line reference manuals),如果不记得命令名怎么办?可以使用关键字搜索手册页。

$ man -k terminal
Table 11: Linux 手册页惯用的节名
描述
Name显示命令和一段简短的描述
Synopsis命令的语法
Configuration命令配置信息
Description命令的一般性描述
Options命令选项描述
Exit Status命令的推出状态指示
Return Value命令的返回值
Errors命令的错误信息
Environment描述所使用的环境变量
Files命令用到的文件
Versions命令的版本信息
Conforming To命令所遵从的标准
Notes其他有帮助的资料
Bugs提供提交 Bug 的途径
Example展示命令的用法
Authors命令开发人员的信息
Copyright命令源代码的版权状况
See Also与该命令类似的其他命令
Table 12: Linux 手册页的内容区域
区域号所涵盖的内容
1可执行程序或 shell 命令
2系统调用
3库调用
4特殊文件
5文件格式与约定
6游戏
7概览、约定及杂项
8超级用户和系统管理员命令
9内核例程
2.3.8.2. 解决问题思路
  1. 出现问题,先保护现场。(问题一种是已正确运行的系统出问题,另一种是新的操作或配置造成了问题)
  2. 当怀疑有黑客入侵或病毒的情况,马上做日志备份。
  3. 检查相关日志。
  4. 对于新的操作或配置造成的问题,最好是养成定期备份重要文件的习惯。
  5. 使用网络
  6. 使用搜索命令:find,locate,whereis,…

2.3.9. 扩展阅读:通过历史记录简化操作

!!重复前一个命令
!字符重复前一个以“字符”开头的命令
!num按照历史记录的序号执行命令
!?abc重复之前包含 abc 的命令
!-n重复 n 个命令之前的那个命令

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文