Speed-Linux

基础 Linux 命令、操作指南


大纲

  • 👍 基础使用

    • 环境变量

    • 符号

    • 会话

      • 历史记录

    • 文件和目录

      • 查看

      • 创建

      • 删除

      • 搜索

      • 修改

      • 比较

      • 链接

      • 压缩备份

  • 📶 网络管理

    • 查看网络信息

    • 配置

    • 抓包

    • 传输-下载

      • bt

      • 远程访问

    • Firewall

      • Firewalld

      • Iptables

      • ufw

    • 软件包管理

      • apt

      • Binary

      • dnf

      • dpkg

      • Pacman

      • rpm

      • snap

      • yum

        • 配置 yum 源

        • 配置 EPEL 源

      • 常用软件

  • 🦋 系统管理

    • 系统信息

      • 日志

    • 系统设置

      • 时间

      • 时区

      • 语言

      • 启动项-计划任务

      • SELinux

    • 账号管控

    • 进程管理

    • 内核管理

    • 设备管理

      • 内存

      • 磁盘

      • 无线网卡

      • 蓝牙

      • 外接硬盘

      • CD & DVD


在线查询命令


基础使用

帮助

命令风格

  • Unix 风格的参数,前面加单破折线,例如: -H

  • BSD 风格的参数,前面不加破折线,例如: h

  • GNU 风格的长参数,前面加双破折线,例如: --help

关机

别名

如果要执行命令太长又不符合用户的习惯,那么我们可以为它指定一个别名

运行脚本

环境变量

  • 图形模式登录时,顺序读取 : /etc/profile~/.profile

  • 图形模式登录后,打开终端时,顺序读取 : /etc/bash.bashrc~/.bashrc

  • 文本模式登录时,顺序读取 : /etc/bash.bashrc , /etc/profile~/.bash_profile

登录交互式 shell .bash_ files 的执行顺序*

注销交互式 shell .bash_ files 的执行顺序*

各变量文件区别

  • /etc/profile: 此文件为系统的每个用户设置环境信息。当用户登录时,该文件被执行一次,并从 /etc/profile.d 目录的配置文件中搜集shell 的设置。一般用于设置所有用户使用的全局变量。

  • /etc/bashrc: 当 bash shell 被打开时,该文件被读取。也就是说,每次新打开一个终端 shell,该文件就会被读取。

  • ~/.bash_profile 或 ~/.profile: 只对单个用户生效,当用户登录时该文件仅执行一次。用户可使用该文件添加自己使用的 shell 变量信息。另外在不同的LINUX操作系统下,这个文件可能是不同的,可能是 ~/.bash_profile, ~/.bash_login 或 /.profile 其中的一种或几种,如果存在几种的话,那么执行的顺序便是:/.bash_profile、 ~/.bash_login、 ~/.profile。比如 Ubuntu 系统一般是 ~/.profile 文件。

  • ~/.bashrc: 只对单个用户生效,当登录以及每次打开新的 shell 时,该文件被读取。

bash 设置环境变量

  • 一次性添加(关闭终端失效)

  • 永久修改变量(重启后生效)

fish 设置环境变量

特殊变量

bash 存在一些特殊变量,这些变量的值由shell提供,用户不能进行赋值。

变量的默认值

bash提供四个特殊语法,跟变量的默认值有关,目的是保证变量不为空。

例如

declare

declare 命令可以声明一些特殊类型的变量,为变量设置一些限制,比如声明只读类型的变量和整数类型的变量。

declare 命令如果用在函数中,声明的变量只在函数内部有效,等同于 local 命令。不带任何参数时,declare 命令输出当前环境的所有变量,包括函数在内,等同于不带有任何参数的 set 命令。

readonly

readonly 命令等同于 declare -r,用来声明只读变量,不能改变变量值,也不能 unset 变量。


符号

基本符号

  • grep

  • awk

  • cut

  • uniq

  • sort

  • xargs

  • tee

  • paste

  • fold


会话

清屏

查看用户信息

快捷键

screen

screen 是一个会话管理软件,用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。

历史记录

history 记录的行数

修改默认记录的行数

查看历史记录

清除历史记录

centos 下更改历史记录文件名

