linux命令

1. 文件和目录

  • cp -r dir1 dir2

    • 将目录 dir1拷贝到dir2
    • 如果目标文件夹存在,则将源文件夹拷贝到目标文件夹中
    • 如果目标文件夹不存在,则创建目标文件夹,将源文件夹中的内容拷贝的目标文件夹中
  • ln /home/a.txt a1.txt

    • 给文件创建硬连接
  • ln -s /home home

    • 目录只能创建软连接
  • du -sh /home

    • du:disk usage:用于计算指定目录和文件的磁盘占用情况。
    • df:disk free则是看磁盘的使用情况。
    • 查看文件或目录大小
    • s:仅显示目录总大小
    • h:human
  • sudo find / -name docker*

    • 根据名称查找
  • sudo find / -type d

    • 根据类型查找
  • sudo find / -size +100m

    • 根据大小查找
  • mv dir1 dir2

    • 目录改名或移动
  • tar -zcv -f dir1.tar.gz dir1

    • 打包并压缩,先用tar打包,然后用gzip进行压缩
    • z:使用gzip解压缩, 最常用的压缩方式,压缩速度快,压缩率还行, 文件后缀最好是tar.gz
    • j:使用bzip2解压缩,更高的压缩率,速度相对会慢一点,文件后缀最好是tar.bz2
    • J:使用xz解压缩,更更高的压缩率,速度更慢一点,文件后缀最好是tar.xz
    • v: 列出过程详细信息
    • c:表示压缩操作
    • x:表示解压缩操作
    • f:压缩的文件,这个选项最好单独写,后面要跟参数。
    • -C: chage,可以指定结果存放的目录
  • tar -zxv -f dir1.tar.gz -C /home/ljs

    • 先用gzip解压缩,然后解包,最后将结果存于/home/ljs目录下
  • wc -l a.txt

    • 统计文件有多少行
    • -w: 有多少单词
    • -m:有多少字符
    • 不加选项则以此列出行数,字数,字符数
  • ls /tmp | tee -a a.txt

    • tee将结果同时输出到标准输出和指定文件
  • split -b 100b a.txt prefix

    • 将文件拆分为以100字节为大小的小文件,小文件共同前缀为prefix
    • -l 100 表示按行拆分
  • less a.txt: less是 more 的增强版,有以下功能

    • 上下滚动
      • 向下滚动一行:
      • 向上滚动一行:
      • 向下滚动一页:空格
      • 向上滚动一页:b
    • 跳转
      • 跳转到头行:g
      • 跳转到尾行:G
      • 跳转到指定行:10g
    • 搜索
      • 查找字符串 /字符串
      • 跳转到上一个符合的结果:N
      • 跳转到下一个符合的结果:n
    • 行号
      • 显示行号:-N
      • 取消行号:-n
      • 在导航栏显示当前页在整个文件中的行数范围:=

1.1 常见的目录或文件

  • /dev/fd :目录,哪个进程访问,显示的是那个进程相关的文件描述符
  • /etc/passwd: 文件 ,存储linux系统所有用户信息
    • 查看当前进程打开的文件描述符

2. 用户与权限

  • chmod 777 /home
    • 修改目录或文件权限
  • chown ljs /home/ljs
    • 修改文件所属用户
  • chown ljs:ljs /home/ljs
    • 同时修改文件所属用户组
  • chgrp ljs text.txt
    • 修改文件所属用户组
  • sudo useradd -s /bin/bash -g ljs -d /home/ljs/ -m ljs
    • 创建用户
    • -s:指定shell
    • -m:如果家目录不在则创建
    • -g:指定用户的用户组,后面跟的参数可以是用户组名,也可以是gid,前提必须存在。
    • -G:指定用户的附加用户组, 如 -G ljs,root 表示给该用户添加两个附加用户组
  • sudo userdel -r ljs
    • -r:连家目录一起删除
  • sudo passwd ljs
    • 为账户设置密码
  • groupadd [-g gid] 组名
    • 创建群组
    • -g:指定组id
  • groupmod -n 新组名 组名
    • -n 指定修改后的组名
    • -g 111 指定修改后的组id
  • groupdel 组名
    • 删除组

