Linux基础

发布于 2025-07-12  118 次阅读


一、Linux的历史

(一)Unix操作系统的历史

Unix一开始是使用汇编语言实现的,更偏向底层与硬件挂钩,效率是比较高,但移植性比较差。
Unix的内核后续是使用C语言实现的,C语言其实是在研究Unix系统的副产物。
AT&T公司开始收回Unix的版权,开始闭源和收费。
1983年,Richard Stallman发起了GNU(GNU's Not UNIX)计划,GNU倡导自由、免费,但遗憾的是没有完全开发出GNU Hurd。(GNU采用的是微内核)
1984年,Andrew Tanenbaum教授开发了一个不含AT&T源代码的Unix操作系统,并于1987年实现取名为Minix。
1991年,Linus Torvalds受到Minix的启发开发了初代的Linux。(Linux采用的是宏内核)

(二)Unix操作系统的体系

硬件层——内核层——系统调用——shell与库函数层——应用层。
内核:管理系统的硬件资源。
系统调用:内核提供给外部的接口。
公共函数库:对于复杂的系统调用进行封装。
shell:命令行解释器。

(三)Linux系统的现状

Linux在服务器领域占据75%的市场份额,广泛应于嵌入式领域、移动嵌入式领域、云计算、大数据平台等。
Linux内核版本的网址:https://kernel.org/

二、Linux命令

(一)Linux系统的目录系统

1、Linux常用目录命令
常用命令 作用
cd change the working directory
改变当前的工作目录
ls list directory contents
列出目录下的内容
pwd print name of current/working directory
打印当前目录的路径
mkdir make directories
创建目录
rmdir remove empty directories
删除空目录
tree list contents of directories in a tree-like format
以树状格式列出目录
2、命令示例
//cd 命令示例
cd <绝对路径>;//更换工作目录为<绝对路径>
cd <相对路径>;//更换工作目录为<相对路径>
cd /;//切换工作目录为根目录
cd ~ 或 cd;//切换工作目录为家目录
cd -;//切换为上一次目录
cd .;//切换为当前目录
cd ..;//切换为上一级目录

//ls 命令示例
ls;//列出当前目录下的文件
ls -a;//列出当前目录下的文件(包括隐藏文件)
ls -l;//列出相对比较详细的文件信息
ls -hl;//列出文件大小并以可读大小显示
ls -i;//列出文件的序列号
ll;//等价于ls -al
//Linux系统下,隐藏文件是以"."开头的

//mkdir 命令示例
mkdir <目录名>;//创建一个文件夹
mkdir -p <目录1/目录2/目录3/...>;//连续创建n级目录

//rmdir 命令示例
rmdir <目录名>;//删除一个文件夹
rmdir -p <目录1/目录2/目录3/...>;//连续删除目录,若其父目录变为空,则一并删除
3、Linux系统自带目录的含义
目录名 作用
/bin 此文件下存放的都是二进制可以执行命令文件
/lib 系统使用函数库的目录
/dev 存放系统下所有设备的文件
/proc 一个虚拟的文件系统
/etc 存放系统的各种配置文件
/home 普通用户的家目录
/root root用户的家目录
4、Linux的目录路径

绝对路径:相对于“根目录/”而言的
相对路径:相对于某一个路径而言的

(二)Linux系统的用户系统

1、Linux常用用户命令
常用命令 作用
sudo sudo, sudoedit — execute a command as another user
作为另一个用户执行一个命令
su run a command with substitute user and group ID
切换为root用户或另一用户和组执行命令
useradd 创建一个新用户或更新默认新用户信息
userdel 删除用户账户和相关文件(-r)
exit cause the shell to exit
退出shell
2、命令示例
//useradd 命令示例
useradd <用户名>;//添加一个用户(三无)
useradd -m;//如果用户的主目录不存在,则创建它
useradd -s;//用户登录 shell 的名称

//userdel 命令示例
userdel <用户名>;//删除一个用户
userdel -r <用户名>;//删除一个用户以及相关文件
3、Linux用户文件夹
//查看内容 cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
...
moon:x:1000:1000:Moon,,,:/home/moon:/bin/bash
test:x:1001:1001::/home/test:/bin/sh
//用户名 密码(密文) 用户id 组用户id (注释信息,可有可无) 用户所在的目录 shell的类型
//注意:中间使用冒号分割

//使用下列方式可以创建一个用户test3
//①在/home目录下有对应文件夹test3
//②shell的类型是/bin/bash
sudo useradd -m test3 -s /bin/bash
4、Linux用户的切换

Linux在切换用户时,底层使用的是用户栈,栈中已经存在的用户不能被切换。

注意,Ubantu一般不允许使用root用户登录系统。

(三)Linux系统的命令系统

1、Linux常用命令命令
常用命令 作用
man 系统参考手册的接口
>,>>,<,<< 重定向
2、命令示例
//man 命令示例
man <命令>;//查看命令手册对于该命令的解释

//重定向 命令示例
//标准输入重定向
cat < file;//将file的内容作为输入与cat关联,cat将关联的内容输出
cat << tag;//将tag作为终止符,将tag之间的内容作为输入
//标准输出重定向
echo "hello" > file2;//将"hello"重定向写入file2
cat "world" >> file2;//以追加的形式将"world"写入file2的末尾
//标准错误输出重定向
cat file3 2> file4;//file3不存在,将错误输出写到file4中
cat file3 2>> file4;//将错误输出追加写到file4中
cat file3 > ok.txt 2> err.txt;//若file3存在,重定向到ok.txt;若file3不存在,错误结果重定向到err.txt
cat file3 >> ok.txt 2>> err.txt;//若file3存在,重定向追加到ok.txt;若file3不存在,错误结果重定向追加到err.txt

//特殊的重定向
cat file1 > file3 2>&1;//将file1写入file3,不管正确还是错误
3、Linux命令的特点

(1)重定向
标准输入重定向:<,0,stdin
标准输出重定向:1>,1,stdout
标准错误输出重定向:2>,2,stderr
【fd:文件描述符】对外提供给用户的就是一个简单的数字。(在Linux中一切皆文件)

(四)Linux系统的文件系统

1、Linux常用文件命令
常用创建命令 作用
cat concatenate files and print on the standard output
联系文件并在标准输出上打印
touch change file timestamps
修改文件的时间戳
echo display a line of text
显示一行文本
vim/vi a programmer's text editor
程序员的文本编辑器
常用读命令 作用
head/tail output the first part of files/output the last part of files
输出文件的头部/尾部
more/less file perusal filter for crt viewing/opposite of more
用于CRT查看的文件细读筛选器/与more相反
file determine file type
确定文件类型
Ctrl+B 一次显示上一屏幕
Ctrl+F 一次显示下一屏幕
常用迁移命令 作用
cp copy files and directories
复制文件和目录
mv move (rename) files
移动(重命名)文件
rm remove files or directories
删除文件或目录
常用权限命令 作用
chmod change file mode bits
更改文件的模式位
umask get or set the file mode creation mask
获取或设置文件模式创建掩码
常用查找命令 作用
find search for files in a directory hierarchy
在目录层次结构中搜索文件
grep print lines that match patterns
多文件下,打印匹配模式的行
常用重定向命令 作用
stdin/stdout/stderr standard I/O streams
标准输入/输出流
常用文件系统命令 作用
df report file system disk space usage
报告文件系统磁盘空间使用情况
du estimate file space usage
估计文件空间使用情况
mount mount a filesystem
挂载文件系统
umount unmount filesystems
卸载文件系统
常用文件链接命令 作用
ln make links between files
用来为文件创建链接
2、命令示例
//注:文件名和目录名的目的都是为了找到文件和目录,实际上是路径
//常见文件创建命令
//touch 命令示例
touch <文件名>;//创建一个文件或更改文件的时间戳
touch <文件名>{numx...numy};//批量创建x-y个文件
//echo 命令示例
echo "字符串";//将字符串显示在屏幕上
echo "字符串" > <文件名>;//将字符串输出重定向到一个文件(注意:">"的作用是重定向)
//cat 命令示例
cat <文件名>;//关联文件并将其内容打印出来
cat <文件1> > <文件2>;//关联文件1并将其内容重定向到文件2
//注意:cat适合查看小文件的内容,对于大文件不友好!!!
//vi/vim 命令示例
vim <文件名>;//以vim编辑器的方式打开文件

//常见读文件命令
//head/tail 命令示例
head <文件名>;//输出文件的头部一部分,默认10行
head -n <num> <文件名>;//输出文件的头部一部分,行数为num
tail <文件名>;//输出文件的尾部一部分,默认10行
rail -n <num> <文件名>;//输出文件的尾部一部分,行数为num
//more/less 命令示例
more <文件名>;//以CRT阅读器进行阅读,以一屏为单位
less <文件名>;//以CRT阅读器进行阅读,以一行为单位,同时支持搜索功能("/"+"搜索内容"+"Enter")

//常见迁移命令
//cp 命令示例
cp <文件1> <文件2>;//将文件1的内容拷贝到文件2中,文件2不存在就创建,存在就覆盖
cp -i <文件1> <文件2>;//将文件1的内容拷贝到文件2中,发生覆盖时给出提示选项
cp <文件名> <目录名>;//将文件拷贝到目录下
cp -i <文件名> <目录名>;//将文件拷贝到目录下,发生覆盖时给出提示选项
cp -r <目录1> <目录1>;//将目录1拷贝到目录2中,(-r)调用递归
//mv 命令示例
mv <文件名> <目录名>;//将文件移动到目录中
mv -i <文件名> <目录名>;//将文件移动到目录中,发生覆盖时给出提示选项
mv <文件1> <文件2>;//将文件1重命名为文件2
mv <目录1> <目录2>;//将目录1移动到目录2下,(无需-r)使用指针
//rm 命令示例
rm <文件名>;//删除文件
rm -i <文件名>;//删除文件,给予提示
rm -r <目录名>;//删除空目录
rm -f <目录名>;//强制删除目录
rm -fr <目录名>;//强制递归删除目录及其下属文件
rm *;//删除目录下所有文件
//注意:做文件迁移命令的时候,一定要加上-i以免误删!!!
//危险:"sudo rm -fr /"是删除根目录下所有东西,会引发系统崩溃!!!

//常用链接命令
//ln 命令示例
ln <文件1> <文件2>;//在文件1和文件2之间建立硬链接
ln -s <文件1> <文件2>;//在文件1和文件2之间建立软链接,文件2是文件1的链接文件

//常用权限命令
//chmod 命令示例
//chmod的文字设定法
chmod [who] [+/-/=] <perm> <file>;
//who表示用户,(u:本用户;g:组用户;o:其他;a/(不写):所有)
//(+:增加;-:减少;=:设置为)
//perm:权限(r:读;w:写;x:执行;-:不设置权限)
//示例
chmod u+w,g-x,o=r file1;
//chmod的数字设定法
chmod [num] <file>;
//将"rwx"视为三位二进制数.
//示例
chmod 420 file;

//常用文件查找命令
//find 命令示例
find <起始目录> <查找表达式> <关键字>;
//查找表达式:名字(-name)、用户信息(-user,-uid,-group,-gid)、文件大小(-size)、用户权限(-perm)、文件类型(-type)
//可以使用通配符“*”
//grep 命令示例
grep [Option] <查找表达式> <文件名>;
grep -n;//显示行号
grep -i;//忽略大小写
grep -r;//递归
grep -E;//使用扩展表达式功能
3、Linux文件的类别及标识
颜色 文件类型
黑色 普通文件
蓝色 目录文件
绿色 可执行文件
红色 压缩文件
浅蓝色 链接文件
黄色 设备文件
灰色 其他文件
红色(闪烁) 表示链接的文件存在问题
4、Linux文件的特点

(1)Linux的文件目录是从根目录“/”开始的,对于目录文件默认分配4096B空间。Linux下所有都是文件。
(2)执行“ls -l”之后,文件的显示格式为:
文件类型(1)本用户权限(3)组用户权限(3)其他用户权限(3)——硬链接数目/目录文件的子目录个数——用户id——组id——占用空间大小(以B为单位)——文件最后修改时间——文件名
(3)文件权限:“r:可读;w:可写;x:可执行”.
文件类型:“-:普通文件;d:目录文件;l:链接文件;b:块文件;c:字符设备文件;s:套接字文件;p:管理文件”
(4)Linux不通过后缀识别文件类型,但由于我们在Windows系统上习惯于后缀识别,我们可以也在Linux中带上后缀作为对文件格式的提示。
(5)Linux中可以使用“*”作为通配符。
(6)硬链接:链接逻辑地址指向同一物理地址。
软链接:创建了一个指向文件的快捷方式,链接文件的内容是指向文件的绝对路径,对链接文件的修改、读取操作会通过路径映射为影响指向文件,而修改链接文件的内容原则上对指向文件没有影响。
(7)正则表达式的规则:

①"^":表示以xxx开头;
②"$":表示以xxx结尾;
③".":通配一个字符;
④“*”:通配一个或多个字符,最接近的前方字符可以出现0次~任意次;
⑤"[]":匹配字符集;
⑥"[a~z]":匹配第二个字符是a~z的范围.

(五)Linux系统的内核系统

1、Linux常用内核命令
常用内核系统命令 作用
uname print system information
打印系统信息
lsb_release print distribution-specific information
打印特定发行版的信息

(六)Linux系统的其他命令

常用其他命令 作用
alias define or display aliases
定义或显示别名
sort sort lines of text files
对文本文件的行进行排序
uniq report or omit repeated lines
报告或省略重复行
wc print newline, word, and byte counts for each file
打印每个文件的换行符、单词和字节统计信息
xargs build and execute command lines from standard input
从标准输入构建并执行命令行
tar an archiving utility
压缩、解压命令
scp OpenSSH secure file copy
OpenSSH 安全文件复制
sed stream editor for filtering and transforming text
用于过滤和转换文本的流编辑器
vimdiff edit between two and eight versions of a file with Vim and show differences
使用 Vim 编辑一个文件的两个到八个版本,并显示差异。

三、vim的使用

(一)vim的模式

1、普通模式(正常模式)

移动:h左移;j下移;k上移;l右移;^移动到行首;$移动到行尾;gg跳转到文档开始;G跳转到文档结尾
删除:x删除一个字符,nx删除n个字符;dw删除一个单词,ndw删除n个单词;dd删除一行,ndd删除n行
撤销:u
复制:yy复制一行,nyy复制n行
粘贴:p

2、编辑模式(插入模式)

进入插入模式:i在光标前,a在光标后;I跳行首,A跳行尾;o在下一行,O在上一行

3、命令模式

进入命令模式:“:”或“/”
"/":进入搜索,n向下跳转到下一个结果,N向上跳转到上一个结果
“:":进入命令,w保存,wq保存退出,w!强制保存,q!强制退出;

//替换命令
:s/<查找项>/<替换项>/g;//将光标所在行的所有<查找项>替换为<替换项>
:%s/<查找项>/<替换项>/g;//将所有行的所有<查找项>替换为<替换项>
4、可视化模式
v 或 Ctrl + v;//进入可视化,v选行,Ctrl + v 选列
移动;//移动光标选择
Shift + i;//即"I"回到行首
输入字符;//可视化中选中的单元都会插入字符
ESC;//退出

(二)在vim中编程

1、安装vimplus
2、安装插件
3、安装编译器
sudo apt install gcc g++ gbd;//安装编译器

gcc <file.c>;//编译C程序
g++ <file.cpp>;//编译C++程序

./file.out;//执行生成的程序,注意要加'./'表示当前目录,否则默认去/bin目录下寻找文件
4、程序执行过程
//只进行部分过程的方式
gcc -E;//进行到预处理阶段.i文件,处理#的内容,这里不会对语法错误报错
gcc -S;//进行到编译阶段生成.s文件,进行一系列的词法分析,语法分析,语义分析以及优化,会对语法错误报错
as main.s -o main.o;//进行到汇编阶段生成.o文件,可以使用nm命令查看二进制文件
gcc main.o -o main.out;//进行到链接阶段生成.out文件

(三)生成库

1、生成静态库
//特点:***.a,一般以lib开头
gcc -c add.c -o add.o;//编译源代码
ar crsv libadd.a add.o;//将add.o打包称为静态库libadd.a
sudo cp libadd.a /user/lib;//将libadd.a拷贝到系统库中
gcc main.c -o main -ladd;//"-ladd"的作用是链接add
2、生成动态库
//特点:***.so,一般以lib开头
gcc -c add.c -o add.o -fpic;//"-fpic"选项是为了生成与位置无关的共享的目标代码
gcc -shared -o libadd.so add.o;//打包成为一个动态库,注意加了一个"shared"
sudo cp libadd.so /user/lib;
gcc main.c -o main -ladd;

附录

(一)常用安装软件

安装帮助手册:sudo apt install manpages-posix-dev
安装树状目录:sudo apt install tree
安装vim:sudo apt install vim(可以使用vimtutor练习操作方法)

(二)常用网站

Linux内核版本的网址:https://kernel.org/
Linux命令查询中文网址:https://wangchujiang.com/linux-command/

(三)常用软件包管理器

1.rpm

命令格式:rpm -参数 软件包名

参数 英文 含义
-q query 使用询问模式,当遇到问题询问用户
-a all 查询所有软件包
-i info 显示软件包的概要信息
-l list 显示软件包中的文件列表
-f file 显示文件对应的软件包
-e erase 卸载软件包
-e -nodeps 卸载前跳过依赖检查

安装命令:rpm -ivh 软件包名

参数 英文 含义
-i install 安装
-v verbose 打印提示信息
-h hase 显示安装进度

2.yum

命令格式:yum [options] [command] [package]

命令 含义
yum check-update 检查是否有升级
yum update 升级软件(没有则安装)
yum install 安装软件
yum list 列出可安装软件清单
yum remove 删除软件包
yum search 查找软件包
yum repolist all 列出当前可用仓库
yum clean all 清除仓库缓存

学习是一段漫长的旅途