- 1. 前言
- 2.1. Linux 简介与安装
- 2.2. Linux 目录结构
- 2.3. Linux 命令
- 3.1. Linux 用户管理
- 3.2. Linux 权限规划 Authority Division:ACL 权限控制
- 4.2. Linux 计划任务 - 例行性工作排程
- 4.3. Linux 程序管理和 SELinux 初探
- 4.7. Linux 防火墙
- 5.1. Linux 网络基础
- 5.3. FTP:Vsftp
- 6.4. 虚拟化概述
- 6.5. Docker
- 7.1. GCC
- 7.5. 使用 you-get 和 youtube-dl 下载 YouTube 视频列表
- 7.6. MPlayer
- 7.7. google-chrome & chromium
- 7.8. Scrot:截图工具
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
2.3. Linux 命令
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
d | rwxr-xr-x | 3 | zrg | zrg | 4.0K | Apr 21 16:24 | 练手项目 |
---|---|---|---|---|---|---|---|
文件类型。 | 文件权限。 | 对于普通文件:链接数 | 用户名 | 组名 | 文件大小,单位:字节 | 最后修改日期时间 | 文件名 |
d 目录文件 | 从左往右分别代表所有者权限、组用户权限和其他用户权限 | 对于目录文件:第一级子目录数 | |||||
- 普通文件 | r 可读 | ||||||
l 链接文件 | w 可写 | ||||||
c 字符型设备文件 | x 可执行 | ||||||
b 块设备文件 | - 无执行权限 | ||||||
n 网络设备文件 | |||||||
s 套接字文件 |
- 默认文件权限
umask 命令用来设置所创建文件和目录的默认权限。
2.3.3.2. 共享文件(Share File)
Linux 为每个文件和目录存储了 3 个额外的信息位。
- 设置用户 ID(SUID)
- 设置组 ID(GID)
- 粘着位:进程结束后文件还驻留(粘着)在内存中。
二进制值 | 八进制值 | 描述 |
---|---|---|
000 | 0 | 所有位都清零 |
001 | 1 | 粘着位置位 |
010 | 2 | SGID 位置位 |
011 | 3 | SGID 位和粘着位都置位 |
100 | 4 | SUID 位置位 |
101 | 5 | SUID 位和粘着位都置位 |
110 | 6 | SUID 位和 SGID 都置位 |
111 | 7 | 所有位都置位 |
创建一个共享目录
$ 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.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
系统运行级别
级别 | 描述 |
---|---|
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
节 | 描述 |
---|---|
Name | 显示命令和一段简短的描述 |
Synopsis | 命令的语法 |
Configuration | 命令配置信息 |
Description | 命令的一般性描述 |
Options | 命令选项描述 |
Exit Status | 命令的推出状态指示 |
Return Value | 命令的返回值 |
Errors | 命令的错误信息 |
Environment | 描述所使用的环境变量 |
Files | 命令用到的文件 |
Versions | 命令的版本信息 |
Conforming To | 命令所遵从的标准 |
Notes | 其他有帮助的资料 |
Bugs | 提供提交 Bug 的途径 |
Example | 展示命令的用法 |
Authors | 命令开发人员的信息 |
Copyright | 命令源代码的版权状况 |
See Also | 与该命令类似的其他命令 |
区域号 | 所涵盖的内容 |
---|---|
1 | 可执行程序或 shell 命令 |
2 | 系统调用 |
3 | 库调用 |
4 | 特殊文件 |
5 | 文件格式与约定 |
6 | 游戏 |
7 | 概览、约定及杂项 |
8 | 超级用户和系统管理员命令 |
9 | 内核例程 |
2.3.8.2. 解决问题思路
- 出现问题,先保护现场。(问题一种是已正确运行的系统出问题,另一种是新的操作或配置造成了问题)
- 当怀疑有黑客入侵或病毒的情况,马上做日志备份。
- 检查相关日志。
- 对于新的操作或配置造成的问题,最好是养成定期备份重要文件的习惯。
- 使用网络
- 使用搜索命令:find,locate,whereis,…
2.3.9. 扩展阅读:通过历史记录简化操作
!! | 重复前一个命令 |
!字符 | 重复前一个以“字符”开头的命令 |
!num | 按照历史记录的序号执行命令 |
!?abc | 重复之前包含 abc 的命令 |
!-n | 重复 n 个命令之前的那个命令 |
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论