2.1 粘着位(Sticky bit)

  • 它是一个权限标志位,主要应用于目录
  • 当某个目录被设置了粘着位后,该目录下的文件只能被文件所有者目录所有者root 用户删除,其他用户即使具有该目录的写权限和可执行权限,也不能删除那些不属于他们的文件。
  • 粘着位由一个字符 t T 表示
    • 其他用户对这个目录有执行权限时用小写的 t
    • 其他用户对这个目录无执行权限时用大写的 T
  • /tmp 对所有用户开放了读、写、执行权限(即 rwxrwxrwt)(小写t,表示其他用户也有执行权限),但由于粘着位的存在,用户只能删除自己的临时文件,不能删除别人的。
  • 举例rwxrwxrwT
    • 所有者可以浏览、编辑、进入目录,以及删除任何文件;
    • 同组用户也可以浏览、编辑、进入目录,但只能删除他们自己的文件;
    • 其他用户只能浏览和编辑目录,但不能进入(因为没有执行权限T),也只能删除他们自己的文件(因为设置了粘着位)。
# 给一个目录添加t权限
chmod +t directory

2.2 常见的文件系统

1. FAT:File Allocation Table

  • 链式存储,即文件可能会被分成多个片段,这些片段在磁盘上可能并不连续存储,每个片段都指向下一个片段的位置。
  • 在文件系统中维护一个表(File Allocation Table),这个表记录了文件分配的信息。
  • 目录是以一个个条目(Directory Entries)的方式组织的,每个条目包含了文件名、大小、创建时间等元数据信息,以及文件第一个片段在 FAT 表中的位置。

2. etx4: 第四代扩展文件系统

  • linux默认文件系统
  • ext4 文件系统的主要组件:
    • Superblock:它存储了文件系统的重要参数,比如 inodes 总数,blocks 总数等,并且它还有关于文件系统状态的信息。
    • Block Bitmap:它跟踪每个 block 组(block group)中哪些 blocks 是使用着的。
    • Inode Bitmap:它跟踪每个 block 组中哪些 inodes 是使用着的。
    • Inode Table:它包含了每个文件的元数据,这些元数据包括文件所有者,文件权限,文件大小以及指向文件数据 blocks 的指针。
    • Data Blocks:实际包含文件数据的地方。
  • 基本工作原理
    • 文件存储在多个数据 blocks 中。文件的元数据存储在 inode 中,这包括了指针指向文件数据的位置。inode 本身也存储在特定的 inode block 中。
    • 当你创建一个新的文件,系统会分配一个空闲 inode 来存储文件信息,并在数据区域找到空闲的 blocks 来存储文件数据。之后,空闲的 inode 和 blocks 会在 inode bitmap 和 block bitmap 中标记为已使用。
    • 当访问一个现有文件时,系统会按照文件路径找到对应的 inode,并通过 inode 中的信息找到并查看文件的数据。
    • 当删除一个文件时,系统会释放文件数据所使用的 blocks,并标记这些 blocks 在 block bitmap 中为空闲。然后系统释放该文件的 inode,并标记 inode bitmap 中相应的 bit 为空闲。
    • ext4 文件系统使用了extents来管理数据 blocks,它是连续的物理块序列。使用 extents,文件系统可以在磁盘上存储大量连续的数据,可以大大提高连续读写的性能并减少碎片。
    • ext4 文件系统通过日志系统(Journaling)来保证文件系统一致性。如果在写文件的时候有任何问题(比如断电),那么在系统启动的时候就可以通过检查日志来修复文件系统。
  • 对于文件
    • inode存储的是文件的元信息
    • block块存储的是文件的数据信息
    • inode中其实是没存储文件名的
  • 对于目录
    • inode存储的是目录的元信息
    • block块存储的是目录下所有文件和子目录的名字,以及这些名字所对应的 inode 编号
    • linux的根目录的inode的编号被固定位2

3. 磁盘管理

  • fdisk -l
    • 查看磁盘设备信息
  • df -h
    • 查看磁盘使用情况,每个分区/文件系统使用情况
    • -h:human
  • mount /dev/sda1 /home
    • 将设备挂载到指定目录
  • sudo unmount /dev/sda1
    • 卸载设备
    • -v 显示详情
    • 可以选择通过设备名卸载,也可以选择通过挂载点卸载

