Linux课程总结(持续更新中)
Linux常用命令
Shell
前言:启动某个程序:查找程序在硬盘上安装位置,然后将其加载到内存运行。真正能控制硬件(CPU,显示器,内存)的只有OS kernel。但由于安生,复杂等原因用户不能直接接触内核,则在user与kernel增加一层“代理”(UI与命令行程序)。来接收用户操作,简单处理后传给 kernel。
- Shell是一个命令行程序,连接user与Linux kernel,让user更高效用Linux kernel。运行一个命令,大部分情况下Shell都会调用内核暴露出来的接口。这就是在使用内核。
- Shell也支持编程。Shell也是一种脚本语言(Script),解释型语言的别称是脚本语言(Script)。
Linux版本
- 核心版本
- 发行版本
Shell与Bash
- Shell
Shell 是用户与操作系统内核之间的接口,允许用户通过输入命令与系统交互。它可以是命令行界面(CLI)或图形用户界面(GUI),但通常指 CLI。Shell 接收用户输入的命令,解释并执行它们。
- Bash
Bash(Bourne Again Shell)是 Shell 的一种,由 Brian Fox 为 GNU 项目开发。它基于 Bourne Shell(sh),增加了更多功能,如命令行编辑、命令历史、脚本编程等。Bash 是许多 Linux 发行版的默认 Shell。
区别
- 定义:
Shell 是用户与操作系统交互的接口。
Bash 是 Shell 的一种实现。
- 功能:
Shell 提供基本的命令解释和执行功能。
Bash 在 Shell 的基础上增加了更多高级功能,如命令行编辑、命令历史等。
- 兼容性:
Shell 通常指 Bourne Shell(sh)。
Bash 兼容 sh,并扩展了更多功能。
- 使用场景:
Shell 适用于基本的命令行操作。
Bash 更适合复杂的脚本编写和交互式使用。
Shell命令与Bash命令
- Shell 命令
Shell 命令 是指通过 Shell(命令行解释器)执行的命令。
Shell 是一个统称,包括多种不同的 Shell 实现,比如:
1 | Bash(Bourne Again Shell) |
无论你使用哪种 Shell,都可以执行一些基本的命令,比如 ls、cd、echo 等。这些命令是 Shell 通用的。
- Bash 命令
Bash 命令 是特指在 Bash Shell 中执行的命令。
Bash 是 Shell 的一种,因此 Bash 命令也是 Shell 命令的一部分。
Bash 支持一些额外的功能和语法,比如:
- 命令行编辑(使用方向键修改命令)
- 命令历史(通过 history 查看)
- 更强大的脚本编程功能(如数组、条件判断、循环等):例如,${VAR:-default} 这种语法是 Bash 特有的,其他 Shell 可能不支持。
- 为什么容易混淆?
因为 Bash 是目前最常用的 Shell,很多人默认使用的就是 Bash,所以经常把“Shell 命令”和“Bash 命令”混为一谈。
如果你在 Linux 或 macOS 的终端中输入命令,大概率是在 Bash 中运行的,所以你会觉得“Shell 命令”和“Bash 命令”是一回事。
- 如何区分?
如果你在写脚本或执行命令时,使用的是 Bash 特有的功能(比如 [[ ]] 条件判断、${VAR} 变量扩展等),那么这些就是 Bash 命令。
如果你使用的是非常基础的命令(比如 ls、cd、echo),这些是 Shell 命令,几乎所有的 Shell 都支持。
- 总结
Shell 命令 是通用的,适用于所有 Shell。
Bash 命令 是 Shell 命令的一部分,特指 Bash 支持的命令和语法。
如果你不确定自己用的是哪种 Shell,可以运行以下命令查看:
1 | echo $SHELL #如果显示 /bin/bash,说明你正在使用 Bash。 |
Shell界面
Linux系统提供的命令需要在shell环境下运行,需要从图形界面进入shell界面,即终端(konsole)
命令格式
- bash命令的一般格式:命令名+选项+参数
- 正常执行后返回0,否则返回非零值(通过命令$?)查看
- 一行放不下,用反斜杠\来中继
- 连续的空格会被解释为单个空格
简单命令
- who命令:显示用户名+终端名+注册时间
- echo命令:
1 | echo i am chy |
- date命令:显示日期
- cal命令:显示日历
1 | cal #显示当前月份 |
- clear命令:清屏
- passwd命令:修改密码
文件系统
.
是当前目录;..
是当前目录的父目录;使用cd
可以切换到家目录;最上层的目录称为根目录(root),用/
表示。- 以
.
开头的是隐藏文件;以-
开头的是普通文件;以d
开头的是目录文件;以l
开头的是符号链接文件。 - Linux的四种文件类型
- 普通文件
- 目录文件
- 设备文件
- 符号链接文件
文件操作命令
文件显示命令
- cat命令:显示文件、连接两个或多个文件
1 | cat f1 #显示f1内容 |
- more命令:每次显示一屏
1 | more -dc f1 #-d 显示友好信息 -c 先清屏 |
- space:显示下一屏
- enter:显示下一行
- B:上一屏
- Q:退出
- less命令:同more命令
增强处在于:
- 使用
⬆
与⬇
切换行
- head命令:显示文件开头若干行(默认10)
1 | head -5 f1 # 显示5行 |
- tail命令:显示末尾若干行(默认10)
1 | tail +20 f1 # 从文件20行显示到最后 |
- touch命令:修改指定文件标签或者创建一个空文件
1 | touch f1 # 创建文件f1 |
匹配、排序、显示指定内容的命令
- grep命令:查找指定的词或者短语
1 | grep -F hello f1 # 在f1中查找hello所在的‘行’。-F表明此时hello为单纯字符串 |
- sort命令:排序
- uniq命令:去重
查找和比较文件的命令
- comm命令:比较两个已经排好序的文件(逐行比较)
-123
表示不显示第一列(仅在f1中出现的行)、第二列(仅在f2中出现的行)、第三列(在f1与f2中出现的行)
diff命令:(不要求两个文件事先排好序)
cmp命令:(发现差异会标出差异的位置)
1 | cmp -b ex1 ex2 |
- find:(在指定的目录下查找相应的文件)
1 | find . -name "m*.c" #在当前目录下查找以m开头.c结尾的文件 |
复制、删除和移动文件的命令
- cp命令:
1 | cp mfile /home/fox/exam1 # 将mfile复制到/home/fox下,并改名为exam1 |
- rm命令:(删除)
1 | rm -i test example # 交互式删除文件 |
- mv命令:(对文件或者目录重命名,或者将文件从一个目录移动到另一目录中)
1 | mv ex1 new1 # 改名字 |
文件内容统计命令
- wc命令
1 | wc -clw f1 f2 # -c:字节数 -l:行数 -w:字数 |
目录及其操作命令
绝对路径与相对路径
- 显示绝对路径
1 | pwd |
- 相对路径
相对路径不唯一
创建和删除目录
- mkdir命令:
1 | mkdir f1.txt # 在当前目录下创建f1.txt |
- rmdir命令:
注意:不能在子目录下删除父目录,或者在当前目录下删除当前目录。且被删目录应为空目录
改变工作目录和显示目录内容
- cd命令:
1 | cd.. # 向上移动一级 |
- ls命令:(列出指定目录内容)
1 | ls -F # 列出当前目录内容,并标出文件属性 |
链接文件的命令
硬链接
创建的链接与原来的文件Inode号不变。软链接
创建的链接与原来的文件Inode号发生改变。ln命令:(用来创建链接)
1 | ln a1.txt a1.txt.link # -F为硬链接,默认为硬链接 |
改变文件或者目录存取权限的命令
Linux中有四种用户:1-当前用户(user);2-当前用户的用户组(group);3-其他用户(others);4-超级管理员(root)。其次all
代表所有用户
Linux中有三种权限:r-读;w-写;e-执行
- chmod命令
1 | chmod a+x ex1 # 将文件ex1改为所有用户都有可执行权限 |
- unmask命令:(设置新建文件的掩码,默认0022)
- 新建文件的原始权限为:0666
- 新建目录的原始权限为:0777
- 若设置掩码为:0022。则上述变为0666-0022=0644;0777-0022=0755
1 | 设置掩码默认值 |
改变用户组和文件主的命令
- chgrp
1 | -R:递归式,将/home/wc下的文件及其子文件的用户组改为chenshi |
- chown
同上,不过是改变用户主
联机帮助命令
- man
1 | 看date命令的用法 |
- help
有关进程的命令
- ps
1 | ps |
- nice:修改进程优先级
- kill:杀死进程
1 | kill 1999 # 1999为PID号码 |
- sleep:暂停进程
1 | sleep 100 # 暂停100秒 |
文件的压缩与解压缩
- gzip:压缩文件(默认)/解压缩文件
1 | cd /home/chen |
- unzip:对
.zip
文件解压缩
1 | unzip hong.zip |
- tar:归档
1 | tar -cvf |
文本编辑
前言
- vi是文本编辑器;vim是vi improved
- 在UNIX/Linux系统中都存在vi
- Linux中输入
vi
其实就是启动了vim
vi的三种工作方式
命令方式
进入vi编辑器后,输入命令
- a(append):附加命令
- i(insert):插入命令
输入这些命令既由命令方式->输入方式
输入方式
按下输入的键来输入
按下esc由输入方式->命令方式
ex转义方式
:
作为ex命令提示符,后跟命令,按下delete终止执行
进入与退出vi
进入vi
1 | vi example.c |
退出vi
:wq
:保存并退出:ZZ
:当有改动时,才写入X
:同2:q!
:强制退出
命令模式下的命令
插入命令
i
命令:光标在哪,就在光标处的前一位置插入I
命令:光标在哪行,就在行首插入
附加命令
a
命令:光标在哪,就在光标处的后一位置插入A
命令:光标在哪行,就在行尾插入
打开命令(开辟新行)
o
:在当前行的下面新开一行O
:在当前行的上面新开一行
命令模式下移动光标
l
;Space
;→
:向右移动。3+l
==3+Space
h
;BackSpace
;←
:向左移动k
;↑
:向上移动enter
;↓
;j
:向下移动
命令模式下文本修改
x
;X
:前者向左删除;后者向右删除
用法:3xdd
:删除整行
输入模式
光标的移动
方向键:移动光标
注意:关于Linux下shell界面按上下左右方向键出现ABD的问题
这个问题有两种可能,一种是由于当前用户使用的shell是/bin/sh的原因。在添加用户的时候没有添加用户的指定shell类型,因此默认
为/bin/sh。
可以用shell类型命令:echo $SHELL 查看当前用户的shell类型,如果是/bin/sh,使用:chsh -s /bin/bash username或者使用
usermod -s /bin/bash username命令修改shell类型。
另一种是当前用户的shell类型是/bin/bash但是还是会有这个问题,这时可以在终端输入:export TERM=linux。
这个是因为ubuntu的版本的TERM的问题。BackSpace:回退到某一位置开始重做
输入文本
即输入你想输入的文本
ex转义模式
- 常用命令
1 | :20 # 移动到第20行 |
Linux Shell程序设计
之前写的大多数命令,shell都作为命令解释程序出现,下面将介绍Shell程序设计语言(默认为Bash)。
Shell脚本的概述、建立与执行
概述
在第一行写上#!/bin/bash
表明下面的脚本是用Bash编写的
建立
使用vi编辑器
三种执行方式
1 | 1 |
显示与执行历史命令
显示
1 | history |
执行
配置历史命令环境
1 | chen12@ubuntu:~$ echo $HISTFILE |
名称补全
名称补全可以补全命令与参数,但不能补全选项
别名
番外
职位
- 前端:Vue
- 后端:Spring Boot
- 测试:测试工具
- 售前:demo版本
- 运维与交付:对客户培训
工具
- finalshell:国产远程控制Linux软件
管道
- “|”是Linux管道命令操作符,简称管道符。使用此管道符“|”可以将两个命令分隔开,“|”左边命令的输出就会作为“|”右边命令的输入,此命令可连续使用,第一个命令的输出会作为第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推。