Ubuntu 下配置不记录 history 方法

查看是否配置历史命令信息


文件和目录

目录

更多内容参考笔记 文件

查看

目录、文件信息

文件内容

二进制相关

创建

  • touch

  • truncate

  • mkdir

删除

  • rm

    rm 命令有一对专门针对根目录的选项 --preserve-root--no-preserve-root

    • --preserve-root:保护根目录,这是默认行为。

    • --no-preserve-root:不保护根目录。 这对选项是后来添加到 rm 命令的。可能几乎每个系统管理员都犯过操作错误,而这其中删除过根目录的比比皆是

    那为什么还会专门出现 --no-preserve-root 选项呢?这可能主要是出于 UNIX 哲学的考虑,给予你想要的一切权力,犯傻是你的事情,而不是操作系统的事情。万一,你真的想删除根目录下的所有文件呢?

  • rmdir

删除巨大文件的技巧

搜索

搜索命令

搜索文件

  • find

  • locate

  • fd

  • fzf

找出重复文件

  • jdupes

    • https://github.com/jbruchon/jdupes

  • rdfind

  • fdupes

  • fslint

lsof

可以使用 lsof 命令来了解某人是否正在使用文件

修改

复制

移动

编辑

Vim

  • 常用操作

  • 更多操作

    • Vim

objcopy

objcopy 用于将 object 的部分或全部内容拷贝到另一个 object,从而可以实现格式的变换。

objcopy 可用用于将文件转换成 S-record 格式或者 raw 二进制格式。

tr

tr 命令将文件转换为全大写

joe

这个目前比较少见了

split

对文件进行分割

fallocate

truncate

缩小或者扩展文件至指定大小

比较

  • diff

  • vimdiff

  • comm

链接

inode

inode 是指在许多“类 Unix 文件系统”中的一种数据结构。每个 inode 保存了文件系统中的一个文件系统对象(包括文件、目录、设备文件、socket、管道, 等等)的元信息数据,但不包括数据内容或者文件名。

文件系统中每个“文件系统对象”对应一个“inode”数据,并用一个整数值来辨识。这个整数常被称为 inode 号码(“i-number”或“inode number”)。由于文件系统的 inode 表的存储位置、总条目数量都是固定的,因此可以用 inode 号码去索引查找 inode 表。

简而言之

  • inode 存储的是文件的元数据

  • inode 是文件在磁盘上的索引编号

  • inode 是文件的唯一标示符(主键), 而非文件名

Linux 系统中,显示文件的 inode 使用 ls -i,使用 df -i 可以显示当前挂载列表中 inode 使用情况

软链接

符号链接文件保存着源文件所在的绝对路径,在读取时会定位到源文件上,可以理解为 Windows 的快捷方式。

软连接是一类特殊的文件, 其包含有一条以绝对路径或者相对路径的形式指向其它文件或者目录的引用。 符号链接最早在 4.2BSD 版本中出现(1983年)。今天 POSIX 操作系统标准、大多数类 Unix 系统、Windows Vista、Windows 7 都支持符号链接。Windows 2000 与 Windows XP 在某种程度上也支持符号链接。

符号链接的操作是透明的:对符号链接文件进行读写的程序会表现得直接对目标文件进行操作。某些需要特别处理符号链接的程序(如备份程序)可能会识别并直接对其进行操作。

一个符号链接文件仅包含有一个文本字符串,其被操作系统解释为一条指向另一个文件或者目录的路径。它是一个独立文件,其存在并不依赖于目标文件。如果删除一个符号链接,它指向的目标文件不受影响。如果目标文件被移动、重命名或者删除,任何指向它的符号链接仍然存在,但是它们将会指向一个不复存在的文件。这种情况被有时被称为被遗弃。

在 Linux 中,创建软连接的方法是使用 ln -s

查看软连接的指向可以用 ls -l

删除软连接就如同删除普通文件一样,使用 rm symlink 即可。

  • 报错 : Too many levels of symbolic links

    • 在使用 ln -s 命令时,使用绝对路径取代相对路径

硬链接

它和普通文件类似,实体链接文件的 inode 都指向源文件所在的 block 上,也就是说读取文件直接从源文件的 block 上读取。