4. 进程管理

  • ps -ef
    • 带单连字符的是Unix风格的选项
    • -e :every 显示所有进程
    • -f : full 显示完整格式的输出
    • -F: full format 比 -f 还全的格式输出。
      在这里插入图片描述
  • UID : 启动该进程的用户
  • PID : 进程ID
  • PPID:父进程ID (如果该进程是由另一个进程启动的)
  • C:进程生命期的CPU使用率(使用CPU的时间/总的运行时间)
  • STIME:进行启动的系统时间
  • TTY:进程是从哪个终端启动的
  • TIME:进程的累计CPU时间
  • CMD:启动的程序名称
    ps -l
    在这里插入图片描述
  • F flag进程标志,是个十六进制整数
    • 0x001: forked but didn’t exec
    • 0x004: used super-user privileges
    • 这些标志中可以按位操作组合,比如5对应1+4,两者满足
  • S state进程状态
    • D:不可被打断睡眠,通常等待IO操作的出现
      • 进程在等待一个事件,通常设计内核同步原语,用于保证资源访问的一致性
      • 该状态不响应信号,即使终止信号。只有等待事件完成后,进程才会响应信号和退出
      • 一旦进程正在等待的事件完成后,它将会被唤醒并恢复运行。
      • 这个状态一般极其短暂。
    • R: running,进程可运行(正在运行或等待运行)
    • S:可中断睡眠,等待事件完成(可以被中断而退出)
    • T:已终止,因为信号量而终止执行的进程
    • Z:zombie 僵尸进程,子进程已终止但未被父进程清理的进程
  • PRI: 优先级priority,数值越小优先级越高,它是由nice值、内核内部数据结构以及其他因素共同决定的
  • NI:nice值,会影响PRI。nice的范围是-20(最高优先级)到+19(最低优先级),默认为0。降低nice值可以使得进程有更高的优先级。但只有特权用户才有资格降低进程的nice值。普通用户只能增加进程的nice值,这样它们的创建的进程才不会对其他进程产生不利影响。
  • ADDR:此值现在没啥实际意义,主要是提供向后兼容性
  • SZ:进程镜像大小,用于表示进程持有的页面数量
  • WCHAN:监视通道(wait channel),表示进程正在等待资源的内核函数名。当进程处于S状态,通常会有WCHAN值
    ps -L
    在这里插入图片描述
  • -L:显示进程的所有线程信息
  • LWP: light weight process轻量级进程(线程) ID

ps l

  • 不带连字符的是BSD风格选项

  • l 表示采用长格式显示
    在这里插入图片描述

  • VSZ (virtual memory size)进程占用的虚拟内存大小,以KB为单位

  • RSS (resident set size) 进程在物理内存的实际占用的大小(不包括交换空间),以KB为单位。 表示该进程所需要的常驻内存,即RAM中所有活动部分的大小。包括进程的代码、数据和共享库在内存中的部分。通常VSZ要高于RSS

  • STAT:代表当前进程状态的多字符状态码(第一个字符采用了与Unix风格的S输出列相同的值,表明进程是在休眠、运行还是等待 第二个字符以及后面的字符是对进程的状态进一步说明)

  • < :该进程以高优先级运行

  • N:该进程以低优先级运行

  • s:该进程是控制进程

  • l:该进程拥有多线程

  • +:该进程在前台运行

  • ps aux | grep mysql

    • a:显示所有与终端关联的进程(无论是不是当前用户的进程)(有交互的进程)
    • u:显示用户以及其他信息
    • x:显示没有控制终端的进程(没有交互的进程)
  • ps aux -L

    • 显示线程id

