Speed-Linux
基础 Linux 命令、操作指南
大纲
👍 基础使用
环境变量
符号
会话
历史记录
文件和目录
查看
创建
删除
搜索
修改
比较
链接
压缩备份
📶 网络管理
查看网络信息
配置
抓包
传输-下载
bt
远程访问
Firewall
Firewalld
Iptables
ufw
软件包管理
apt
Binary
dnf
dpkg
Pacman
rpm
snap
yum
配置 yum 源
配置 EPEL 源
常用软件
🦋 系统管理
系统信息
日志
系统设置
时间
时区
语言
启动项-计划任务
SELinux
账号管控
进程管理
内核管理
设备管理
内存
磁盘
无线网卡
蓝牙
外接硬盘
CD & DVD
在线查询命令
Linux命令搜索引擎 - 非常牛逼,推荐
基础使用
帮助
命令风格
Unix 风格的参数,前面加单破折线,例如:
-HBSD 风格的参数,前面不加破折线,例如:
hGNU 风格的长参数,前面加双破折线,例如:
--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
Transmission
rtorrent
远程访问
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
外接硬盘
CD & DVD
刻录 CD
刻录 DVD
从 CD 或 DVD 创建 ISO 文件