指通过索引节点来进行连接。在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在 Linux 中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

删除任意一个条目,文件还是存在,只要引用数量不为 0。

在 Linux 中,创建硬链接的方法是 ln:

创建硬链接之后,源文件和目标文件将拥有完全相同的 inode 编号,权限,内容等。

硬链接的几个限制:

  • 硬链接创建时要求源文件必须存在

  • 不允许给目录创建硬链接(注意是不能通过 ln 的方式)

  • 只有在同一文件系统才能创建硬链接

压缩备份

  • .tar

  • .tar.gz 和 .tgz

  • .tar.xz

  • .tar.Z

  • .tar.bz

  • .tar.bz2

  • .tbz

  • .gz

  • .bz2

  • .Z

  • .zip

  • .rar

  • .lha

  • .rpm

  • .deb

  • asar

7z

pigz

pigz 命令可以用来解压缩文件,最重要的是支持多线程并行处理


网络管理

查看网络信息

主机名

IP 地址

测试连通性

  • ping

  • traceroute

端口

路由表

DNS

arp 条目


配置

修改主机名

修改 DNS

  • 通用(一次性,重启失效)

  • 通用(长期)

  • 如果可以 ping 通 ip,但 ping 不通域名, 那么有以下几种原因

    • 没有配置好 /etc/resolv.conf

    • /etc/nsswitch.conf 文件删除 DNS 解析记录

    • 上面2个都不行的话,就重启一下试试

修改 IP

  • Ubuntu

  • ubuntu 17.10 引入的新方式 netplan

    网卡信息配置在 /etc/netplan/01-network-manager-all.yaml 文件中,如果这个 yaml 文件不存在,可以使用以下的命令创建出来。

    创建出来的名字可能略有不同,但是 /etc/netplan/ 这个目录下面所有的 yaml 文件都可以生效。

    注意 : ip 配置信息要使用 yaml 语法格式

  • Centos

  • Arch

配置 DHCP

  • Ubuntu

ethtool

ethool 是一个实用的工具,用来给系统管理员以大量的控制网络接口的操作。

设置包转发

在 CentOS 中默认的内核配置已经包含了路由功能,但默认并没有在系统启动时启用此功能。开启 Linux 的路由功能可以通过调整内核的网络参数来实现。要配置和调整内核参数可以使用 sysctl 命令

这样设置之后,当前系统就能实现包转发,但下次启动计算机时将失效。为了使在下次启动计算机时仍然有效,需要将下面的行写入配置文件 /etc/sysctl.conf

修改路由


抓包

tcpdump


传输-下载

scp

lrzsz

wget

curl

Aria2

bt


远程访问

ssh


Firewall

Firewalld

更多配置

见 Firewall.md

Iptables

更多配置

见 Iptables.md

ufw

Ubuntu 关闭防火墙

更多内容见 ufw.md


软件包管理

查看安装的程序

update-alternatives

alien

alien 是一个用于在各种不同的 Linux 包格式相互转换的工具,其最常见的用法是将 .rpm 转换成 .deb(或者反过来)。

apt

apt 的全称是 Advanced Packaging Tool 是 Linux 系统下的一款安装包管理工具.

安装软件

更新

无法获得锁 /var/lib/apt/lists/lock - open (11: 资源暂时不可用)

E: Unable to correct problems, you have held broken packages.

dpkg: error: parsing file '/var/lib/dpkg/updates/0023' near line 0

debconf: DbDriver "config": /var/cache/debconf/config.dat is locked by another process: Resource temporarily unavailable

禁用 Ubuntu 自动更新

enable the "Universe" repository

Gdebi

Gdebi 是一个安装 .deb 软件包的工具.提供了图形化的使用界面

Ubuntu apt 换源

20.04

18.04

16.04

Debain apt 换源

10

9

8

7

Kali apt 换源

Binary

dnf

DNF(Dandified Yum)是一种的 RPM 软件包管理器。

安装 dnf

dpkg

dpkg 命令是 Debian Linux 系统用来安装、创建和管理软件包的实用工具.

基本用法

常见问题

  • dpkg: error processing package python3-software-properties (--configure): package is in a very bad inconsistent state; you should reinstall it before attempting configuration