在这里插入图片描述

  • ps axo cmd,pid,lwp,%cpu,%mem k %cpu
    在这里插入图片描述
    • o: 选择指定列输出. 用逗号分隔字段名列表
    • k:选择指定列排序,如果想按照多个键排序,可以用逗号分隔排序键。并可以通过+,-来控制升降序(ps k -%cpu

ps --forest

  • 双连字符是GUN长选项风格,它可以和Unix或BSD风格一起定制输出
    在这里插入图片描述

  • --forest:能够追踪父子进程

  • kill -9 89899

    • kill 命令是给进程发送信号,常见的信号有:
    • -15: SIGTERM 默认信号,让进程正常地终止,运行进程完成清理工作
    • -9: 强制终止进程。当进程无法响应 SIGTERM 时使用。
  • pkill http*

    • 支持按程序名进行终止进程,程序名支持通配符

一些常见的系统信号系统信号都有默认处理,有些信号我们可以捕获进行自定义处理,有些不能捕获

  • SIGINT(2):中断信号,当用户按下 Ctrl+C 时由终端发出。等程序收到这个信号默认会终止运行(不会做清理工作)。 但我们可以在程序里捕获这个信号,进行一些清理工作后再退出
  • SIGQUIT(3):Quit 信号,当用户按下 Ctrl+\ 时由终端发出。默认行为是终止进程,并产生一个核心转储文件(core dump),除非核心转储文件的生成被禁用。同样这个信号也是可以在程序中捕获的,我们可以自定义处理逻辑
  • SIGKILL (9):终止信号,这个信号不能被捕获或忽略,因此它总是会导致进程终止。
  • SIGTERM(15):终止信号,这是 kill 命令默认的信号类型,程序收到这个信号默认会终止运行(不会做清理工作)。 但我们可以在程序里捕获这个信号,进行一些清理工作后再退出
package main

import (
	"fmt"
	"os"
	"os/signal"
	"syscall"
)

func main() {
	// 创建一个接收信号的通道
	sigs := make(chan os.Signal, 1)

	// 创建一个接收退出通知的通道
	done := make(chan bool, 1)

	// 注册要捕获的信号(SIGINT 和 SIGTERM)
	signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)

	// 创建一个协程,该协程会阻塞,直到有信号发送至sigs通道
	go func() {
		sig := <-sigs
		fmt.Println("Received Signal:", sig)
		// TODO 处理工作这里省略

		done <- true
	}()

	fmt.Println("Waiting for signals...")
	<-done
	fmt.Println("Exiting...")
}
  • top: ps 是看进程的瞬时信息,而 top 则是看进程的实时信息。
    在这里插入图片描述

  • 显示内容

    • up 88 days, 13.27: 系统运行了多久
    • 1 user: 一个用户登录到系统
    • load average: 0.05, 0.10, 0.11:系统过去一分钟、过去五分钟、过去十五分钟的平均负载。这个值小于核心数则表示负载不是很重,大于核心数则表示负载有点重。
    • 第二行描述了当前有多少任务数,以及任务状态
    • 第三行为 CPU 利用率,单位为百分比
      • us: User CPU time. CPU 在用户态下执行时间百分比(这个值较高则说明用户程序正在积极使用 CPU)(这里面不包括 nice 值调高的进程在用户态下的执行时间)
      • sy: System CPU time.CPU 在内核情况下的执行时间百分比
      • ni:Nice CPU time,CPU 在用用户态下执行 nice 值较高的程序时间百分比(nice 值较高则说明优先级较低)ni值越高则可能意味着低优先级进程正在积极使用 CPU
      • id: idle,CPU 空闲的时间百分比。这里不包括因为等待IO 而空闲的时间
      • wa:I/O Wait CPU time,CPU 等待 I/O 操作完成而无法执行任务的时间百分比
      • hi:Hardware Interrupt CPU time, CPU处理硬中断的时间百分比
      • si:Software Interrupt CPU time,CPU处理软中断的时间百分比
      • st:如果当前机器是虚拟机,则这个是等待其他虚拟机释放的 CPU所占的时间百分比。一个物理主机上通常运行多个虚拟机(宿主)。当这些虚拟机试图获取 CPU 资源时,它们可能需要等待其他虚拟机释放 CPU 资源。
    • 第四行为内存的使用情况,单位 KB
      • 总内存
      • 空闲的内存
      • 已经使用的内存
      • 用作 buff/cache的内存:buff 的作用是为将多次 io 操作收集起来批量操作;cache 的作用热点数据放到内存中,由访问磁盘改为访问内存,起加速的作用。
    • 第五行未交换区的使用情况,单位 KB。交换区(Swap)是指磁盘上的一部分空间,它被操作系统用于临时存储 RAM 中不活跃的内存数据。
    • 第六行空格,第七行描述了各个进程的信息
      • VIRT:虚拟内存使用量
      • RES:物理内存使用量
      • SHR:进程与其他进程的共享内存总量
      • S: 进程的状态
      • TIME+:从启动以来的 CPU 时间占用
  • 常用操作

    • 进程排序
      • P: 按 CPU 利用率排序
      • M:按内存利用率排序
      • T: 按运行时间排序
      • R: 反转排序
    • 进程筛选
      • U: 按用户进行筛选:按 U 后输入用户名再按回车以显示该用户进程;按 U 后直接按回车以显示所有用户的进程。
      • p: 按进程 ID 进行筛选:按 p 后输入进程 ID 再按还回车则显示该进程;按 p 后直接回车在显示所有进程
    • 终止进程
      • k: 后面有提示,按照提示操作就行(原理跟 kill 一样)
    • 显示模式
      • 1: 可以查看每个 CPU 的使用情况
      • z: 彩色和黑白之间切换
    • 退出:
      • q
  • uptime

    • 查看cpu平均负载情况
    • 显示系统过去1分钟、5分钟、15分钟的平均负载
    • 负载情况一般小于 cpu核数*0.7 比较好

