全网最详细的VLAN的原理和配置 - 知乎
VLAN(Virtual Local Area Network)即虚拟局域网,是将一个物理的LAN在逻辑上划分成多个广播域的通信技术。每个VLAN是一个广播域,VLAN内的主机间可以直接通信,而VLAN间则不能直接互通。这样,广播报文就被限制在一个VLAN内。
全网最详细的VLAN的原理和配置 - 知乎
VLAN(Virtual Local Area Network)即虚拟局域网,是将一个物理的LAN在逻辑上划分成多个广播域的通信技术。每个VLAN是一个广播域,VLAN内的主机间可以直接通信,而VLAN间则不能直接互通。这样,广播报文就被限制在一个VLAN内。
路由协议基础 - 华为
简介
路由迭代
路由器及路由基本原理
静态路由与动态路由
路由表和FIB表
路由协议的优先级
路由的度量
负载分担与路由备份
IP FRR
路由的收敛
缺省路由
不同路由协议的互相引入
自治系统
可变长子网掩码
全0和全1子网
路由策略
策略路由
相关链接
简介
路由(Routing)是数据通信网络中一个基本的概念。路由就是通过互联的网络把信息从源地址传输到目的地址的活动。路由发生在OSI网络参考模型中的第三层(即网络层)。我们将具有路由转发功能的设备称为广义上的路由器。
当路由器收到一个IP数据包,路由器会根据目的IP地址在设备上的路由表(Routing Table)中进行查找,找到“最匹配”的路由条目后,将数据包根据路由条目所指示的出接口或下一跳IP转发出去。路由表中装载着路由器通过各种途径获知的路由条目(Routes)。路由器可通过静态、动态等方式获取路由条目并维护自己的路由表。
较小的网络通常可以手动设置路由表(即静态方式),但较大且拥有复杂拓扑的网络可能常常变化,若要手动创建、维护路由表是不切实际的。因此,人们希望路由器可以动态的(即动态方式)按照某种协议来自动创建维护路由表以解决这个问题,从而使得网络能够近自主的适应变化,避免故障。这些协议被称为路由协议。
路由协议可以有多种分类方式,常见的分类方式如下:
按照路由协议使用的算法分:
距离矢量路由协议,例如:RIP(Routing Information Protocol)
链路状态路由协议,例如:OSPF(Open Shortest Path First)
按照路由协议作用的区域划分:
内部网关协议(Interior Gateway Protocol),在单一的自治系统中交换路由信息,例如:OSPF(Open Shortest Path First)
外部网关协议(Exterior Gateway Protocol),在不同的自治系统中交换路由信息,例如:BGP(Border Gateway Protocol)
目前常用的路由协议有:
OSPF(Open Shortest Path First)
RIP(Routing Information Protocol)
IS-IS(Intermediate System to Intermediate System)
BGP(Border Gateway Protocol)
其中,最多被使用到的路由协议为OSPF和BGP。
路由器及路由基本原理
在因特网中,网络连接设备用来控制网络流量和保证网络数据传输质量。常见的网络连接设备有集线器(Hub)、网桥(Bridge)、交换机(Switch)和路由器(Router)。这些设备的基本原理类似,下面就以路由器为例来介绍一下设备的基本原理。
路由器是一种典型的网络连接设备,用来进行路由选择和报文转发。路由器根据收到报文的目的地址选择一条合适的路径(包含一个或多个路由器的网络),然后将报文传送到下一个路由器,路径终端的路由器负责将报文送交目的主机。
路由就是报文从源端到目的端的路径。当报文从路由器到目的网段有多条路由可达时,路由器可以根据路由表中最佳路由进行转发。最佳路由的选取与发现此路由的路由协议的优先级、路由的度量有关。当多条路由的协议优先级与路由度量都相同时,可以实现负载分担,缓解网络压力;当多条路由的协议优先级与路由度量不同时,可以构成路由备份,提高网络的可靠性。
路由迭代
路由必须有直连的下一跳才能够指导转发,但是路由生成时下一跳可能不是直连的,因此需要计算出一个直连的下一跳和对应的出接口,这个过程就叫做路由迭代。BGP路由、静态路由和UNR路由的下一跳都有可能不是直连的,都需要进行路由迭代。
例如,BGP路由的下一跳一般是非直连的对端loopback地址,不能指导转发,需要进行迭代。即根据以BGP学习到的下一跳为目的地址在IP路由表中查找,当找到一条具有直连的下一跳、出接口信息的路由后(一般为一条IGP路由),将其下一跳、出接口信息填入这条BGP路由的IP路由表中并生成对应的FIB表项。
对于BGP私网路由,需要隧道进行转发,路由的下一跳一般是远端PE的Loopback地址,不能指导转发,也需要进行路由迭代,即在隧道列表中查找到达该Loopback地址的隧道,将该隧道信息填入路由表中并生成对应的FIB表项。
静态路由与动态路由
路由协议是路由器之间维护路由表的规则,用于发现路由,生成路由表,并指导报文转发。依据来源的不同,路由可以分为三类:
通过链路层协议发现的路由称为直连路由。
通过网络管理员手动配置的路由称为静态路由。
通过动态路由协议发现的路由称为动态路由。
静态路由配置方便,对系统要求低,适用于拓扑结构简单并且稳定的小型网络。缺点是不能自动适应网络拓扑的变化,需要人工干预。
动态路由协议有自己的路由算法,能够自动适应网络拓扑的变化,适用于具有一定数量三层设备的网络。缺点是配置对用户要求比较高,对系统的要求高于静态路由,并将占用一定的网络资源和系统资源。
对动态路由协议的分类可以采用以下不同标准:
根据作用范围不同,路由协议可分为:
内部网关协议IGP(Interior Gateway Protocol):在一个自治系统内部运行。常见的IGP协议包括RIP、OSPF和IS-IS。
外部网关协议EGP(Exterior Gateway Protocol):运行于不同自治系统之间。BGP是目前最常用的EGP协议。
根据使用算法不同,路由协议可分为:
距离矢量协议(Distance-Vector Protocol):包括RIP和BGP。其中,BGP也被称为路径矢量协议(Path-Vector Protocol)。
链路状态协议(Link-State Protocol):包括OSPF和IS-IS。
以上两种算法的主要区别在于发现路由和计算路由的方法不同。
2024新加坡市场程序员低投入高回报副业创意 - LinuxGuide 2024新加坡 2024新加坡LinuxGuide
2025新加坡市场程序员低投入高回报副业创意 - LinuxGuide 2025新加坡 2025新加坡LinuxGuide
2025年高级运维工程师的四大副业方向经典案例及实操步骤 - LinuxGuideLinuxGuide
基于你的技能组合(Linux、C语言、网络编程、系统编程),以下是一些边际成本低且能快速启动的副业方向,结合技术特性与商业化潜力:
案例:
• 网络调试工具:封装tcpdump/strace为交互式CLI工具(如增强版网络包分析器)
• 系统监控工具:基于eBPF开发实时资源监控工具(替代htop,支持自定义指标)
• 日志分析器:用C语言实现高性能日志过滤/统计工具(替代grep+awk组合)
变现方式:
• 开源核心功能,通过GitHub Sponsors或企业定制版收费
• 在Gumroad销售预编译二进制包(针对非技术用户)
技术栈:C + libbpf(eBPF)、ncurses(终端UI)
案例:
• IoT设备驱动:为树莓派扩展模块(如传感器、工业控制器)编写Linux内核驱动
• 性能优化:为ARM架构设备(如路由器)优化TCP/IP协议栈,减少延迟
• 旧设备兼容层:为老旧工业设备开发Linux兼容驱动(企业刚需)
变现方式:
• 通过Upwork接单(硬件厂商常外包驱动开发)
• 在Tindie(硬件极客平台)销售配套固件
案例:
• 自定义负载均衡器:基于epoll实现轻量级反向代理(对标Nginx但更轻量)
• 游戏服务器框架:用C语言开发低延迟UDP通信库(适用于实时对战游戏)
• 金融交易中间件:优化FIX协议实现,用于高频交易场景
变现方式:
• 提供商业许可证(如“个人免费,企业收费”)
• 在AWS Marketplace上架付费AMI镜像(预装优化中间件)
案例:
• 漏洞利用POC:编写CVE漏洞验证工具(售卖给安全团队)
• Rootkit检测工具:基于Linux内核模块开发隐蔽后门扫描器
• 网络蜜罐:模拟脆弱服务诱捕攻击者,记录攻击行为
变现方式:
• 在HackerOne等平台提供私有化部署版本
• 通过Patreon订阅发布高级攻击技术分析报告
案例:
• Linux性能调优工具包:集成perf、ftrace等工具的可视化界面
• 协议解析库:开源基础版,销售协议模糊测试(Fuzzing)插件
• POSIX兼容层:为嵌入式RTOS实现Linux API兼容层(如兼容pthreads)
变现模式:
• Open Core模式(核心功能开源,企业功能收费)
• 提供商业技术支持合同(按小时计费)
案例:
• 《Linux系统编程黑魔法》电子书:揭秘/proc调优、内存屏障等高级技巧
• GDB高级调试实战课程:演示如何用C语言调试内核死锁
• 付费技术咨询:在Codementor平台提供1对1 Linux内核问题指导
工具链: • 用Pandoc将Markdown笔记转为PDF/EPUB • 通过Leanpub或自建Hugo站点销售
案例: • 批量部署工具:用C语言实现SSH集群管理工具(替代Ansible部分功能) • 日志压缩传输工具:基于zstd算法开发高性能日志收集器 • 内核热补丁工具:在不重启系统的前提下替换内核模块
变现方式: • 在运维社区(如Server Fault)提供付费支持 • 为企业提供定制化开发服务
案例: • MQTT协议栈优化:为物联网网关优化消息吞吐量 • 边缘AI推理框架:用C语言实现TensorFlow Lite替代方案 • 轻量级容器运行时:基于runc开发低内存占用的容器引擎
变现方式: • 与硬件厂商分成(每预装一份软件收取授权费) • 在Balena等边缘计算平台发布付费应用
执行策略
快速验证:用2周时间开发一个最小可行产品(如netstat增强版工具),发布到GitHub和Hacker News测试反馈
精准定价:• 个人开发者:$9-$49/许可证
• 企业客户:$500+/定制需求
自动化交付:• 用Stripe集成自动发放许可证密钥• 通过GitHub Actions自动构建多平台二进制包
技术营销:• 在Reddit的r/linux_programming发技术解析文章引流 • 用C语言为开源项目(如Redis)提交PR,增加技术背书
避坑指南
避免过度工程化:优先用静态链接减少依赖(如musl libc编译)
注意GPL传染性:若用GPL库开发,需明确许可证对商业化的影响
聚焦利基市场:例如专攻工业控制系统(ICS)的Linux兼容层,而非通用领域
你的技能在底层开发领域有极高壁垒,建议从开发工具+开源组合拳切入,既能建立技术影响力,又能通过企业服务实现高溢价变现。
Linux常用命令之信息显示
本篇继续分享Linux中常用命令。主要分享Linux系统的信息显示和文件搜索相关的命令。
Linux常用命令之信息显示,掌握关键指令提升效率。详细解析系统信息查看方法,适合初学者与进阶用户。Linux常用命令 信息显示, Linux系统信息显示命令, Linux常用命令大全, Linux文件搜索命令, Linux uname 命令详解, Linux 查看系统信息命令, Linux 命令行信息显示, Linux 系统命令教程, Linux 常用命令之信息查看, Linux 命令行技巧
uname命令——显示系统信息
选项:
-a显示系统所有相关的信息-m显示计算机硬件架构-n显示主机名称-r显示内核发行版本号-s显示内核名称-v显示内核版本-o显示操作系统名称
常用操作:
[root@localhost ~]# uname -a //显示系统所有相关的信息Linux localhost.localdomain 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux[root@localhost ~]# uname -r //显示内核发行版本3.10.0-1160.el7.x86_64[root@localhost ~]# uname -v#1 SMP Mon Oct 19 16:18:59 UTC 2020
hostname命令——显示或设置系统的主机名
相关文件:
/etc/hosts :配置域名的文件
/etc/hostname :centos7修改主机名的文件
/etc/sysconfig/network :centos6修改主机名的文件
常用操作:
[root@localhost ~]# hostname liyongbin //临时设置文件名,重启后失效[root@localhost ~]# hostname //查看主机名liyongbin[root@localhost ~]# hostnamectl set-hostname rudy //永久修改文件名,重启不失效,也可以直接修改/etc/hostname文件[root@localhost ~]# hostname rudy[root@localhost ~]# hostname -I //显示主机的所有IP地址,不依赖DNS解析,有多少块网卡就有多少个IP地址10.13.2.13
dmesg命令——系统启动异常诊断
dmesg用于显示内核环形缓冲区(kernel-ring buffer)的内容。保存在/var/log目录下
[root@localhost ~]# dmesg |grep -i error //查看系统启动过程中的错误信息[ 0.955079] BERT: Boot Error Record Table support is disabled. Enable it by using bert_enable as kernel parameter.
du命令——显示目录或文件所占用的磁盘空间
选项:
-s显示总计容量-h以人为可读的形式显示,以K,M,G为单位-m以MB为单位–exclude=<目录或文件》忽略指定的目录或文件
常用操作:
[root@localhost ~]# du -sh * //查看当前目录所有子目录和文件的大小0 anaconda-ks.cfg4.0K md5.log4.0K test.txt[root@localhost ~]# du -sh md5.log //查看hosts文件大小4.0K md5.log
date命令——显示和设置时间
选项:
-d显示字符串所指的日期与时间-s指定当前系统时间-u打印或设置协调世界时(UTC)
时间格式:
%F显示年月日%T显示时分秒%Y显示年份%m显示月份%d显示一个月的第几天%H显示时%M显示分%S显示秒%w显示星期几
常用操作
[root@localhost ~]# date //显示当前时间2023年 10月 22日 星期日 15:29:40 CST[root@localhost ~]# date +%F //显示年月日2023-10-22[root@localhost ~]# date +%T //显示时分秒15:33:35[root@localhost ~]# date -s “2024-10-22 15:30:00” //设置指定时间2024年 10月 22日 星期二 15:30:00 CST[root@localhost ~]# date 2024年 10月 22日 星期二 15:30:06 CST[root@localhost ~]# date +%F -d “100day” //显示100天后的时间2024-01-30[root@localhost ~]# date +%F -d “-100day” //显示100天前的时间2023-07-14[root@localhost ~]# date +”%Y-%m-%d %H:%M:%S” //指定格式显示当前时间2023-10-22 15:37:24
echo命令——显示一行文本
[root@localhost ~]# echo $PATH //打印环境变量/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin[root@localhost ~]# echo manager > test.sh //将打印字符重定向到文本[root@localhost ~]# cat test.sh manage[root@localhost ~]# echo manager |passwd –stdin root //修改密码更改用户 root 的密码 。passwd:所有的身份验证令牌已经成功更新。
watch命令——监视命令执行情况
watch 命令以周期性的方式执行给定的命令,并全屏显示执行结果。watch 可以帮助监测一个命令的运行结果,省得我们一遍遍地手动运行。
选项:
-n指定监测间隔,单位秒。默认 2s,不能低于 0.1s-d高亮显示最近两次更新之后的差异
[root@localhost ~]# watch -n 1 -d netstat -lntup //每隔 1s 高亮显示网络连接数的变化情况。[root@localhost ~]# watch uptime //每2s显示负载情况Ctrl+C退出watch命令界面
which命令——显示命令的全路径
[root@localhost ~]# which date //查看date命令的全路径/usr/bin/date[root@localhost ~]# which which //如果设置了别名,那么使用which功能还将会显示别名alias which=’alias | /usr/bin/which –tty-only –read-alias –show-dot –show-tilde’ /usr/bin/alias /usr/bin/which[root@localhost ~]# which shutdown poweroff //同时显示多个/usr/sbin/shutdown/usr/sbin/poweroff
详解/bin,/sbin,/usr/sbin,/usr/bin 目录区别、
/sbin 和/bin
/sbin 下的命令属于基本的系统命令,如shutdown,reboot,用于启动系统,修复系统
/bin下存放一些普通的基本命令,如ls,chmod等,这些命令在Linux系统里的配置文件脚本里经常用到
/sbin目录下的命令通常只有管理员才可以运行
/bin下的命令管理员和一般的用户都可以使用。
/bin是系统的一些指令,主要放置一些系统的必备执行命令
比如:
1 | cat、cp、chmod df、dmesg、gzip、kill、ls、mkdir、more、mount、rm、su、tar等 |
/sbin一般是指超级用户指令。主要放置一些系统管理的必备程式
比如
1 | dump、fdisk、halt、ifconfig、ifup、 ifdown、init、insmod ,lsmod、reboot、shutdown 等。 |
/usr/bin 是你在后期安装的一些软件的运行脚本。主要放置一些应用软体工具的必备执行档
比如:
1 | c++、g++、gcc、make wget 等 |
/usr/sbin 放置一些用户安装的系统管理的必备程式
例如
1 | dhcpd、httpd、imap、、inetd、named、netconfig、samba、sendmail、squid、swap、tcpdump 等 |
这些命令的目录都可以通过which命令来查看路径,无需记住其路径。
本篇分享一下文件处理的相关常用命令。
cat命令——查看文件内容
语法:
1 | cat 选项 文件 |
选项:
-n 输出行号-b输出行号,并忽略空白行,统计的是非空白行数
常用操作:
[root@localhost ~]# cat /etc/passwd //查看文件内容root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologin[root@localhost ~]# cat >> /etc/fstab << EOF //追加内容到文件尾部> /dev/sdb /data xfs defaults 0 0> EOF[root@localhost ~]# cat /dev/null > file.txt //清空文件内容
more命令——分页显示文件内容
cat命令是查看所有内容,对于内容较长的文件无法一屏显示所有内容,所以就需要分页显示内容,more命令就有这种分页显示功能。
常用操作:
1 | [root@localhost ~]# more /var/log/messages //分页查看 |
常用按键:
空格键查看下一页回车键查看下一行b键查看前一页q键退出查看页面/file查看包含file的内容
less命令——分页显示文件内容
less命令和more命令的功能相似,都是分页显示文件内容,但是less命令在交互界面有更灵活的操作
1 | [root@localhost ~]# less /var/log/messages //分页查看 |
空格键查看下一页回车键查看下一行b键查看前一页q键退出查看页面/字符串向下查看包含file的内容?字符串向上搜索内容n向后查找下一个匹配的文本g移动到第一行G移动到最后一行
总结下more 和 less的区别:
less可以按键盘上下方向键显示上下内容,more不能通过上下方向键控制显示
less不必读整个文件,加载速度会比more更快
less退出后shell不会留下刚显示的内容,而more退出后会在shell上留下刚显示的内容
head命令——显示文件内容头部
默认显示文件的前10行。
常用操作:
[root@localhost ~]# head /etc/passwd //默认显示文件10行[root@localhost ~]# head -n 20 /etc/passwd //显示文件的前20行
tail命令——显示文件内容尾部
默认显示文件最后10行。
选项:
-f实时输出文件变化后追加的数据-n <行数>指定显示行数
常用操作
[root@localhost ~]# tail -n 20 /var/log/messages //显示文件的最后20行[root@localhost ~]# tail -f /var/log/messages //动态追踪日志信息
cut命令——从文件中提取一段文字并输出
选项:
-c以字符为单位进行分割-d自定义分隔符,默认以tab键为分隔符-f指定显示哪个区域,常和-d使用
常用操作:
cut -c 2-10 test.txt //剪切每行2-10位置的字符cut -d : -f 1 /etc/passwd //指定以:作为分割符,-f指定显示第一个区域
split命令——分割文件
选项:
-l指定分割后文件的最大行数-b-d以数字为后缀
常用操作:
split -l 10 test.txt new_ //每10行分割一次,分割的文件名以new_开头split -l 10 -d test.txt new_ //参数-d使用数字后缀split -b 500M -d test.txt new_ //每500M分割一次
paste命令——合并文件
-d :指定合并的分隔符,默认是TAB
sort命令——文件排序
选项:
-n依照数值大小进行排序-r倒序排序-t指定分隔符-k按指定区间排序
常用操作:
sort -n test.txt //按照数值大小进行排序sort -nr test.txt //sort默认按照从小到大排序,使用-r选项就可以实现从大到小sort -t “ “ -k2 test.txt //以空格为分隔符,按照第二列进行排序
uniq命令——去除重复行
选项:
-c去除重复行,并计算每行出现的次数
常用操作:
uniq -c test.txt sort -n test.txt | uniq -c //结合sort使用,先排序后去重
wc命令——统计文件的行数、单词或字节数
选项:
-l统计行数-c统计字节数-w统计单词数-L打印最长行的长度
常用操作:
[root@localhost ~]# wc /etc/passwd //不加任何参数会打印出行数,单词数据,字节数等三个参数20 28 901 /etc/passwd[root@localhost ~]# cat /var/log/messages |wc -l //通过管道符来统计文件的行数
tee命令——多重定向
用于将数据重定向到文件,同时提供一份重定向数据的副本输出到屏幕上
常用操作:
1 | ls | tee -a ls.txt //将输出内容记录到ls.txt文件中,并输出到屏幕上 |
iconv命令——转换文件的编码格式
语法:
1 | iconv 选项 原编码 新编码 输入文件 |
选项
-f 编码A从编码A转换-t 编码B转变成编码B-l显示系统支持的编码-o将输出输入到
常用操作:
1 | iconv -f gbk -t utf-8 test.txt # 将test.txt文档的编码从gbk改为utf-8 |
diff:比较两个文件的不同
vimdiff:VIM可视化比较工具
vim:文本编辑器,后续会在单独篇章详细讲解
Linux常用命令之文件备份和压缩
本篇继续分享Linux中常用命令。主要分享Linux系统的文件备份和压缩相关的命令。掌握Linux文件备份与压缩技巧,轻松管理数据!本指南深入解析常用命令,助您高效完成任务。立即学习,提升技能!
tar命令——压缩备份
tar命令是linux非常使用频率非常高的一个命令。打包是指将一大堆文件或目录变成一个总的文件,压缩则是将一个大的文件通过一些压缩算法变成一个小文件。
选项:
-c创建一个新的tar压缩包-x解压tar包-t 查看压缩包的内容-C指定解压路径-f指定要处理的文件名-j使用bzip2方式进行压缩或解压-z使用gzip方式进行压缩或解压–exclude=PATHERN打包时排除不需要处理的文件或目录-v显示详细过程
常用操作:
1、 解压缩包到指定位置[root@localhost ~]# tar -zxvf jdk-8u202-linux-x64.tar.gz -C /data [root@localhost ~]# ll /data总用量 0drwxr-xr-x 7 10 143 245 12月 16 2018 jdk1.8.0_2022、 压缩文件[root@localhost data]# tar -zcvf jdk8.tar.gz jdk1.8.0_202/[root@localhost data]# ll总用量 189500drwxr-xr-x 7 10 143 245 12月 16 2018 jdk1.8.0_202-rw-r–r– 1 root root 194045097 10月 22 20:26 jdk8.tar.gz3、 查看压缩包内容[root@localhost data]# tar -tf jdk8.tar.gz
gzip命令——压缩或解压文件
gzip命令用于将一个大的文件通过压缩算法变成一个小的文件。gzip命令不能直接压缩目录,因此目录需要先用tar打包成一个文件,然后tar再调用gzip进行压缩。
选项:
-d解开压缩文件-v显示执行过程-c将内容输出到标准输出,不改变原始文件
常用操作:
1、压缩文件,默认不保留源文件,将源文件做成.gz压缩包[root@localhost ~]# gzip hosts [root@localhost ~]# ll总用量 8-rw——- 1 root root 1506 3月 13 2022 anaconda-ks.cfg-rw-r–r– 1 root root 94 10月 22 20:36 hosts.gzdrwxr-xr-x 2 root root 6 10月 22 20:36 test2、解开压缩包[root@localhost ~]# gzip -d hosts.gz [root@localhost ~]# ll总用量 8-rw——- 1 root root 1506 3月 13 2022 anaconda-ks.cfg-rw-r–r– 1 root root 177 10月 22 20:36 hostsdrwxr-xr-x 2 root root 6 10月 22 20:36 test3、压缩目录(压缩失败,只能压缩文件,不可压缩目录)[root@localhost ~]# gzip test/gzip: test/ is a directory – ignored4、保留源文件压缩[root@localhost ~]# gzip -c hosts >hosts.gz[root@localhost ~]# ll总用量 12-rw——- 1 root root 1506 3月 13 2022 anaconda-ks.cfg-rw-r–r– 1 root root 177 10月 22 20:36 hosts-rw-r–r– 1 root root 94 10月 22 20:44 hosts.gz
zip命令——打包和压缩文件
zip压缩格式是Windows与Linux等多平台通用的压缩格式。和gzip命令相比,zip命令压缩文件不仅不会删除源文件,而且还可以压缩目录。
选项:
-r递归压缩目录和文件-x压缩文件时排除某个文件
常用操作:
1、压缩文件[root@localhost ~]# cp /etc/services .[root@localhost ~]# ll总用量 660-rw——- 1 root root 1506 3月 13 2022 anaconda-ks.cfg-rw-r–r– 1 root root 670293 10月 22 20:50 services[root@localhost ~]# zip services.zip ./services adding: services (deflated 80%)[root@localhost ~]# ll总用量 796-rw——- 1 root root 1506 3月 13 2022 anaconda-ks.cfg-rw-r–r– 1 root root 670293 10月 22 20:50 services-rw-r–r– 1 root root 136227 10月 22 20:50 services.zip2、压缩目录[root@localhost data]# zip jdk.zip ./jdk1.8.0_202/ //没有压缩updating: jdk1.8.0_202/ (stored 0%[root@localhost data]# zip -r jdk.zip ./jdk1.8.0_202/ [root@localhost data]# ll总用量 192112drwxr-xr-x 7 10 143 245 12月 16 2018 jdk1.8.0_202-rw-r–r– 1 root root 196719566 10月 22 20:53 jdk.zip
unzip命令——解压zip命令压缩的文件
选项:
-d指定解压的路径-v显示解压详细过程,默认选项-o解压时不提示是否覆盖文件
常用操作:
1、默认解压到当前目录[root@localhost data]# unzip jdk.zip[root@localhost data]# ll总用量 192112drwxr-xr-x 7 root root 245 12月 16 2018 jdk1.8.0_202-rw-r–r– 1 root root 196719566 10月 22 20:53 jdk.zip2、解压到指定目录[root@localhost data]# unzip -d /root jdk.zip //解压到/root目录[root@localhost data]# ll /root/总用量 4-rw——- 1 root root 1506 3月 13 2022 anaconda-ks.cfgdrwxr-xr-x 7 root root 245 12月 16 2018 jdk1.8.0_2023、再次解压不提示,直接覆盖[root@localhost data]# unzip -d /root jdk.zip //再次执行会提示是否覆盖Archive: jdk.zipreplace /root/jdk1.8.0_202/javafx-src.zip? [y]es, [n]o, [A]ll, [N]one, [r]ename: error: invalid response [{ENTER}]replace /root/jdk1.8.0_202/javafx-src.zip? [y]es, [n]o, [A]ll, [N]one, [r]ename: ^C[root@localhost data]#[root@localhost data]# unzip -o -d /root jdk.zip //添加-o操作后就不会询问是否覆盖。
scp命令——远程复制文件
scp使用的是ssh协议。每次都是全量复制。适合第一次复制。
选项:
-r递归复制-p保留文件原始属性-P 端口号指定传输的端口号-q不显示传输进度
常用操作:
1、将本机的文件复制到远端主机,需要知道远端的服务器密码 scp -rp jdk1.8.0_202/ root@10.10.10.3:/data root是远端用户,也可以是其他普通用户10.10.10.3是远端IP地址/data是远端服务器的目录,要写绝对路径2、将远端主机文件复制到本机。[root@localhost data]# scp root@10.10.10.3:/etc/services /dataroot@10.10.10.3‘s password: //输入远端主机密码services 100% 655KB 64.4MB/s 00:00 3、指定端口复制,有些不是常规端口时就需要指定[root@localhost data]# scp -P 22 root@10.10.10.3:/etc/hosts /dataroot@10.10.10.3‘s password: hosts 100% 158 110.7KB/s 00:00
rsync命令——文件同步工具
rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能,这个功能类似于ssh带的scp命令,但是又优于scp命令的功能,scp每次都是全量拷贝,而rsync可以增量拷贝。
选项:
-z传输时进行压缩-a以递归方式传输文件,并保持原有属性,相当于-rtopgDI-r递归复制传输-t保持文件的时间信息-o保留文件的属主信息-p保留文件的权限-g保留文件的属组信息-D保留设备文件信息-l保留软链接–exclude-from=file排除指定的文件不需要传输–delete使目标目录内容和源保持目录一直,删除不同的文件
三种模式:
1、本地模式:用于本机传输文件,相当于cp命令
rsync 选项 源文件 目标文件[root@localhost ~]# rsync -av /etc/hosts /tmpsending incremental file listhostssent 267 bytes received 35 bytes 604.00 bytes/sectotal size is 177 speedup is 0.59[root@localhost ~]# ll /tmp总用量 4-rw-r–r– 1 root root 177 5月 6 2022 hosts
2、远程访问模式:将文件传输给远端主机或拉去远端主机的文件
-
拉取:rsync 选项 用户@主机:源文件 目标文件推送:rsync 选项 源文件 用户@主机:目标文件1、拉取远程文件[root@localhost ~]# rsync -avz root@10.10.10.3:/etc/hostname ./ 2、拉取远程目录下的所有文件[root@localhost ~]# rsync -avz root@10.10.10.3:/root/ /data/ 3、本地文件推送给远程目录[root@localhost ~]# rsync -avz /data root@10.10.10.3:/tmp/
3、守护进程模式:需要安装客户端
守护进程模式后期使用单独的篇章来详细解读。先了解一些基本用法。
拉取:rsync 选项 用户@主机::源文件 目标文件rsync 选项 rsync://用户@主机:端口/源文件 目标文件示例:rsync -avz rsync_backup@10.10.10.3::backup/ /mnt/ –password-file=/etc/rsync.password推送:rsync 选项 源文件 用户@主机::目标文件rsync 选项 源文件 rsync://用户@主机:端口/源文件示例: rsync -avz /mnt/ rsync_backup@10.10.10.3::backup/ –password-file=/etc/rsync.password
https://www.calcguide.tech/2025/05/11/linux常用命令之文件备份和压缩/
SSH免密登录配置指南与运维应用全景解析
Linux的150个常用命令汇总,运维大神不一定全部掌握!
Linux常用命令之文件管理,掌握运维必备技能,提升系统操作效率。对于开发人员来说Linux系统命令行是必须掌握的技能,Linux中一切皆文件,本次分享的是文件管理相关的命令。
以下就是本次主要讲解的命令。
1、ls命令
语法:
1 | ls [选项] [文件] |
选项:
“-a” :显示所有文件和目录(.开头的隐藏文件也会列出)”-l” :显示当前目录下文件的详细信息。”-d” :显示目录本身,一般结合-l使用”-i” :显示文件时,同时显示文件的索引节点”-r” :倒序显示文件”-h” :以人们可读的方式显示文件大小,比如1k,200M,2G等)
常用操作:
ls //查看当前目录下的所有目录和文件ls -a //查看当前目录下所有的目录和文件(包含隐藏文件)ls -l // 列表查看当前目录下所有目录和文件,与“ll”效果一样ls / // 查看指定目录下的所有目录和文件
2、cp命令
语法:
1 | cp [选项] 源文件 目标文件 |
选项:
“-r” :递归复制,用于复制目录”-i” :询问,如果目标文件已经存在,则会询问是否覆盖。默认设置”-d” :如果源文件为软链接(对硬链接无效),则复制出的目标文件也为软链接”-p”:复制后目标文件保留源文件的属性(包括所有者,所属组,权限和时间)”-a” :相当于-d、-p、-r选项的集合。
常用操作:
cp /tmp/tool /opt //将/tmp/tool目录复制到/opt目录下cp /tmp/tool/* /opt //将/tmp/tool目录下的文件复制到/opt目录下cp -r /tmp/tool/ /opt //将/tmp/tool目录下的文件及目录复制到/opt目录下
3、pwd命令
显示当前目录
4、mkdir命令
语法:
1 | mkdir [选项] 目录.. |
选项:
1 | "-p" :创建多级目录 |
常用操作:
mkdir dir // 创建目录dirmkdir -p dir/dir1/dir2 //创建多级目录
5、mv命令
语法:
1 | mv 源文件/目录 目标文件/目录 |
常用操作:
mv file1 file2 //移动file1到file2中,如果不存在file2,相当于重命名file1,同样适用于目录。mv /opt/* /tmp //将/opt目录下所有文件移动到/tmp目录下
6、rm命令
语法:
1 | rm [选项] 文件/目录 |
选项:
“-i” :删除之前需要确定”-r” :递归删除,用于删除目录”-f” :强制删除,不需要确认
常用操作:
rm file1 //删除当前目录下的文件rm -f file1 //强制删除文件rm -rf dir //强制删除dir目录及dir目录里的所有目录和文件rm -rf * //删除当前目录的所有目录和文件,慎用rm -rf /* //慎用,跑路命令。
7、ln命令
语法:
1 | ln [选项] 源文件 链接文件 |
选项:
“-s” :创建符号链接”-f” :强制执行,覆盖现有文件
常用操作:
ln test.txt hard_link //创建一个硬链接,删除了源文件,链接文件仍然可用ln -s test.txt soft_link // 创建一个软链接,删除了源文件,链接文件不可用,相当于window的快捷方式。
8、chmod命令
语法:
1 | chmod [选项] 权限 文件/目录 |
选项:
1 | "-R" :递归处理指定目录以及其子目录下的所有文件 |
常用操作:
chmod +777 /tmp # 给特定目录添加777权限chmod +x /tmp # 给/tmp目录添加执行权限
以下是权限对应列表
9、chown命令
语法:
1 | chown [选项] 属主权限.组权限 文件/目录 |
选项:
1 | "-R" :递归更改目录的用户和用户组 |
常用操作:
1 | chown -R rudy.rudy /tmp # 将/tmp的属主和属组修改为rudy权限。 |
10、chattr命令
语法:
1 | chattr [-RV][-v<版本编号>][+/-/=<属性>][文件或目录...] |
选项:
-R 递归处理,将指定目录下的所有文件及子目录一并处理。-V 显示指令执行过程。 +<属性> 开启文件或目录的该项属性。 -<属性> 关闭文件或目录的该项属性。 =<属性> 指定文件或目录的该项属性。属性:a:让文件或目录仅供附加用途。c:将文件或目录压缩后存放。i:不得任意更动文件或目录。u:预防意外删除。
常用操作:
[root@localhost ~]# chattr +a /etc/passwd //只能向文件中添加数据,而不能删除,多用于服务器日志文件安全 。 -a 可去掉该属性[root@localhost ~]# chattr +i /etc/passwd //设定文件不能被删除、改名、写入或新增内容 -i 可去掉该属性
11、lsattr命令
常用操作:
[root@localhost ~]# lsattr /etc/passwd //查看文件扩展属性—-ia———- /etc/passwd
12、xargs命令
作用:将标准输入转换成命令行参数
选项:
“-n” :指定每行的最大参数量”-i” :以{}替代前面的结果
常用操作:
xargs -n 3 < test.txt //每行最多输出三个字符xargs :所有输出都变为一行find / -name “.log” | xargs -i mv {} dir1 //将以.log结尾的所有文件移动到dir1目录下find / -name “.log” | xargs rm -rf //将以.log结尾的所有文件删除。等同于find / -name “*.log” -exec rm -rf {} ;
其他文件处理命令:
cd:切换目录
cd - //切换到上次操作目录cd ../.. //切换到上两级目录
tree:以树形结构显示目录下的内容
该命令最小化安装时默认不安装,需要自行安装:yum install -y treetree -d //只显示目录不是显示文件tree -L 1 / //只列出根目录下第一层的结构
touch:创建空文件或改变文件的时间戳属性
rename:重命名文件
1 | rename .jpg .txt *.jpg //将所有文件的.jpg替换为.txt |
file:显示文件的类型
[root@localhost ~]# file anaconda-ks.cfg anaconda-ks.cfg: ASCII text
Linux文件类型说明:
普通文件类型:Linux中最多的一种文件类型, 包括 纯文本文件(ASCII);二进制文件(binary);数据格式的文件(data);各种压缩文件.第一个属性为 [-]
目录文件: 能用 # cd 命令进入的。第一个属性为 [d],例如 [drwxrwxrwx]
块设备文件 :就是存储数据以供系统存取的接口设备,简单而言就是硬盘。例如一号硬盘的代码是 /dev/hda1等文件。第一个属性为 [b]
字符设备文件:即串行端口的接口设备,例如键盘、鼠标等等。第一个属性为 [c]
套接字文件:这类文件通常用在网络数据连接。可以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信。第一个属性为 [s],最常在 /var/run目录中看到这种文件类型
管道文件:FIFO也是一种特殊的文件类型,它主要的目的是,解决多个程序同时存取一个文件所造成的错误。FIFO是first-in-first-out(先进先出)的缩写。第一个属性为 [p]
链接文件:分类硬链接和软连接,类似Windows下面的快捷方式。第一个属性为 [l],例如 [lrwxrwxrwx]
md5sum:计算和校验文件的MD5值
选项: -c //从指定文件中读取MD5校验值,并进行校验 [root@localhost ~]# md5sum anaconda-ks.cfg //输出两部分,第一部分是md5值,后面是文件名d862f17d783eaf1abcf4f376b5c85527 anaconda-ks.cfg [root@localhost ~]# md5sum anaconda-ks.cfg >md5.log //生成校验文件[root@localhost ~]# md5sum -c md5.log //使用-c参数检查,结果OK表示文件没有变化anaconda-ks.cfg: OK
umask:显示或设置权限掩码
可以通过/etc/profile和/etc/bashrc文件来修改
本篇继续分享Linux中常用命令。主要分享Linux系统的用户管理相关的命令。
useradd命令——创建用户
原理:在使用useradd命令时,若不加任何参数选项,后面直接跟所添加的用户名,那么系统首先会读取/etc/login.defs(用户定义文件)和/etc/default/useradd(用户默认配置文件)文件中所定义的参数和规则,然后根据所设置的规则添加用户,同时还会向/etc/passwd(用户文件)和/etc/group(组文件)文件内添加新用户和新用户组记录,向/etc/shadow(用户密码文件)和/etc/gshadow(组密码文件)文件里添加新用户和组对应的密码信息的相关记录。同时系统还会根据/etc/default/useradd文件所配置的信息建立用户的家目录,并将/etc/skel中的所有文件(包括隐藏的环境配置文件)都复制到新用户的家目录中。
选项:
-r创建用户时不创建家目录-d指定创建时的家目录位置,默认创建在/home目录,在/etc/default/useradd可修改默认目录。-M 不建立家目录,虚拟用户一般需要建立家目录。-s用户登录使用的shell,默认是/bin/bash,可在/etc/default/useradd修改默认值-g指定用户组,这个用户组必须提前存在。-G指定多个附属组,可成为不同组的成员,多个使用逗号(,)隔开。-u uid指定用户的ID值。
常用操作:
// 创建用户的同时还会创建一个与用户名相同的用户组useradd test // 创建用户rudy,属于mysql组,uid为1002 useradd -g mysql -u 1002 rudy // 创建禁止登陆的用户 ,/sbin/nologin表示禁止登录useradd -M -s /sbin/nologin rudy
usermod命令——修改用户信息
参数大部分和useradd相同,usermod是修改用户,useradd是增加用户。
选项:
-d 家目录修改用户的家目录-s shell修改用户登录的shell-G group修改此用户为多个不同组的成员-l修改用户的账号名称
常用操作:
// 修改家目录和uidusermod -d /dataroot/rudy -u 1002 rudy// 将rudy用户名称更改为zhangsanusermod -l zhangsan rudy// 将rudy添加到这些组里面usermod -G public,wangluo rudy
userdel命令——删除用户及该用户相关的文件
选项:
-f强制删除用户,即使用户已登录-r删除用户的同时,删除与用户相关的所有文件
常用操作
// 不加参数删除用户,家目录还存在userdel rudy// 加-r参数删除用户,连同家目录一起删除userdel -r rudy// 强制删除用户userdel -l -r rudy
在实际工作中尽量不要使用userdel删除用户,而是采用在/etc/passwd里注释用户的方法,防止用户误删带来的系统及服务不正常。
groupadd命令——创建新的用户组
groupadd命令的用途一般不大,因为useradd命令在创建用户的同时还会创建与用户同名的用户组。
常用操作:
添加GID为1020的rudy组groupadd -g 1020 rudy
groupdel命令——删除用户组
groupdel不能删除还有用户归属的主用户组。
常用操作:
1 | groupdel rudy |
passwd命令——修改用户密码
说明:
root用户可以修改任何用户的密码,普通用户只能修改自身的密码。
root用户修改密码时,如果不符合系统密码规则,则给出警告信息,但密码设置仍然生效。普通用户修改密码时,如果使用弱密码,则给出告警信息,且修改无效。
选项:
-k为密码已经过期的用户更新有效期–stdin 从标准输入读取密码字符串-l锁定用户-d 删除用户密码,是密码为空
常用操作:
1、修改自身密码[root@localhost ~]# passwd root更改用户 root 的密码 。新的 密码:重新输入新的 密码:passwd:所有的身份验证令牌已经成功更新。2、一条命令修改密码,但不安全。[root@localhost ~]# echo manager |passwd –stdin root更改用户 root 的密码 。passwd:所有的身份验证令牌已经成功更新
实战:批量创建10个用户user01-user10,并且设置8位随机密码,要求不能使用Shell的循环(例如:for、while等),只能用Linux命令及管道来实现。
-
1 | [root@localhost tmp]# echo user{01..10}| tr " " "\n"|sed -r 's#(.*)#useradd \1; pass=$((RANDOM+10000000)); echo "$pass" |passwd --stdin \1; echo -e "\1 \t `echo "$pass"`">/tmp/rudyli.txt#g'|bash |
su命令——切换用户
将当前用户切换到指定用户或者以指定用户的身份执行命令或程序
选项:
-,-l,–login切换用户的同时,将用户的家目录、系统环境等重新按切换后的用户初始化-c向Shell传递单个命令
操作:
注意:
1、普通用户切换到root用户,需要输入密码
2、root切换到普通用户不需要密码
visudo命令——编辑sudoers文件
-c手动执行语法检查
操作:
visudo # 等价于vi /etc/sudoers编辑
大约100行下面添加需要提升root权限的普通用户名及对应权限
root ALL=(ALL) ALLliyb ALL=(ALL) /usr/sbin/useradd, /usr/sbin/userdelrudyli ALL=(ALL) NOPASSWD:ALL
检查语法
visudo -c/etc/sudoers:解析正确
待授权的用户或组机器=(授权角色)可以执行的命令userMACHING=COMMANDSliybALL=(ALL)/usr/sbin/useradd, /usr/sbin/userdel
sudo命令——以另一个用户身份执行命令
可以让普通用户在执行指定的命令或程序上,拥有超级用户的权限。普通用户不需要知道root用户密码。这个授权在visudo配置管理。
who命令——显示已登录用户信息
[root@harbor ~]# who -a 系统引导 2023-12-25 09:55 运行级别 3 2023-12-25 09:55登录 tty1 2023-12-25 10:03 2894 id=tty1root + pts/0 2023-12-29 11:36 . 94994 (172.16.1.203)
last命令——显示用户登录列表
last命令能够从日志文件/var/log/wtmp读取信息并显示用户最近的登录列表
[root@harbor ~]# lastroot pts/0 172.16.1.203 Fri Dec 29 11:36 still logged inroot pts/0 172.16.1.203 Thu Dec 28 13:58 - 14:09 (00:11)root pts/0 172.16.1.203 Thu Dec 28 13:06 - 13:11 (00:05)root pts/0 172.16.1.203 Thu Dec 28 11:47 - 12:07 (00:19)root pts/0 172.16.1.203 Thu Dec 28 10:23 - 10:38 (00:14)root pts/0 172.16.1.203 Thu Dec 28 10:12 - 10:17 (00:05)
lastb命令——显示用户登录失败的记录
lastb命令可以从日志文件/var/log/btmp中读取信息,并显示用户登录失败的记录,用于发现系统登录异常
[root@harbor ~]# lastbrudyli pts/0 Fri Dec 29 12:46 - 12:46 (00:00)Administ ssh:notty 172.16.1.203 Thu Dec 28 13:58 - 13:58 (00:00)Administ ssh:notty 172.16.1.203 Thu Dec 28 11:47 - 11:47 (00:00)Administ ssh:notty 172.16.1.203 Mon Dec 25 11:19 - 11:19 (00:00)Administ ssh:notty 172.16.1.203 Mon Dec 25 11:19 - 11:19 (00:00)Administ ssh:notty 172.16.1.203 Mon Dec 25 11:19 - 11:19 (00:00)Administ ssh:notty 172.16.1.203 Mon Dec 25 11:18 - 11:18 (00:00)Administ ssh:notty 172.16.1.203 Mon Dec 25 11:18 - 11:18 (00:00)(unknown tty1 Sat May 6 17:12 - 17:12 (00:00)btmp begins Sat May 6 17:12:19 2023
lastlog命令:显示所有用户的最近登录记录
从日志文件/var/log/lastlog中读取信息,并显示所有用户的最近登录记录,用于查看系统是否有异常登录
[root@harbor ~]# lastlog用户名 端口 来自 最后登陆时间root pts/0 172.16.1.203 五 12月 29 11:36:08 +0800 2023bin 从未登录过daemon 从未登录过adm 从未登录过lp 从未登录过sync 从未登录过shutdown 从未登录过halt 从未登录过
本篇继续分享Linux中常用命令。主要分享Linux系统的磁盘管理相关的命令。
fdisk命令——磁盘分区工具
fdisk是Linux系统下常用的分区工具。受mbr分区表的限制,fdisk工具只能给小于2TB的磁盘划分分区。如果大于2TB,无法识别超过2TB那部分容量。如果磁盘大于2TB最好使用parted分区工具。
选项:
-l显示所有磁盘分区的信息
交互式命令:
m帮助n新建一个分区d删除一个分区t更改分区格式l查看分区类型p打印分区表w保存退出q不保存退出
操作:
[root@localhost ~]# fdisk -l磁盘 /dev/vda:107.4 GB, 107374182400 字节,209715200 个扇区Units = 扇区 of 1 * 512 = 512 bytes扇区大小(逻辑/物理):512 字节 / 512 字节I/O 大小(最小/最佳):512 字节 / 512 字节磁盘标签类型:dos磁盘标识符:0x000a4dca 设备 Boot Start End Blocks Id System/dev/vda1 2048 6143 2048 83 Linux/dev/vda2 * 6144 4200447 2097152 83 Linux/dev/vda3 4200448 209715199 102757376 83 Linux磁盘 /dev/vdb:214.7 GB, 214748364800 字节,419430400 个扇区Units = 扇区 of 1 * 512 = 512 bytes扇区大小(逻辑/物理):512 字节 / 512 字节I/O 大小(最小/最佳):512 字节 / 512 字节磁盘 /dev/vdc:107.4 GB, 107374182400 字节,209715200 个扇区Units = 扇区 of 1 * 512 = 512 bytes扇区大小(逻辑/物理):512 字节 / 512 字节I/O 大小(最小/最佳):512 字节 / 512 字节[root@localhost ~]# fdisk /dev/vdc欢迎使用 fdisk (util-linux 2.23.2)。更改将停留在内存中,直到您决定将更改写入磁盘。使用写入命令前请三思。Device does not contain a recognized partition table使用磁盘标识符 0x5eb87e6d 创建新的 DOS 磁盘标签。命令(输入 m 获取帮助):m命令操作 a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition g create a new empty GPT partition table G create an IRIX (SGI) partition table l list known partition types m print this menu n add a new partition o create a new empty DOS partition table p print the partition table q quit without saving changes s create a new empty Sun disklabel t change a partition’s system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only)命令(输入 m 获取帮助):n # 新增加一个分区Partition type: p primary (0 primary, 0 extended, 4 free) e extendedSelect (default p): p # 新增一个主分区分区号 (1-4,默认 1):1起始 扇区 (2048-209715199,默认为 2048):将使用默认值 2048Last 扇区, +扇区 or +size{K,M,G} (2048-209715199,默认为 209715199):+10G分区 1 已设置为 Linux 类型,大小设为 10 GiB命令(输入 m 获取帮助):p # 打印分区表磁盘 /dev/vdc:107.4 GB, 107374182400 字节,209715200 个扇区Units = 扇区 of 1 * 512 = 512 bytes扇区大小(逻辑/物理):512 字节 / 512 字节I/O 大小(最小/最佳):512 字节 / 512 字节磁盘标签类型:dos磁盘标识符:0x5eb87e6d 设备 Boot Start End Blocks Id System/dev/vdc1 2048 20973567 10485760 83 Linux命令(输入 m 获取帮助):t # 更换分区格式已选择分区 1Hex 代码(输入 L 列出所有代码):LHex 代码(输入 L 列出所有代码):8e已将分区“Linux”的类型更改为“Linux LVM”命令(输入 m 获取帮助):p # 查看磁盘 /dev/vdc:107.4 GB, 107374182400 字节,209715200 个扇区Units = 扇区 of 1 * 512 = 512 bytes扇区大小(逻辑/物理):512 字节 / 512 字节I/O 大小(最小/最佳):512 字节 / 512 字节磁盘标签类型:dos磁盘标识符:0x5eb87e6d 设备 Boot Start End Blocks Id System/dev/vdc1 2048 20973567 10485760 8e Linux LVM命令(输入 m 获取帮助):wThe partition table has been altered!Calling ioctl() to re-read partition table.正在同步磁盘。[root@localhost ~]# lsblk # 查看分区情况NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsr0 11:0 1 9.5G 0 romvda 253:0 0 100G 0 disk├─vda1 253:1 0 2M 0 part├─vda2 253:2 0 2G 0 part /boot└─vda3 253:3 0 98G 0 part /vdb 253:16 0 200G 0 disk /datavdc 253:32 0 100G 0 disk└─vdc1 253:33 0 10G 0 part
注意:操作时一定要谨慎,如果不小心操作错了,直接使用交互指令q不保存退出,这样先前的操作就会无效。如果输入w则会保存所有修改。
partprobe命令——更新内核的硬盘分区表信息
更新内核中的硬盘分区表数据,主要用于磁盘分区发生变化时。对磁盘分区进行修改后,找不到新分区,可以使用partprobe命令来刷新一下。
-
1 | [root@localhost ~]# partprobe /dev/vdc |
parted命令——磁盘分区工具
parted命令用于对大于2TB的磁盘进行分区,需要将磁盘转换为GPT格式。
选项:
-l 显示所有磁盘分区的信息-h查看帮助
操作:
1、查看帮助
[root@localhost ~]# parted /dev/vdcGNU Parted 3.1使用 /dev/vdcWelcome to GNU Parted! Type ‘help’ to view a list of commands.(parted) h align-check TYPE N # 检查磁盘分区 help [COMMAND] # 查看帮助 mklabel,mktable LABEL-TYPE # 创建分区表 mkpart PART-TYPE [FS-TYPE] START END # 创建分区 name NUMBER NAME # 为分区命名 print [devices|free|list,all|NUMBER] # 显示分区表 quit # 退出 resizepart NUMBER END # 重设分区大小 rm NUMBER # 删除编号为NUMBER的分区 select DEVICE # 选择要编辑的分区 set NUMBER FLAG STATE # 改变分区的标志 toggle [NUMBER [FLAG]] # 设置分区标志 unit UNIT # 设置默认单位 version # 显示版本号(parted)
2、创建新分区
查看分区情况,可见vdc1和vdc2已经创建出来
[root@localhost ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsr0 11:0 1 9.5G 0 rom /mntvda 253:0 0 100G 0 disk├─vda1 253:1 0 2M 0 part├─vda2 253:2 0 2G 0 part /boot└─vda3 253:3 0 98G 0 part /vdb 253:16 0 200G 0 disk /datavdc 253:32 0 100G 0 disk├─vdc1 253:33 0 4.7G 0 part└─vdc2 253:34 0 4.7G 0 part
3、删除分区
[root@localhost ~]# parted /dev/vdcGNU Parted 3.1使用 /dev/vdcWelcome to GNU Parted! Type ‘help’ to view a list of commands.(parted) pModel: Virtio Block Device (virtblk)Disk /dev/vdc: 107GBSector size (logical/physical): 512B/512BPartition Table: gptDisk Flags:Number Start End Size File system Name 标志 1 17.4kB 5000MB 5000MB primary 2 5001MB 10.0GB 5000MB logical(parted) rm 2 # 删除第二个分区(parted) rm 1 # 删除第一个分区(parted) pModel: Virtio Block Device (virtblk)Disk /dev/vdc: 107GBSector size (logical/physical): 512B/512BPartition Table: gptDisk Flags:Number Start End Size File system Name 标志(parted) q信息: You may need to update /etc/fstab.[root@localhost ~]# lsblk # 再次查看分区情况NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsr0 11:0 1 9.5G 0 rom /mntvda 253:0 0 100G 0 disk├─vda1 253:1 0 2M 0 part├─vda2 253:2 0 2G 0 part /boot└─vda3 253:3 0 98G 0 part /vdb 253:16 0 200G 0 disk /datavdc 253:32 0 100G 0 disk
4、非交互方式创建分区
直接使用一条命令创建一个分区。
[root@localhost ~]# parted /dev/vdc mklabel gpt yes mkpart primary 0 10G Ignore p警告: The existing disk label on /dev/vdc will be destroyed and all data on this disk will be lost. Do you want to continue?警告: The resulting partition is not properly aligned for best performance.Model: Virtio Block Device (virtblk)Disk /dev/vdc: 107GBSector size (logical/physical): 512B/512BPartition Table: gptDisk Flags:Number Start End Size File system Name 标志 1 17.4kB 10.0GB 10000MB primary信息: You may need to update /etc/fstab.
mkfs命令——创建文件系统
mkfs命令用于在指定的设备(或磁盘分区)上创建格式化并创建文件系统。创建分区后并不能使用分区,需要对分区进行格式化为特定文件系统后才能用来存取数据。
选项:
-t 指定要创建的文件系统类型-c 创建文件系统时检查磁盘坏块
mkfs只是一个前端命令,它通过-t参数指定文件系统类型后会调用相应的命令mkfs.fstype。因此可以直接使用mkfs.ext4这个命令创建ext4文件系统。
操作:
resize2fs命令——调整ext2/ext3/ext4文件系统大小
resize2fs命令用于扩容或收缩未挂载的ext2/ext3/ext4文件系统。在Linux 2.6或更高版本的内核中,该命令还支持在线扩容已经挂载的文件系统,该命令常用来针对LVM扩容后的分区使用。
1 | [root@localhost ~]# resize2fs /dev/centos/root # 扩容文件系统,ext4文件系统格式 |
xfs_growfs命令——调整xfs文件系统的系统大小
xfs_growfs针对的是使用xfs格式化的的文件系统,ext4文件系统使用resize2fs调整文件系统大小。
操作:
fsck命令——检查并修复Linux文件系统
fsck命令用于检查并修复文件系统中的错误。需要注意的是:文件系统必须是卸载状态,否则可能会出现故障;不要对正常的分区使用fsck,fsck会根据/etc/fstab进行文件系统检查。
选项:
-a自动修复文件系统,不询问任何问题-s按顺序检查多个文件系统-t指定要检查的分区的文件系统类型-A检查文件/etc/fstab内所列的全部文件系统
只有当系统开机显示磁盘错误时,才需要执行。
1 | [root@localhost ~]# fsck -A |
dd命令——转换或复制文件
选项:
if=<输入文件>从指定文件中读取,input fileof=<输出文件>写入到指定文件,output filebs=<字节数>一次读写的字节数,block sizecout=<块数>指定复制的block块的个数obs=<字节数>一次性写的字节,默认是512ibs=<字节数>一次读的字节,默认512
操作:
monut命令——挂载文件系统
一个分区被格式化后并不可以直接使用,还需要将其挂载到指定的挂载点上才可以被访问。
选项:
-l显示已经挂载的设备相关信息-a挂载/etc/fstab文件中的配置信息-t指定挂载的文件系统类型。如nfs,iso9660(光盘)-o后接一些挂载选项。
操作:
永久性挂载的磁盘都需要写入/etc/fstab文件中,若这个文件配置有错误会导致系统重启无法正常进入系统。可以使用mount -a进行挂载测试,如果能挂载成功,重启一般会正常。
umount命令——卸载已挂载的文件系统
umount卸载可以接挂载点目录,也可以接设备文件。
选项
-f强制卸载-l将文件系统从文件系统层次结构中分离出来,并清除我对文件系统的所有引用
操作:
sync命令——刷新文件系统缓存区
sync命令会将内存缓冲区的数据强制刷新到磁盘
操作:# 手动将数据从缓冲区刷到磁盘中并重启系统syncsyncreboot
写SSD磁盘性能不佳怎么排查 - LinuxGuideLinuxGuide
Linux磁盘管理命令-xfs 管理命令 - LinuxGuideLinuxGuide
SSD性能优化策略 - LinuxGuideLinuxGuide
SSD性能优化策略 - LinuxGuideLinuxGuide
本篇继续分享Linux中常用命令。主要分享Linux系统的网络管理相关的命令。
ifconfig命令——配置或显示网络接口信息
ifconfig命令用于配置网卡IP地址等网络参数或显示当前网络的接口状态,需要以root用户的身份来执行。
如果命令不存在则安装
1 | yum install -y net-tools |
使用ifconfig命令配置网卡信息仅会临时生效,重启网络或服务器就会失效。
选项:
up激活指定的网络接口down 关闭指定的网络接口hw设置网卡的MAC地址
操作:
网卡的配置文件在/etc/sysconfig/network-scriprts/目录下。eth0对应的是ifcfg-eth0文件。
ifup命令——激活网络接口
ifup命令可读取配置文件/etc/sysconfig/network和/etc/sysconfig/network-scripts/ifcfg-
操作:
ifdown命令——用于禁用指定的网络接口。
操作:
route命令——管理路由表
route命令可以为服务器设置静态路由。
选项:
-n查看路由信息-ee显示更详细的路由信息add添加路由信息del删除路由信息-net到一个网络的路由,后面接网络号地址-host到一个主机的路由,后面接一个主机地址netmask添加子网掩码gw指定网关dev If指定由哪个网卡出去,如eth0
操作:
以上配置在重启网络时都会失效需要写到配置中。
需要写到/etc/sysconfig/network-scripts/route-eth*或/etc/rc.local文件中,重启会重新加载。
1 | 192.168.4.0/24 via 172.16.1.254 |
arp命令——管理系统的arp缓存
arp是地址解析协议,主要是根据IP地址获取物理地址。arp可以显示缓存区中的所有条目、删除指定的条目或者添加静态的IP地址与MAC地址的对应关系。
选项:
-n显示IP地址对应的MAC地址信息-s <主机>
操作:
ip命令——网络配置工具
ip命令用于显示或管理linux系统的路由、网络设备、策略路由和隧道。
语法格式:
1 | ip [选项] [网络对象] [操作命令] |
操作:
注意:
1、删除网卡的主IP地址,同时会删除该网卡的所有IP地址。
2、删除网卡的辅助IP地址,不会影响该网卡的其他IP地址。
3、ip命令集成了ifconfig和route的功能,逐渐替代这两个IP
netstat命令——查看网络端口信息
用于显示本机网络的连接状态、运行端口和路由表等信息。
选项:
-n显示数字形式的地址而不是去解析主机-a显示处于监听状态和非监听状态的socket信息-c <秒数>每隔几秒刷新一次-l仅显示处于监听状态的网络状态-t显示所有的TCP连接情况-u显示所有的UDP连接情况-p显示socket所属进程的PID和名称
常用组合:
重要的两个状态:
1、ESTABLISHED:表示处于连接的状态,认为有一个EASTABLISHED是一个服务的并发连接。
2、LISTEN:socket正在监听连接请求。
ss命令——查看网络端口信息
ss命令和netstat功能类似,但它能显示更多更详细的网络连接信息,比netstat更快更高效
安装ss命令:
1 | yum -y install iproute |
ping命令——测试主机之间网络的连通性
ping命令发出请求后,远端主机网络联通的话,就会收到回应消息。可判断主机是否正常或两者的网络是否可以互通。
选项:
-c <次数>指定发送ICMP报文的次数,默认一直发送报文-i <时间>发送报文的间隔时间,默认是1s-t <生存期>设置发送的数据包其生存期TTL值
操作:
注意:如果不加-c参数会一直ping下去,这时需要使用Ctrl + c来终止。
traceroute命令——追踪数据传输路由状态
traceroute命令和window下的tracert命令类似,用于显示网络数据包传输到指定主机的路径信息
安装traceroute:
1 | yum install -y traceroute |
操作:
-
1 | traceroute www.baidu.com |
注意:
1、有时会看到一些星号。可能是因为网络设备封堵或丢弃了返回的信息,所以得不到返回信息。
2、traceroute默认使用UDP协议(受网络影响性能不太好),可以使用-I参数来调用icmp协议。
telnet命令——远程登录主机或检测远程端口
telnet命令使用23端口进行远程,但是使用明文传输,安全性不好。目前远程连接一般使用安全性更好的SSH服务。现在telnet的主要应用场景是判断远端服务器的端口是否开放。
操作:
ssh命令——远程登录主机
ssh命令可以使用ssh加密协议实现安全的远程登录服务器,实现对服务器的远程管理。
语法格式:
1 | ssh [选项] [用户]@[主机名或IP地址] [远程执行的命令] |
选项:
-p指定ssh登录端口,默认是22端口-t强制分配伪终端-v调试模式
操作:
wget命令——命令行下载工具
wget命令用于从网络上下载某些资料,可以直接从网络上下载自己的所需要的文件
选项:
-o将文件的执行结果写入文件中-O指定保存的文件名后下载文件-c断点续传–limit-rate限速下载
操作:
nslookup命令——域名解析查询工具
安装:yum -y install bind-utils
语法:
1 | nslookup [选项] [域名/IP] [DNS服务器] |
操作
dig命令——域名查询工具
dig命令用于测试域名系统的工作是否正常
选项:
@<DNS的IP地址>指定DNS服务器来进行解析-t指定要查询的DNS数据类型+trace从根域名开始跟踪查询结果+short仅输出最精简的CNAME和A记录
操作:
tcpdump命令——监听网络流量
tcpdump命令是一个截获网络数据包的包分析工具。tcpdump可以将网络中传送的数据包的“头”完全截获下来以提供分析。
选项:
-c <数量>接收到指定的数据包数目后退出-i <网络接口>指定要监听的网络接口-n不进行DNS解析,加快显示速度-nn不将协议和端口数字等转换成名字-q以更快速输出的方式运行。-v显示命令执行的详细信息
操作:
以下是TCP状态机制:
图片来自网络
本篇Linux常用命令分析完结!