大一升大二暑期学校 NJU暑期课程 Linux系统基础(1) 20240720
一.操作系统
操作系统Operating System简称OS,是软件的一部分,它是硬件基础上的第一层软件,是硬件和其它软件沟通的桥梁。
操作系统会控制其他程序运行,管理系统资源,提供最基本的计算功能,如管理及配置内存、决定系统资源供需的优先次序等,同时还提供一些基本的服务程序。
Q1:什么是文件?
文件是计算机系统中存储信息的一种基本单位,它可以包含文本、图片、视频、程序代码等不同类型的数据。文件通常具有文件名、文件类型、文件大小等属性,并存储在磁盘或其它存储设备上。
Q2:什么是文件系统?
文件系统是一种用于存储、组织和访问文件的系统。它定义了文件和目录(文件夹)的层次结构,以及文件的存储方式和访问方法。文件系统负责管理磁盘空间,跟踪文件的位置,以及处理文件的创建、删除、移动和修改等操作。
Q3:操作系统是干什么的?
操作系统是计算机系统的核心软件,负责管理计算机的硬件资源和提供用户与计算机交互的接口。操作系统的主要功能包括:
- 管理硬件资源,如CPU、内存、磁盘等。
- 管理文件系统,提供文件的存储、访问和组织。
- 提供用户界面,允许用户通过命令行或图形界面与计算机交互。
- 管理进程和线程,调度任务的执行。
- 提供网络通信功能,允许计算机与其他设备进行数据交换。
Q4:软件是怎么运行起来的?
软件的运行过程通常包括以下几个步骤:
- 编写源代码:程序员使用编程语言编写软件的源代码。
- 编译:编译器将源代码转换为机器语言,生成可执行文件。
- 链接:链接器将可执行文件与所需的库和资源连接起来,生成最终的可执行程序。
- 加载:操作系统将可执行程序加载到内存中。
- 执行:CPU执行程序中的指令,完成指定的任务。
- 输入/输出:程序可以通过标准输入/输出接口与用户或其他程序进行交互。
在这个过程中,操作系统提供了必要的支持和服务,如内存管理、进程调度、I/O操作等,以确保软件能够顺利运行。
Q5:What is Linux Distribution?
Linux 不同于 Windows 和 macOS 这类系统,它没有官方维护的版本。Linux 的官方只负责维护核心,而给这个核心加上各种软件变成能用的操作系统的重任,就交给了下游的各个组织和公司。所谓发行版,就是把一系列的软件和核心放在一起,经过测试之后,做成一个完整的系统,分发给用户。
这个模式给 Linux 提供了多样性。用户可以选择适合自己的发行版。虽然在早期这使适配软件变得有些困难,使不同发行版割裂开来,给 Linux 的发展带来了阻碍。但是现在是 2023 年,随着包管理的规范化和新一代打包系统的兴起,这个状况得到了极大的改善。现在我们可以自由选取发行版,而不用过度担心软件适配的问题。
简而言之,GNU/Linux 加包管理加桌面约等于Linux发行版,虽然不严谨,但是差不多贴近事实。
Linux发行版的根本区别在于软件包的更新不同。各个发行版更新的策略不同,最常用的是Ubuntu.
linux系统只有一个统一的根目录,与windows不同。
二、linux系统中的路径
在Linux系统中,路径是指文件或目录在文件系统中的位置。路径可以是绝对路径或相对路径。
-
绝对路径:从根目录
/
开始的完整路径。例如:/home/user/documents
表示用户目录下的documents
文件夹。/usr/bin/ls
表示系统目录下的bin
文件夹中的ls
命令。
-
相对路径:相对于当前工作目录的路径。例如:
./documents
表示当前目录下的documents
文件夹。../documents
表示当前目录的父目录下的documents
文件夹。
如何进行路径切换
在Linux中,使用 cd
命令来切换当前工作目录。以下是一些例子:
-
切换到根目录:
cd /
这会将当前工作目录切换到根目录。
-
切换到用户主目录:
cd ~
或者
cd
这两个命令都会将当前工作目录切换到当前用户的主目录。
-
切换到上一级目录:
cd ..
这会将当前工作目录切换到当前目录的父目录。
-
切换到特定目录:
cd /usr/local/bin
这会将当前工作目录切换到
/usr/local/bin
目录。 -
使用相对路径切换目录:
cd documents
如果你已经在
/home/user
目录中,使用cd documents
会切换到/home/user/documents
目录。
示例
假设你的当前工作目录是 /home/user
,你想切换到 /usr/local/bin
目录:
-
首先,输入以下命令:
cd /usr/local/bin
这会将你的工作目录切换到
/usr/local/bin
。 -
现在,如果你想返回到你的主目录,可以使用:
cd ~
或者简单地:
cd。
-
如果你想查看当前的工作目录,可以使用:
echo $PWD
这会显示当前的工作目录路径。
通过这些命令,你可以在Linux系统中轻松地导航和管理文件和目录。
4./etc装的是配置文件。
三.linux常用指令的记忆
ls(列出目录内容)
记忆方法:想象成 “list” 的简写。
cd(更改目录)
记忆方法:将其看作 “change directory” 的缩写。
pwd(显示当前工作目录)
记忆方法:将其理解为 “print working directory” 的缩写。
cp(复制文件或目录)
记忆方法:将其看作 “copy” 的简写。
mv(移动或重命名文件或目录)
记忆方法:将其理解为 “move” 的简写。
rm(删除文件或目录)
记忆方法:将其看作 “remove” 的简写。
mkdir(创建目录)
记忆方法:将其看作 “make directory” 的缩写。
rmdir(删除空目录)
记忆方法:将其理解为 “remove directory” 的缩写。
touch(创建空文件)
记忆方法:想象你的手指 “touch” 创建了一个文件。
cat(查看文件内容)
记忆方法:将其看作 “concatenate” 的简写,意为连接文件并显示。
grep(在文本中搜索特定模式)
记忆方法:想象你正在 “抓” 搜索结果。
find(查找文件或目录)
记忆方法:将其看作 “find”(寻找) 的意思。
sudo(以管理员权限执行命令)
记忆方法:将其理解为 “super user do” 的缩写。
chmod(更改文件或目录权限)
记忆方法:将其看作 “change mode” 的缩写。
chown(更改文件或目录所有者)
记忆方法:将其理解为 “change owner” 的缩写。
df(显示磁盘空间使用情况)
记忆方法:将其看作 “disk free” 的缩写。
du(显示目录空间使用情况)
记忆方法:将其看作 “disk usage” 的缩写。
ps(显示当前进程)
记忆方法:将其理解为 “process status” 的缩写。
kill(结束进程)
记忆方法:想象你要 “kill”(杀死)一个进程。
top(显示实时系统状态)
记忆方法:想象一个 “top”(顶部)视图,显示系统最活跃的进程。
uname(显示系统信息)
记忆方法:将其看作 “unix name” 的简写,显示系统相关信息。
hostname(显示或设置系统主机名)
记忆方法:想象你要查看或更改你的 “host”(主机)的 “name”(名称)。
ifconfig(显示或配置网络接口)
记忆方法:将其看作 “interface configuration” 的缩写。
ping(检测网络连接)
记忆方法:想象网络连接像乒乓球一样 “ping”(弹)来 “pong”(弹)去。
wget(从网络下载文件)
记忆方法:将其看作 “web get” 的简写,从网络上 “get”(获取)文件。
curl(传输数据)
记忆方法:想象你的数据像卷发一样 “curl”(卷曲)起来。
tar(打包或解压文件)
记忆方法:将其看作 “tape archive” 的缩写,像用磁带存档一样打包或解压文件。
gzip(压缩或解压缩文件)
记忆方法:想象文件被 “zipped”(压缩)成一个 “g”(更小的)大小。
ssh(安全远程登录)
记忆方法:将其理解为 “secure shell” 的缩写,提供安全的远程登录。
scp(安全文件传输)
记忆方法:将其看作 “secure copy” 的缩写,提供安全的文件传输。
cron(定时任务)
记忆方法:将其看作 “chronos”(时间)的缩写,用于执行定时任务。
systemctl(控制系统服务)
记忆方法:将其理解为 “system control” 的缩写,用于管理系统服务。
passwd(更改用户密码)
记忆方法:将其看作 “password”(密码)的简写,用于修改密码。
useradd(添加用户)
记忆方法:想象你在 “add”(添加)一个 “user”(用户)。
usermod(修改用户属性)
记忆方法:将其看作 “user modify” 的缩写,用于修改用户属性。
groupadd(添加用户组)
记忆方法:想象你在 “add”(添加)一个 “group”(组)。
awk(文本处理)
记忆方法:想象你在用一个 “awk”(鹰嘴锄)挖掘文本。
sed(流编辑器)
记忆方法:将其看作 “stream editor” 的缩写,用于编辑数据流。
cut(删除文件的某些部分)
记忆方法:想象你用剪刀 “cut”(剪切)掉文件的一部分。
sort(对文本文件进行排序)
记忆方法:将其看作 “sort”(排序)的意思,对文件内容进行排序。
uniq(从文本文件中删除重复行)
记忆方法:将其看作 “unique”(唯一)的简写,只保留唯一的行。
wc(统计文本文件的行数、字数和字符数)
记忆方法:将其理解为 “word count” 的缩写,用于统计文件的内容。
head(显示文件的开头部分)
记忆方法:想象你在查看文件的 “head”(头部)。
tail(显示文件的结尾部分)
记忆方法:想象你在查看文件的 “tail”(尾部)。
ln(创建硬链接或符号链接)
记忆方法:将其看作 “link”(链接)的简写,用于创建文件链接。
alias(为命令创建别名)
记忆方法:想象你给某个命令起了一个新的 “alias”(别名)。
mount(挂载文件系统)
记忆方法:想象你把一个文件系统 “mount”(安装)到某个目录。
umount(卸载文件系统)
记忆方法:将其看作 “unmount”(卸载)的简写,用于卸载文件系统。
fdisk(磁盘分区管理)
记忆方法:将其看作 “fixed disk” 的缩写,用于管理磁盘分区。
dd(复制和转换文件)
记忆方法:将其看作 “data duplicator” 的缩写,用于复制和转换文件。
四、shell中的通配符
Shell脚本中的通配(Wildcard)是一种特殊的字符,用于匹配文件名或路径。通配符非常有用,因为它们允许你一次性对多个文件执行命令,而不是逐一指定每个文件名。以下是一些常用的通配符:
-
*
(星号):匹配任意数量的任意字符。- 例子:
*.txt
匹配任何以.txt
结尾的文件。
- 例子:
-
?
(问号):匹配单个任意字符。- 例子:
file?.txt
匹配以file
开头、.txt
结尾,中间有一个任意字符的文件,例如file1.txt
、filea.txt
。
- 例子:
-
[...]
(方括号):匹配方括号内的任意单个字符。- 例子:
file[1-9].txt
匹配以file
开头、.txt
结尾,中间有一个1到9之间的数字的文件。
- 例子:
-
[!...]
:匹配除了方括号内的任意单个字符之外的字符。- 例子:
file[!1].txt
匹配以file
开头、.txt
结尾,中间不是1的任意单个字符的文件。
- 例子:
-
{}
(大括号):匹配大括号内的多个选项(不包含空格)。- 例子:
{file1,file2}.txt
匹配file1.txt
和file2.txt
。
- 例子:
-
**
:在某些shell中,双星号**
可以匹配任意数量的目录。- 例子:
somedir/**/*.txt
匹配somedir
目录及其所有子目录下的.txt
文件。
- 例子:
示例
假设你在当前目录下有以下文件:
document1.txt
document2.txt
image.png
notes.txt
script.sh
-
使用
*.txt
运行ls
命令将会列出所有以.txt
结尾的文件:ls *.txt
-
使用
doc?ment?.txt
将会匹配document1.txt
和document2.txt
:ls doc?ment?.txt
-
使用
file[1-3].txt
将会匹配file1.txt
、file2.txt
和file3.txt
(如果这些文件存在):ls file[1-3].txt
-
使用
{script,notes}.txt
将会匹配script.txt
和notes.txt
(如果这些文件存在):ls {script,notes}.txt
-
在bash 4.0及以上版本中,使用
**
来匹配所有子目录下的.txt
文件:ls **/*.txt
通配符是shell脚本中非常强大的工具,可以大大提高工作效率,尤其是在处理大量文件时。
五、shell脚本相关
Shell脚本是一段由一系列命令组成的文本文件,这些命令可以由shell(一种命令行解释器)执行。Shell脚本在Unix、Linux和类Unix操作系统中非常常见,用于自动化任务、执行系统管理、文件操作、文本处理等。
特点和用途:
- 自动化: Shell脚本可以自动执行重复性的任务,减少人工干预。
- 简洁性: 脚本通常使用简短的命令行语法,易于编写和理解。
- 可重用性: 编写一次脚本后,可以多次重复使用。
- 强大的文本处理: 利用shell内置的文本处理功能或外部工具如
sed
、awk
等,进行复杂的文本分析和转换。 - 系统管理: 用于系统启动、监控、备份、恢复等任务。
Shell脚本的基本结构:
-
Shebang: 脚本的第一行通常是shebang(
#!
),指明脚本应该由哪个解释器执行。例如,#!/bin/bash
表示使用Bash解释器。 -
变量: Shell脚本可以定义和使用变量来存储数据。
-
控制结构: 包括条件语句(if-else)、循环(for、while)等。
-
函数: 脚本可以包含函数,以模块化的方式组织代码。
-
注释: 以
#
开头的行是注释,不会被执行,用于解释脚本的功能。 -
命令: 脚本由一系列命令组成,可以是系统命令、shell内置命令或调用其他脚本和程序。
示例:
下面是一个简单的shell脚本示例,该脚本打印出"Hello, World!":
#!/bin/bash
# 这是一个简单的shell脚本
echo "Hello, World!"
保存这段代码为hello_world.sh
,然后按照前面提到的步骤使它可执行并执行它。
Shell脚本是系统管理员和开发人员的重要工具,它们提高了工作效率,减少了错误,并使得复杂的任务变得简单化。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App