Java for You 后端开发 夯实基础系列四:Linux 知识总结

夯实基础系列四:Linux 知识总结

前言 现在很多公司项目部署都使用的是 Linux 服务器,互联网公司更是如此。对于大一些的互联网公司,系统可能会非常复杂,本地无法启动,一般都会采用专门的开发机给开发人员开发测试使用。我实习期间接触的项目没一个可以在本地启动的,都需要写好代

前言

现在很多公司项目部署都使用的是 Linux 服务器,互联网公司更是如此。对于大一些的互联网公司,系统可能会非常复杂,本地无法启动,一般都会采用专门的开发机给开发人员开发测试使用。我实习期间接触的项目没一个可以在本地启动的,都需要写好代码,把代码更新到开发机上,然后编译部署,并查看部署过程中是否有错误或是查看访问这台机器的日志。而这些操作,都需要对基本的 Linux 命令熟悉。

今天总结下 Linux 的相关概念和基本操作,如果想了解更多,可以去看看《鸟哥的私房菜》。同时希望大家多动手实践,这样理解得更深刻。

概要

Linux 知识总结以下部分内容:Linux 常见概念、Linux 常用命令、vi 操作和一个最简单的 shell 脚本。

细节

1. Linux 常见概念

1.1 Linux 与 Windows 的不同

  • Linux 严格区分大小写
  • Linux 中所有内容以文件形式保存,包括硬件。一切内容皆文件。
  • Linux 不靠扩展名区分文件类型,靠权限区分文件类型。带后缀的文件名是约定俗成,方便管理
  • Windows下的程序不能在Linux中安装和运行
  • 1.2 Linux 采用字符界面有什么优势

  • 字符界面占用的系统资源更少
  • 字符界面减少了出错、被攻击的可能性
  • 1.3 分区类型

  • 主分区:最多只能有 4 个。
  • 扩展分区
  • 最多只能有 1 个
  • 主分区加扩展分区最多有 4 个
  • 不能写入数据,只能包含逻辑分区
  • 逻辑分区
  • 1.4 挂载

  • 必须分区
  • / (根分区)
  • swap 分区(交换分区,内存 2 倍,不超过 2GB)
  • 推荐分区
  • /boot(启动分区,200 MB)
  • 1.5 常见目录的作用

  • / 根目录
  • /bin 命令保存目录(普通用户就可以读取的命令)
  • /boot 启动目录,启动相关文件
  • /dev 设备文件保存目录
  • /etc 配置文件保存目录
  • /home 普通用户的家目录
  • /lib 系统库保存目录
  • /mnt 系统挂载目录
  • /media 挂载目录
  • /root 超级用户的家目录
  • /tmp 临时目录
  • /sbin 命令保存目录(超级用户才能使用的目录)
  • /proc 直接写入内存的
  • /sys
  • /usr 系统软件资源目录
  • /usr/bin/ 系统命令(普通用户)
  • /usr/sbin/ 系统命令(超级用户)
  • /var 系统相关文档内容
  • 根目录下的 bin 和 sbin,usr 目录下的bin 和 sbin,这四个目录都是用来保存系统命令的。

    proc 和 sys 目录不能直接操作,这两个目录保存的是内存的过载点。

    2. Linux 常用命令

    2.1 命令基本格式

    命令 [选项] [参数]

    2.2 查询目录中内容

    ls [选项] [文件或目录]

    选项:

  • -a:显示所有文件,包括隐藏文件
  • -l:显示详细信息
  • -d:查看目录属性
  • -h:人性化显示文件大小
  • -i:显示 inode
  • 2.3 目录处理命令

    mkdir -p [目录名]

    -p 递归创建

    命令英文原意:make directories

    cd [目录]

    命令英文原意:change directory

  • 简化操作
  • cd ~ 进入当前用户的家目录

    cd

    cd – 进入上次目录

    cd .. 进入上一级目录

    cd . 进入当前目录

    查询所在目录位置:pwd

    命令英文原意:print working directory

    2.4 删除文件或目录

    rm -rf [文件或目录]

    选项:

  • -r:删除目录
  • -f:强制
  • 2.5 复制命令

    cp [选项] [源文件或目录] [目标目录]

    选项:

  • -r:复制目录
  • -p:连带文件属性复制
  • -d:若源文件是链接文件,则复制链接属性
  • -a:相当于 -pdr
  • 2.6 剪切或改名命令

    mv [原文件或目录] [目标目录]

    2.7 链接命令

    ln -s [原文件] [目标文件]

    生成链接文件

    选项:-s 创建软链接

    硬链接特征:

  • 拥有相同的i节点和存储block块,可以看做是同一个文件
  • 可通过i节点识别
  • 不能跨分区
  • 不能针对目录使用
  • 软链接特征:

  • 类似 Windows 快捷方式
  • 软链接拥有自己的i节点和block块,但是数据块中只保存原文件的文件名和i节点号,并没有实际的文件数据
  • lrwxrwxrwx表示软链接,软链接文件权限都为rwxrwxrwx
  • 修改任意文件,另一个都改变
  • 删除原文件,软链接不能使用
  • 软链接如果目标文件和源文件不在同一目录下,源文件必须写绝对路径
  • 2.8 文件搜索命令

    locate 文件名

    在后台数据库中按文件名搜索,搜索速度更快

    /var/lib/mlocate

    locate 命令所搜索的后台数据库

    updatedb

    更新数据库。默认一天一更新。快。缺点:只能按文件名来搜索

    find [搜索范围] [搜索条件]

    搜索文件

    find / -name install.log

    避免大范围搜索,会非常耗费系统资源

    find 是在系统当中搜索符合条件的文件名。如果需要匹配,使用通配符匹配,通配符是完全匹配。

    find /root -iname install.log

    不区分大小写

    find /root -user root

    按照所有者搜索

    find /root -nouser

    查找没有所有者的文件

    find /var/log -mtime +10

    查找10天前修改的文件

    find . -size 25k

    查找文件大小是 25KB 的文件

    find . -inum 262422

    查找i结点是 262422 的文件

    2.9 搜索命令的命令

    whereis 命令名

    搜索命令所在路径及帮助文档所在位置

    选项:

  • -b:只查找可执行文件
  • -m:只查找帮助文件
  • which 命令能看到目录和别名

    2.10 搜索字符串命令

    grep [选项] 字符串 文件名

    在文件当中匹配符合条件的字符串

    选项:

  • -i:忽略大小写
  • -v:排除指定字符串
  • 2.11 帮助命令

    man 命令

    命令 –help

    help shell内部命令

    info 命令

    2.12 压缩命令

    zip 格式压缩

    zip 压缩文件名 源文件

    压缩文件

    zip -r 压缩文件名 源目录

    压缩目录

    zip格式解压缩

    unzip 压缩文件

    gz 格式压缩

    gzip 源文件

    压缩为.gz 格式的压缩文件,源文件会消失

    gzip -c 源文件 > 压缩文件

    压缩为.gz 格式,源文件保留

    gzip -r 目录

    压缩目录下所有的子文件,但是不能压缩目录

    gz 格式解压缩

    gzip -d 压缩文件

    解压缩文件

    gunzip 压缩文件

    解压缩文件

    bz2 格式压缩

    bzip2 源文件

    压缩为.bz2格式,不保留源文件

    bzip2 -k 源文件

    压缩之后保留源文件

    bzip2命令不能压缩目录

    打包命令tar

    tar -cvf 打包文件名 源文件

    解打包命令

    tar -xvf 打包文件名

    .tar.gz压缩格式

    其实.tar.gz 格式是先打包为.tar格式,再压缩为.gz格式

    tar -zcvf 压缩包名.tar.gz 源文件

    .tar.gz 解压缩

    tar -zxvf 压缩包名.tar.gz

    .tar.bz2压缩格式

    tar -jcvf 压缩包名.tar.bz2 源文件

    .tar.bz2 解压缩

    tar -jxvf 压缩包名.tar.bz2

    2.13 关机命令

    shutdown [选项] 时间

    选项:

  • -c:取消前一个关机命令
  • -h:关机
  • -r:重启
  • halt

    poweroff

    init 0

    2.14 重启

    reboot

    init 6

    2.15 系统运行级别

  • 0:关机
  • 1:单用户
  • 2:不完全多用户,不含NFS服务
  • 3:完全多用户
  • 4:未分配
  • 5:图形界面
  • 6:重启
  • cat /etc/inittab

    修改系统默认运行级别

    runlevel

    查询系统运行级别

    logout

    退出登录

    2.16 挂载命令

  • 查询与自动挂载
  • mount

    查询系统中已经挂载的设备

    mount -a

    依据配置文件/etc/fstab 的内容,自动挂载

  • 挂载命令格式
  • mount [-t 文件系统] [-o 特殊选项] 设备文件名 挂载点

  • 挂载光盘
  • mkdir /mnt/cdrom

    建立挂载点

    mount -t iso9660 /dev/cdrom /mnt/cdrom/

    挂载光盘

  • 卸载命令
  • umount 设备文件名或挂载点

    umount /mnt/cdrom

    2.17 查看登录用户信息

    w 用户名

    命令输出:

  • USER:登录的用户名
  • TTY:登录终端
  • FROM:从哪个IP地址登录
  • LOGIN@:登录时间
  • IDLE:用户闲置时间
  • JCPU:和该终端连接的所有进程占用的时间
  • PCPU:当前进程所占用的时间
  • WHAT:当前正在运行的命令
  • who 用户名

  • 查询当前登录和过去登录的用户信息
  • last

  • 查看所有用户的最后一次登录时间
  • lastlog

    2.18 历史命令

    history [选项] [历史命令保存文件]

    选项

  • -c:清空历史命令
  • -w:把缓存中的历史命令写入历史命令保存文件 ~/.bash_history
  • 历史命令默认会保存 1000 条,可以在环境变量配置文件 /etc/profile 中进行修改

    2.19 统计

    wc [选项] [文件名]

    选项

  • -c:统计字节数
  • -w:统计单词数
  • -l:统计行数
  • 2.20 管道符

    分页查看输出内容

    ls -l /etc | more

    netstat -an | grep ESTABLISHED

    2.21 用户和用户组

  • 用户:使用操作系统的人
  • 用户组:具有相同系统权限的一组用户
  • /etc/group:存储当前系统中所有用户组信息
  • 组名称
  • 组密码占位符
  • 组编号
  • 组中用户名列表
  • /etc/gshadow:存储当前系统中用户组的密码信息
  • 组名称
  • 组密码
  • 组管理者
  • 组中用户名列表
  • /etc/passwd:存储当前系统中所有用户的信息
  • 用户名
  • 密码占位符
  • 用户编号
  • 用户组编号
  • 用户注释信息
  • 用户主目录
  • shell 类型
  • /etc/shadow 存储当前系统中所有用户的密码信息
  • 用户名
  • 密码
  • 3. vi 操作

    3.1 操作模式

  • Command Mode:命令模式
  • Insert Mode:输入模式
  • Last Line Mode:底行模式
  • 3.2 常用指令

    vim + abc

    打开文件并把光标定位到最后一行

    vim +2 abc

    第二行

    vim +/xxx abc

    跳到指定字符串第一次出现的地方

    同时打开多个文件 可用n N prev来切换

    3.3 底行模式常用指令

  • :w
  • 保存文件,但不退出vi
  • :q
  • 退出vi
  • :!
  • 强制执行
  • /xxx
  • 向下查找, 按n查找下一个, N查找上一个,这个跟less命令的查找使用方式是一样的
  • ?xxx
  • 往前查找, 按n查找下一个, N查找上一个
  • 3.4 命令模式常用指令

  • h:光标左移
  • j:光标下移
  • k:光标上移
  • l:光标右移
  • ctrl+f:向下翻页
  • ctrl+b:向上翻页
  • ctrl+d:向下翻半页
  • ctrl+f:向上翻半页
  • dd:删除光标所在行
  • o:在光标所在处的下方插入一行并切换到输入模式
  • yy:复制光标所在的行
  • p:在光标所在行的下方粘贴
  • P:在光标所在行的上方粘贴
  • 3. Shell 基础

    3.1 Shell 是什么

  • 命令行解释器,可启动、挂起、停止或编写程序
  • 编程语言,可直接调用Linux 系统命令