5. 网络管理

  • host www.baidu.com

    • 查看网站ip
  • curl www baidu.com

    • 模拟客户端发送请求
  • telnet 192.168.12.36 80

    • 远程连接
  • ss -lnt

    • 显示socket情况(可以用来查看端口号被那个程序占用)
    • l:listen,显示监听的socket
    • n:不解析服务名称(加了这个参数,端口号处会显示端口号,不加可能会显示的是服务(程序)名)
    • t:只显示tcp socket
    • u: 只显示 udp socket
  • 过时命令

    • nslookup:被host淘汰
    • netstat:被ss淘汰

5. vim

  • gg
    • 光标移动到第一行
  • G
    • 光标移动到最后一行
  • ^
    • 光标移动到当前行行首,也可以用 0
  • $
    • 光标移动到当前行行尾
  • 12gg
    • 光标移动到第12行,也可以使用 12G
  • dd
    • 删除当前行
  • 3dd
    • 删除从当前行开始三行
  • d^
    • 删除光标到行首的字符,也可以用 d0
  • d$
    • 删除光标到行尾的字符,也可以用D
  • yy
    • 复制当前行
  • 3yy
    • 从当前行开始,复制三行
  • p
    • 在当前行下一行粘贴
  • i
  • 当前光标处插入
  • o
    • 当前行下新起一行插入
  • A
    • 当前行行尾插入
  • /hello
    • 文件中查找字符串hello
    • n:下一个
    • N:上一个
  • x
    • 删除光标后的一个字符(包括光标处)
  • X
    • 删除光标前的一个字符
  • :1,100s/word1/word2/g
    • 将第一行到第一百行所有的word1替换成word2
  • %s/word1/word2/g
    • 将 所有的word1替换成word2
  • :set nu
    • 显示行号
  • set nonu
    • 不显示行号
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux命令PDF是一种包含Linux操作系统中常用命令和其使用方法的电子书格式文件。通过下载和阅读Linux命令PDF,用户可以方便地学习、查找和使用Linux系统中的各种命令Linux命令PDF中通常会包含诸如文件操作、目录管理、进程管理、网络配置、软件安装等方面的命令。通过学习这些命令,用户可以更好地理解和掌握Linux系统的使用。不论是Linux初学者还是有经验的用户,都可以利用Linux命令PDF来提高自己的技能和效率。 Linux命令PDF的优势包括: 1. 全面性:Linux命令PDF中包含了Linux系统中几乎所有的常用命令,用户可根据需要选择学习和掌握特定的命令。 2. 方便性:PDF文件格式易于阅读和搜索,用户可以方便地在文档中查找和定位具体的命令和使用方法。 3. 离线使用:用户可以将Linux命令PDF下载到本地,便于随时查阅,无需依赖网络连接。 4. 可打印性:用户可以将Linux命令PDF打印成纸质文档,以备在没有电脑或电子设备的情况下使用。 5. 更新性:由于Linux系统的不断更新和发展,命令也在不断增加和演变。因此,一些Linux命令PDF会提供定期的更新版本,使用户能够获取到最新的命令和使用方法。 总之,Linux命令PDF是一种有助于用户学习和使用Linux系统的工具。通过下载和了解Linux命令PDF,用户可以很快地了解和掌握Linux系统中的常用命令,从而提高自己的工作效率和技能水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值