Pacman

pacman 是 Arch 的包管理工具.

基本用法

Pacman 换源

rpm

rpm 命令是 RPM 软件包的管理工具.

snap

Snappy 是一个软件部署和软件包管理系统,最早由 Canonical 公司为了 Ubuntu 移动电话操作系统而设计和构建。其包称为“snap”,工具名为“snapd”,可在多种 Linux 发行版上运行,完成发行上游主导的软件部署。该系统的设计面向手机、云、物联网和台式机。

Centos 下安装 snap

kali 下安装 snap

Ubuntu 下安装 snap

yum

yum 是在 Fedora 和 RedHat 以及 SUSE 中基于 rpm 的软件包管理器.

基础使用

配置本地 yum 源

挂载到/mnt/cdrom

进入 /etc/yum.repos.d 目录,将其中三个改名或者剩下所有都移走留下 CentOS-Base.repo

编辑 CentOS-Base.repo

配置 yum 源

8

7

6

刷新 YUM 的缓存状态

配置 EPEL 源

RHEL 8

RHEL 7

huaweicloud epel

RHEL 6

opkg

opkg 工具 (一个 ipkg 变种) 是一个用来从本地软件仓库或互联网软件仓库上下载并安装 OpenWrt 软件包的轻量型软件包管理器。

基础使用

常用软件

bash-insulter

一个在你打错命令时候嘴臭你的工具

Fish

一个挺好用的 shell 环境

zsh

一个挺好用的 shell 环境

Powerline-shell

用于美化 shell 环境

更多关于 linux 工具的内容参考笔记 工具


系统管理

系统信息

  • 内容参见 信息

日志

  • 内容参见 日志


系统设置

时间

  • date

  • ntpdate

  • hwclock

  • cal

ntp 服务

  • 安装

    ntp.conf 的具体配置参考 http://www.ntp.org/ntpfaq/NTP-s-config.htm#S-CONFIG-BASIC

    也可以查看 文件

Tips

  • ntpd 与 ntpdate 的区别

    • ntpd 在实际同步时间时是一点点的校准过来时间的,最终把时间慢慢的校正对.而 ntpdate 不会考虑其他程序是否会阵痛,直接调整时间.

    • 一个是校准时间,一个是调整时间.

    • https://blog.csdn.net/tuolaji8/article/details/79971591

时区

查看时区

修改时区

语言

查看系统语言

修改系统语言

换界面显示语言

如果界面出现乱码,安装中文字体

启动项-计划任务

查看

计划任务

crontab 命令

可以使用在线的 CRON 表达式工具辅助 : https://tool.lu/crontab/

crontab 命令相当于就是修改 /var/spool/cron/crontabs/usename 的文件

/etc/crontab 文件

/etc/crontab 默认是控制 /etc/cron.*, 如 /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly 这些

格式如下:

/etc/crontab 文件和 crontab -e 的区别

  • 使用范围

    修改 /etc/crontab 这种方法只有 root 用户能用,这种方法更加方便与直接直接给其他用户设置计划任务,而且还可以指定执行 shell 等等,

    crontab -e 这种所有用户都可以使用,普通用户也只能为自己设置计划任务。然后自动写入 /var/spool/cron/usename

  • 服务重启

  • 语法格式

    crontab -e 与 /etc/crontab 修改语法格式不一样,后者多一个 user 指定

/etc/cron.d/

/etc/cron.d/ 目录下也是存放 crontab 的配置文件.

/etc/crontab/etc/cron.d/ 在配置定时任务时,需要指定用户是 root,而 /var/spool/cron/crontabs/ 已经是属于用户控制的, 所以不需要指定用户, 这是格式上的区别.

cron 设置的默认环境变量:

如果没有设置相关的环境变量,会造成如 $PATH 问题导致的命令找不到.

可以在 cron 配置文件顶部加上:

/etc/rc.local

在文件末尾 (exit 0 之前) 加上你开机需要启动的程序或执行的命令即可 (执行的程序需要写绝对路径,添加到系统环境变量的除外) ,如

/etc/profile.d/

将写好的脚本 (.sh 文件) 放到目录 /etc/profile.d/ 下,系统启动后就会自动执行该目录下的所有 shell 脚本