3.2 输出命令

echo [选项] [输出内容]

3.3 脚本编写

首行

#!/bin/bash

echo “hello world”

赋予执行权限,直接运行

chmod 755 hello.sh

./hello.sh

通过bash 执行脚本

bash hello.sh

我组建了一个技术交流群,提供免费的每日科技早报服务,里边也会有众多知名互联网企业的技术大佬一起交流学习,共同成长。

动手验证

# 看进程各线程的内存 / CPU 占用
top -H -p <pid>

# 某个端口被谁占着
lsof -i :8080

# 抓一次 HTTP 请求内容
sudo tcpdump -A -i any 'tcp port 8080' -c 50

延伸阅读:官方与权威资料

相关阅读(站内)

常见问题

Q:CAP 定理说的是什么?

分布式系统在网络分区(P)必然发生时,只能在一致性(C)和可用性(A)之间二选一。注意分区不是想不发生的故障,而是默认前提。

Q:缓存穿透、缓存击穿、缓存雪崩有什么区别?

穿透是查不存在的 key(对策:布隆过滤器、缓存空值);击穿是单个热点 key 失效导致并发直击数据库(对策:互斥锁重建、逻辑过期);雪崩是大批 key 同时失效(对策:TTL 加随机抖动)。

Q:什么时候该拆微服务,什么时候继续用单体?

