前言:
你是否也曾经为Linux所困扰过,在网上找的资料零零散散,是否学完Linux后还是懵懵懂懂,别怕,这篇博客是博主精心为你准备的,现在,就让我们一起来走进Linux的世界,决战Linux!
1.历史
Linux是一个类Unix的操作系统,在1991年,Linus从Unix的衍生版本Minix的基础上进行修改,设计出了Linux的第一个版本0.01
Linus把Linux发布到论坛上,其他开发者觉得这个系统设计得不错,越来越多的人参与到Linux的开发和修改中,Linux操作系统变得越来越完善和强大,最终形成了今天的Linux生态。
目前Linux内核属于GNU计划的一部分,源代码遵循GPL开源协议,要求修改发布者也必须开源。
2.Linux操作系统的组成
Linux系统指的是使用Linux内核的操作系统,使用标准Linux内核的系统叫做Linux的发行版
Linux内核完全免费开源,可以在www.kernel.org上下载
mainline:最新开发主线
6.10-rc6 ------------------ 6.10版本的第6个开发板
stable:最新稳定版
6.9.7
longterm:长期支持维护的版本
6.6.36 .... 4.19.316 注:EOF表示即将从官方维护列表中删除
Linux内核版本号:
主版本号.次版本号.维护版本号
主版本号修改:内核架构进行大幅重构 次版本号修改:内核某些模块进行了更新 维护版本号:修正BUG
Linux的发行版:
通常所说的Linux系统包括Linux内核和外部组件,库,应用程序组成的一个可以直接使用的操作系统,一般叫做Linux发行版
Debian: Ubuntu RedHat: centos Fedora
3.Linux内核的子系统
任务管理和调度
内存管理
设备驱动
网络子系统
虚拟文件系统
4.Linux文件系统的组成
cpp
bin:所有用户都可以使用的命令
sbin:系统命令(管理员命令)
usr:用户命令和相关文件
dev:设备文件
etc:配置文件
home:用户目录
lib:库文件
media:存储设备挂载目录
mnt:目录挂载点
opt:应用程序和服务
proc:proc文件系统挂载点
sys:sysfs文件系统挂载点
root:超级管理员用户目录
tmp:存放临时文件
var:存放日志文件
5.Linux命令
打开终端 ------------------- ctrl + alt + t
ls --------------------------- 查看指定目录下的内容
用法:ls 目录
-l:详细信息
-a:包括隐藏文件
- ls -l
压缩与解压命令
Linux下最常用的压缩包格式是:
- gz
- bz2
- zip
- xz
其中,gz和bz2格式一般都是通过tar命令来控制的,xz和zip格式各自由它们的同名命令控制。
- tar
- 释义:归档、释放、压缩、解压
常用选项:
cpp
-c 创建归档文件或压缩文件
-x 释放归档文件或解压文件
-t 用于查看压缩或归档文件中的数据
-f 用于指定目标操作的文件 (在选项f后面必须紧接需要操作的归档或压缩文件)
-v 用于输出压缩或解压的过程
-z 指定解压或压缩的目标类型是 gz 格式
-j 指定压缩或解压的目标类型为 bz2 格式
-J 指定【解压】的目标文件格式为 xz 格式
-C 指定解压的目标路径
- 常见用法:
cpp
第一,归档与释放:
gec@ubuntu:~$ tar cf a.tar dir/* ==> 将目录dir中的所有文件归档成a.tar
gec@ubuntu:~$ tar tf a.tar ==> 查看归档文件a.tar
gec@ubuntu:~$ tar xf a.tar ==> 释放归档文件a.tar
第二,压缩与解压:
gec@ubuntu:~$ tar czf a.tar.gz dir/* ==> 将目录dir中的所有文件归档并压缩为gz格式
gec@ubuntu:~$ tar tf a.tar.gz ==> 查看压缩文件a.tar.gz
gec@ubuntu:~$ tar xzf a.tar.gz ==> 解压压缩文件a.tar.gz
gec@ubuntu:~$ tar cjf a.tar.bz2 dir/* ==> 将目录dir中的所有文件归档并压缩为bz2格式
gec@ubuntu:~$ tar tf a.tar.bz2 ==> 查看压缩文件a.tar.bz2
gec@ubuntu:~$ tar xjf a.tar.bz2 ==> 解压压缩文件a.tar.bz2
第三,指定路径:
gec@ubuntu:~$ tar -xf a.tar -C /tmp ==> 将文件释放到/tmp
gec@ubuntu:~$ tar -xzf a.tar.gz -C /tmp ==> 将文件解压到/tmp
- 注意:
-
- 归档只是简单的将文件归拢到一起,不涉及压缩算法,文件不会变小
- 压缩会用到压缩算法,文件总体会变小。
- xz
- 释义:压缩与解压
- 压缩操作:
- 先使用tar对所需文件进行归档
- 然后再使用 xz命令进行压缩
- 解压操作:
- 先使用 xz命令进行解压
- 然后再使用tar对所需文件进行释放归档
- 压缩操作:
- 常见用法:
cpp
gec@ubuntu:~$ xz a.tar ==> 将文件a.tar压缩成a.tar.xz
gec@ubuntu:~$ xz --decompress a.tar.xz ==> 解压a.tar.xz
tar -Jxvf test.tar.xz ==> 使用tar的J选项直接解压xz格式文件
- 注意:
- xz只能压缩单个文件,因此xz一般与tar配合使用,即:先用tar将要压缩的若干文件或目录归档成一个tar包,然后用xz将tar包压缩成xz格式压缩包。
zip
zip不是系统自带的命令,一般需要自己手工安装:
gec@ubuntu:~$ sudo apt install zip
- 释义:压缩与解压
- 常见用法:
cpp
gec@ubuntu:~$ zip a.zip file dir/ ==> 将指定的文件和目录压缩成a.zip
gec@ubuntu:~$ unzip a.zip ==> 解压a.zip
cd ---------------- 切换当前路径
相对路径:以当前位置作为起点,.表示当前位置,..表示上一级目录
绝对路径:以根目录作为起点
~ 代表是home目录,也就是家目录, / 代表的是根目录
~ 表示当前登录用户的家目录,而
/home 目录则是存放所有用户家目录的目录。您可以使用
~来表示当前用户的家目录,无论他们实际上的家目录是在
/home 目录下的哪个子目录中。
cpp
问:root超级用户是存储在/home/目录之下吗
答:在大多数Linux系统中超级用户的主目录一root般是 /root,而不是 /home 目录下的某个子目录。/root 目录是 root 用户的家目录,类似于普通用户的家目录 /home/username
普通用户的家目录一般存储在 /home 目录下,然后在其下创建对应的用户名目录(例如/home/username )来存储普通用户的文件和配置。而root用户的家目录 /root 则是位于根目录下。
总结就是:
/home目录通常存储普通用户的家目录。
/root是 root 超级用户的家目录。
因此,root超级用户一般的家目录并不存储在/home目录之下。
cpp
问:普通用户如gec存储在/home/之下,那为什么gec可以往回遍历到/之下,不是最多到home吗
答:在Linux文件系统中,普通用户的家目录通常位于/home/username下,比如您提到的username是gec,则它的家目录一般是 /home/gec。
在Linux中,每个用户都有一个用户名和一个用户ID,普通用户在登录时会被分配一个特定的(UID)用户ID,用于识别和管理其对文件系统的访问权限。当普通用户登录系统后,它的当前工作目录会是其家日录 /home/gec,这是其默认启动位置。
尽管普通用户的家目录是 /home/gec,但在Linux中,任何用户(包括普通用户)都可以查看整个文件系统的目录结构,只要对相应的目录有足够的访问权限。也就是说,虽然普通用户的家目录是/home/gec,但它仍然可以通过绝对路径或相对路径访问整个文件系统,包括/根目录。
总结一下,普通用户的家目录仅仅是其默认的工作目录,可以确保用户在登录后能够直接访问到自己的文件和目录;但是用户仍然可以通过绝对路径或相对路径访问整个文件系统,只要对相应的目录有权限。
cpp
cd 切换工作路径 (跳转到指定的文件夹下)
常见用法
cd 直接切换到当前用户的家目录
cd ~ 同上(~ 波浪号就是当前用户的家目录的缩写)
cd / 切换到系统的根目录 ( / 就是指根目录 )
cd - 切换到上一次所在的路径(方便在两个路径之间相互切换)
cd .. 切换到上一层路路径 (.. 指的是上一层路径)
cd ../Even/Dir 切换到上一层路径的Even里面的Dir 中 (使用的是相对路径)
cd /home/even/Dir 切换到根目录中的home 里面的even 里面的Dir (使用的是绝对路径)
cd /mnt 切换到根目录的mnt 中 (在子系统或虚拟中 mnt 用于挂载Windows 共享进来的文件夹)
pwd --------------- 显示当前所在路径
clear -------------- 清屏命令
man -------------- 帮助手册
cpp
用法:
man 命令/函数
man -f *** ----------- 显示所有有关指定内容的帮助信息
man 3 *** ----------- 查阅第3章中有关指定内容的帮助信息
mkdir ------------- 创建目录
cpp
mkdir 目录路径
创建的目录必须不存在
创建目录的上一级必须存在,如果要同时创建上一(几)级目录,可以加选项-p
rmdir ------------- 删除空目录
cpp
rmdir 目录路径
注:如果要删除非空目录,使用rm -rf,慎用
//sudo rm -rf /* ---------- 删库跑路
touch ---------------- 创建空文件
touch 文件名
rm ---------------- 删除文件
rm 文件路径
cp -------------- 拷贝命令
cpp
cp 用于复制指定的文件到指定的路径下
cp abc.c 123.c 把当前目录下的文件 abc.c 复制为 123.c
cp ../123.c ./Dir/456.c 把上一级目录中的123.c 复制到当前目录的Dir里面 并且名字为 456.c
cp ./Dir/456.c ../../ 把当前目录下的Dir 中的456.c 复制到 上一层目录的上一层目录中,并保持名字不变
mv --------------- 剪切命令
cpp
用法:
mv 原文件路径 目标目录
sudo 临时使用超级用户的权限做某事
cpp
我们在Ubunt中默认是以普通用户登录的,因此在非本用户的家目录中进行增删改查大概率会由于没有权限而被拒绝Permission denied 因此需要临时使用超级用户去做
比如 touch /123.c 出现问题 则可以改为 sudo touch /123.c
6.共享文件夹
使用共享文件夹互通windows和Ubuntu文件是最简易的方法,方法如下:
cpp
1.在windows创建一个空目录
2.点击虚拟机菜单的设置按钮,在选项页面使能共享文件夹,添加创建的目录
3.共享文件夹在Ubuntu的路径为 /mnt/hgfs/共享文件夹名
7.文件操作命令
(1)查看文件内容 ---------------- cat/head/tail/more/less/hexdump
cpp
cat用法:(查看文件所有内容)
cat 文件名(当前路径无需加路径,其他路径要加路径)
如: cat main.c cat ../main.c
head用法:(查看文件开头的内容,默认10行,用-n指定行数)
head 文件名(当前路径无需加路径,其他路径要加路径)
如:head main.c (默认显示文件前10行)
head -15 main.c (表示显示文件前15行内容)
tail用法:(查看文件末尾的内容,默认10行,用-n指定行数)
tail 文件名(当前路径无需加路径,其他路径要加路径)
如: tail main.c (默认显示文件后10行)
tail -15 main.c (表示显示文件后15行内容)
more用法:(按页显示文件内容,回车/空格翻页,q退出浏览)
more 文件名(当前路径无需加路径,其他路径要加路径)
如: more main.c more ./main.c
less用法:(按页显示文件内容,上下键/翻页键/回车/空格翻页,q退出浏览)
less 文件名(当前路径无需加路径,其他路径要加路径)
如: less main.c less ./main.c
less是more的加强版,可以方向键滚动,支持搜索跳转等功能
hexdump用法:(用16进制显示文件内容)
hexdump 文件名(当前路径无需加路径,其他路径要加路径)
如: hexdump main.c hexdump ./main.c
(2)修改文件权限 ------------------------- chmod
cpp
1.chmod 目标用户(+或者-)权限 文件名(当前路径无需加路径,其他路径要加路径)
u:文件所有者
g:同组用户
o:其他用户
a:所有用户
+:添加权限
-:去掉权限
r:读权限
w:写权限
x:执行权限
比如:chmod u+x byebye.c ----------- 为文件所有者添加执行权限
chmod 777 hello.c --------为所有用户添加读写执行操作权限
2.chmod 权限数字 文件路径
权限数字用三位8进制表示 rwx
比如:chmod 644 hello.c ----------- 改为rw-r--r--权限
cpp
- chmod 777 hello.c
- 777 是一个三位数的八进制(octal)表示法,用于指定新的权限设置。在这个上下文中,每一位数字都代表了一组不同的用户(或用户组)的权限。
- 第一位数字(7)代表文件所有者的权限。
- 第二位数字(7)代表与文件所有者同组的用户的权限。
- 第三位数字(7)代表其他所有用户的权限。
每个数字(0-7)都是对读(r=4)、写(w=2)和执行(x=1)权限的二进制和表示。因此:
- 7 = 4(读)+ 2(写)+ 1(执行)
所以,chmod 777 hello.c 的意思是将文件 hello.c 的权限设置为所有用户(文件所有者、与文件所有者同组的用户、其他所有用户)都可以读、写和执行该文件。
(3)创建链接文件 ------------------ ln
如果多个文件在磁盘中使用同样的存储位置,就叫做链接文件
链接文件分为软链接和硬链接
硬链接相当于原文件的别名,不依赖于原文件,硬链接的创建命令:
ln 原文件名 硬链接文件名 如: ln main.c man 硬链接相当于创建了一个原来文件的别名,通过硬链接文件可以对原文件内容进行 访问并更改,原文件位置更改对硬链接文件无影响,删除了硬链接文件对原文件 无影响
软链接相当于快捷方式,依赖于原文件,软链接的创建命令:
ln -s 原文件名 软链接文件名 如: ln -s main.c man 软链接相当于创建了一个快捷方式指向原文件,通过软链接文件可以对原文件内容 进行访问并修改,原文件位置更改则软链接文件失效,删除了软链接文件对原文件 也无影响。
(4)查看文件和文件夹所占磁盘空间大小 ------------------ du
cpp
du -sh 文件名文件名(当前路径无需加路径,其他路径要加路径)
如: du -sh ../main.c
(终端输出:)88K ../hello(88K为88KB)
(5)比较文件内容的命令 ------------------- cmp/diff
cpp
cmp 文件1 文件2 //提示第一个不同内容的位置
如: cmp man.c hello.c
diff 文件1 文件2//提示所有不同内容的位置
如: diff man.c hello.c
(6)显示文件部分内容 ------------- cut
cpp
cut -b 1-5 文件 --------------- 显示每行指定位置内的字节内容
如: cut -b 1-5 main.c
cut -d ' ' -f 1-3 文件 -------- 以空格作为分隔符
如: cut -d ' ' -f 1-3 main.c
(7)统计文件中行 单词 字符个数 ------------- wc
cpp
wc 文件名(当前路径无需加路径,其他路径要加路径)
输出结果:文件总行数 文件单词数(空格分单词) 总字符数 文件名
加以下命令可单独显示:
-l:显示行数
-w:显示单词数
-c:显示字符数
//注:可以使用管道将一个命令的结果传递给另一个命令作为参数
如:ls -l | wc
将ls的输出结果作为参数给wc命令统计
(8)查看文件属性信息 -------------- file
cpp
file 文件名(当前路径无需加路径,其他路径要加路径)
如:file main.c
输出:
gec@ubuntu:~/hello$ file main.c
main.c: C source, ASCII text
(9)查看磁盘空间信息 ------------------ df
cpp
df 磁盘设备文件名(当前路径无需加路径,其他路径要加路径)
输出:
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda5 30268356 16987560 11717916 60% /
(10)查找命令文件的路径 -------------- whereis
whereis 命令名 如:whereis ls
(11)文件查找命令 ------------------ find/grep
cpp
1.根据文件属性(文件名 大小 属主...)查找文件
find 要查找的目录 -name "文件名";
如:find /home -name "*.c"(查找/home目录下的所有.c文件)
2.根据文件内容查找文件
grep "内容" 多个文件
grep -R "内容" 目录
如:grep "int" main.c man.c(查找文件中包含int的文件)
grep -R "int" /home(查找/home目录中包含int的文件)
在查找时可以使用通配符进行模糊查找
cpp
* - 代表任意个任意字符
? - 代表1个任意字符
如:find /home -name "*.c"(查找/home目录下的所有.c文件)
(12)树状显示目录的结构 ---------------- tree
tree 目录路径 如: tree hello
(13)压缩和解压命令 --------------- tar
tar是一个打包和解包的命令
tar命令允许在打包时同时进行压缩,常见的压缩格式:bz2 gz xz
cpp
打包:
tar -cvf 包名.tar 要打包的文件和目录
tar -cjvf 包名.tar.bz2 要打包的文件和目录
tar -czvf 包名.tar.gz 要打包的文件和目录
tar -cJvf 包名.tar.xz 要打包的文件和目录
eg: tar -cjvf hello.tar.bz2 main.c man.c
解压:
tar -xvf 包名.tar
tar -xjvf 包名.tar.bz2
tar -xzvf 包名.tar.gz
tar -xJvf 包名.tar.xz
eg: tar -xjvf hello.tar.bz2
c - 打包
x - 解包
v - 显示过程
f - 文件操作
j - bz2格式
z - gz格式
J - xz格式
(14)挂载和卸载命令 --------------------------- mount/umount
cpp
mount -t 类型 挂载设备 挂载点
umount 挂载点
比如:
sudo mount -t vfat /dev/sdb1 /media/gec/U
8.linux用户命令
(1)使用系统权限 --------------- sudo
sudo 命令
(2)切换用户 ------------------ su
su 用户名
(3)修改密码 ------------------ passwd
(4)查看当前登录用户 ---------- whoami
(5)添加用户/用户组 -------- adduser/addgroup
adduser 用户名 addgroup 组名
(6)删除用户/用户组 ------- deluser/delgroup
deluser 用户名 delgroup 组名
(7)设置用户信息 ------------- usermod
usermod -d 新的用户目录 用户名 -------- 修改用户目录 usermod -L 用户名 -------------------- 封禁用户 usermod -U 用户名 -------------------- 解封用户
9.linux进程相关命令
(1)查看当前系统的进程 ----------------- ps
//查看系统所有进程 ps -elf ps aux
(2)杀死进程 ------------------ kill/killall
kill -9 进程号 killall -KILL 进程名
(3)动态查看进程状态 -------------- top
(4)查看进程间的关系 -------------- pstree
10.linux网络命令
(1)设置/查看网卡信息 -------------- ifconfig
ifconfig (显示当前网络信息) ifconfig 网卡名 ifconfig 网卡名 up/down ------- 启动/关闭网卡 ifconfig 网卡名 ip ------------ 修改ip
(2)测试网络是否联通 ------------ ping
ping ip ping 域名
5.网络配置
(1)通过配置文件修改网络配置
cpp
1./etc/network/interfaces
sudo vim /etc/network/interfaces
(2)修改虚拟机的网络配置
NAT模式ip要自动获取,桥接模式都可以(最好手动)
注意:如果虚拟机虚拟网卡有问题,需要重置虚拟机的网络
(3)重启虚拟机网络
cpp
重启ubuntu
重置网络
sudo /etc/init.d/networking force-reload
sudo /etc/init.d/networking restart
结束语:
最后,很感谢你耐心看到了这里,相信你也对Linux操作系统有了一些新的认识,现在,打开你的电脑,挑选一个你喜欢的Linux版本,尽情享受输入命令按下回车的感受吧!