at

在特定的时间执行一次性的任务

SELinux

查看 SELinux 状态

关闭 SELinux

  • 需要重启

  • 不需要重启

    setenforce 0


账号管控

用户

权限

加 sudo 权限(仅限 Ubuntu)

ACL

关于 linux 的账号和认证更多内容参考笔记 认证


进程管理

服务管理

  • service

  • systemctl

  • chkconfig

    从 CentOS7 开始,CentOS 的服务管理工具由 SysV 改为了 systemd,但即使是在 CentOS7 里,也依然可以使用 chkconfig 这个原本出现在 SysV 里的命令.

监视进程

  • ps

进程处理

  • kill

  • pkill

不挂断地运行命令

  • nohup

  • setsid

  • disown

更多进程管理内容参考笔记 进程


内核管理

rmmod

用于从当前运行的内核中移除指定的内核模块。执行 rmmod 指令,可删除不需要的模块。

dmesg

dmesg 可用于找出内核最新消息中的错误和警告

nmi_watchdog

“看门狗NMI中断”的机制。(NMI:Non Maskable Interrupt. 这种中断即使在系统被锁住时,也能被响应)。这种机制可以被用来调试内核锁住现象。通过周期性地执行NMI中断,内核能够监测到是否有CPU被锁住。当有处理器被锁住时,打印调试信息。


设备管理

更多内容见笔记 信息

内存

虚拟内存

如果机器没有安装 swap 分区可以自己分配一个

长期挂载

磁盘

磁盘的文件名

Linux 中每个硬件都被当做一个文件,包括磁盘。磁盘以磁盘接口类型进行命名,常见磁盘的文件名如下:

  • IDE 磁盘 : /dev/hd[a-d]

  • SATA/SCSI/SAS 磁盘 : /dev/sd[a-p] 其中文件名后面的序号的确定与系统侦测到磁盘的顺序有关,而与磁盘所插入的插槽位置无关。

磁盘配额

  • quota : 能对某一分区下指定用户或用户组进行磁盘限额。

分区

挂载

删除

数据恢复

  • 数据恢复

占用

  • df

  • du

dd

LVM

LVM 是 Logical Volume Manager 的缩写,中文一般翻译为 "逻辑卷管理",它是 Linux 下对磁盘分区进行管理的一种机制。LVM 是建立在磁盘分区和文件系统之间的一个逻辑层,系统管理员可以利用 LVM 在不重新对磁盘分区的情况下动态的调整分区的大小。如果系统新增了一块硬盘,通过 LVM 就可以将新增的硬盘空间直接扩展到原来的磁盘分区上。

  • 物理卷

    创建物理卷

    查看物理卷

    物理卷数据转移

    删除物理卷

  • 卷组

    卷组可以由一个或多个物理卷组成,当卷组空间不够时可以再新增物理卷扩容.

    创建卷组

    新增卷组

    删除卷组

    查看卷组

    移除某块物理卷

  • 逻辑卷

    逻辑卷建立在卷组基础之上的,所以在创建逻辑卷的时候一定要指定卷组名称.

    创建逻辑卷

    显示逻辑卷

    挂载逻辑卷

    删除逻辑卷

    扩容逻辑卷(卷组的可用范围内的容量值)

    收缩逻辑卷容量

    扩容生效

    挂载重启失效问题

块设备信息

  • lsblk

  • blkid

  • partx


无线网卡

配置无线网卡

  • WM Ware(开机后)

    虚拟机->可移动设备->Ralink 802.11 n Wlan(显卡型号)->连接(断开与主机的连接)

  • VBox

    虚拟机关机状态下->将设备插入主机->设置->USB设备->添加->删除除了供应商标识(VendorID)和产品标识(ProductID)之外的参数->开机->插入设备

  • 验证是否连接成功

    出现无线网卡型号即为成功


蓝牙

启动蓝牙服务

查看蓝牙设备

激活蓝牙设备

关闭本地 pin 验证

设置连接 pin 码

bluetoothctl

rfcomm


外接硬盘

NTFS-3G

CD & DVD

刻录 CD

刻录 DVD

从 CD 或 DVD 创建 ISO 文件