单体适合小团队、交付频率低、运维能力弱的场景;当团队规模变大、某模块需要独立扩缩容、发布互相阻塞时才值得拆,否则只是增加分布式复杂度。

Q:Redis 的 RDB 和 AOF 该怎么选?

RDB 是定时内存快照,恢复快、文件紧凑,但可能丢最后一次快照后的数据;AOF 记录写命令,数据更安全但文件会膨胀、恢复慢。生产常用「RDB + AOF 混合」。

Q:系统里为什么需要消息队列?

三个核心价值:解耦(生产方不依赖消费方)、削峰(秒级流量堆积在队列)、异步(把非关键链路从同步调用里摘出去)。代价是一致性和排查成本上升。


本文首发于 java4u.cn,转载请注明出处。

关注「蜗牛聊AI」,一起看懂技术变化背后的真正机会。

本文由 java4u.cn 发布,可自由转载、引用,但需署名作者且注明文章出处(作者:白色蜗牛,出处:java4u.cn)。如转载至微信公众号,请在文末添加作者公众号二维码。 https://java4u.cn/architecture/2996.html

作者: 蜗牛

上一篇
夯实基础系列四:Linux 知识总结

已经没有了

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

联系我们

公众号:蜗牛互联网

在线咨询: QQ交谈

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部