Linux 系统简介
- 1969 年,AT&T 公司的⻉尔实验室P MIT 合作开发的 Unix,í在于创建⼀个⽤于⼤型、并⾏、多⽤户的操作系统
- Unix 的推⼴:从学校⾛进企业
- Unix 的版本要两个:
- AT&T System V ——就是俗称的 系统 5
- Berkley Software Distribution (BSD)
- linux是一种操作系统
- 1991 年,芬兰赫尔⾟基⼤学的学⽣ Linus Torvals 为了能在家⾥的 PC 机上使⽤与学校⼀的操作系统,开始编写了类 UNIX.
- 1991.8.25,Linus在comp.os.minix新闻组中首次发布了一个linux内核的公共版本
流行的linux版本
- Solaris
- IBM AIX
- Red Hat
- Fedora Core
- SUSE
- Debian
- Mac OS X
- Ubuntu
带LST 表示长期测试版本
Linux操作系统的组件
- Linux内核
- Shell
- 文件系统
- 应用程序
Linux内核
- Linux系统的最低层,提供了系统的核心功能并允许进程以一种有序的方式访问硬件
- 用于控制进程、输入、输出设备、文件系统操作、管理内存
- 这些都不需要用户参与,系统自行完成
Linux内核版本
- 主版本
- 1.0 2.0 2.2 2.4 2.6
- 2,3年更新
- 稳定版
- 2.0.40 2.2.12 2.4.18 2.6.35
- 1,2月更新
Linux内核结构
Shell介绍
- Shell是一个命令行解释器,它使用用户能够与操作系统进行交互
- Shell类型
- Bourne Shell:最早的Shell
- C Shell
- Bourne again Shell
ubuntu软件包管理机制简介
Ubuntu Linux采用了Debian的软件包管理机制。由于软件包具有易用性、灵活性和扩展性的特点,再加上Internet的支持,使用户随时都能拥有最新的Ubuntu系统。
流行的两种软件包管理机制
DebianLinux的管理机制–Deb软件包
Redhat’Linux的管理机制-Rpm软件包
Ubuntu Linux系统的软件包管理机制延续了Debian的包管理方法
Debian 包文件包含了二进制可执行文件、库文件、配置文件和 man/info 帮助页面等文档。通常Debian 包文件的后缀为.deb,因此称为“Deb 软件包”。
Ubuntu 有两种类型的软件包:二进制软件包(deb)和源码包(deb-src)。
- 二进制软件包(Binary Packages):包含可执行文件、库文件、配置文件、man/info 页面版权声明和其他文档。
- 源码包(Source Packages):包含软件源代码、版本修改说明、构建指令以及编译工具等。
先由 tar 工具归档为.tar.gz 文件,然后再打包成.dsc 文件。
在/etc/apt/source.list 中查看我们的两种包类型
vi /etc/apt/sources.list
二进制/源码包 访问的地址 ubuntu发行版本的一种 软件包组件
软件包组件:
main :完全的自由软件
restricted :不完全自由的软件
universe :ubuntu官方不提供支持和补丁,全靠社区支持
multiverse:非自由软件,完全不提供支持和补丁
在UbuntuLinux中,软件包的命名遵循以下约定:
如:
软件包名:g++
软件版本:4.1.2
修正版本:9
体系架构:i386
包类型:deb包
软件包:g++_4.1.2-9ubuntu2_i386.deb
Linux文件系统
Linux 的文件组织模式犹如一颗倒置的树,这与 Windows 文件系统有很大差别。
所有存储设备作为这颗树的一个子目录。存取文件时只需确定目录就可以了,无需考虑物理存储位置。Linux 文件系统
路径 | 含义 |
/bin | bin是二进制(binary)英文缩写 |
/boot | 存放的都是系统启动时要用到的程序 |
/dev | 包含了所有Linux系统中使用的外部设备 |
/etc | 存放了系统管理时要用的到的各种配置文件和子目录 |
/lib | 存放系统动态连接共享库的 |
/home | 普通用户的主目录 |
/root | 根用户(超级用户)的主目录 |
… | … |
Linux基础命令
切换目录
. 当前目录
…上层目录
相当于/home/用户名的路径
用户:
cd /home/linux/Desktop
cd ./Desktop
../
-
新建文件
复制文件
移动文件
Vim编辑器
我们想要编写 C 语言代码,可以使用 linux 系统提供的工具才能进行代码的编写。代码编写完成之后,我们还需要验证书写的代码是否正确。这就需要编译器来进程验证。linux 系统为我们提供了比较好的开发工具。
vim编辑器:缩写代码的工具
gcc编译器:编译代码的工具
模式 | 使用方法 |
命令模式 | 默认打开的默认,不能书写代码,只能进行复制,粘贴等命令操作 |
插入模式 | 按下小写的 “i"键,在终端的左下角会出现一个叫做"insert” 的关键字,便是进入插入模式,可以书写代码了 |
底行模式 | 代码书写完毕键,按下 esc 键,退出插入模式。在按下 shift +“:”键盘,可以使用以下指令: w保存,write 的缩写 q退出,quit 的缩写 a 所有,al的缩写!强制执行 |
常用指令:wq q! |
命令 | 功能 |
a | (Append)进入编辑状态,从当前光标之后的位置开始插入键盘输入的字符 |
i | (Insert)进入编辑状态,从当前光标之前的位置开始插入键盘输入的字符 |
o | (0pen)进入编辑状态,并插入一新行,光标移到该新行的行首,以后键盘输入的字符将插入到光标位置 |
ESC | 进入命令状态 |
:! Command | 在vi中执行外部命令Command,按回车键可以返回vi继续工作 |
[N]x | (Expurgate)删除从光标位置开始的连续N个字符(并复制到编辑缓冲区) |
[N]dd | (Delete)删除从光标位置开始的连续N行(并复制到编辑缓冲区) |
[N]yy | (Yank)复制从光标位置开始的连续N行到编辑缓冲区 |
p或P | (Put)从编辑缓冲区复制文本到当前光标位置(即贴) |
u | (Undo)取消上一次操作(即恢复功能) |
:q | (Quit)退出没有修改的文件(若文件被修改了而没有保存,则此命令无效) |
:q! | 强制退出,且不保存修改过的部分 |
:w | (Write)保存文件,但不退出 |
:x | (Exit)保存文件并退出 |
:w File | 另存为File给出的文件名,不退出 |
:r File | (Read)读入File指定的文件内容插入到光标位置 |
GCC 编译器介绍及使用
GCC 它是由 GNU 开发的编程语言编译器。它是 GNU Compiler Collection 的缩写。可以用来编译
C,C++,0bject-C 等多种语言。
安装
sudo apt-get insatll gcc
gcc hello.c 编译代码,系统默认会在当前目录下,生成一个叫做 a.out 的文件.【all out]
/a.out 执行 a.out 文件,输出对应的结果
gcc hello.c -o exec 编译代码,用户自定义生成的可执行文件名字,
/exec 执行./exec 文件,输出对应的结果
参数说明:
- E 使编译器在预处理结束的时候停止
- S 使编译器在编译结束的时候停止
- c 使编译器在汇编结束的时候停止
- o 输出 gcc 编译的结果
ubuntu软件安装命令详解
软件包安装工具简介
简介
我们常常使用的软件包管理工具有两种,一种叫做dpkg软件包管理工具,它是debian package”的简写,是Debian软件包管理器的基础。它是最早的deb软件包管理工具,他在Debian Linux一提出软件包管理模式后就诞生了。使用dpkg可以实现软件包的安装、编译、卸载、查询,以及应用程序打包等功能。但是由于当时Linux系统规模 和Internet网络条件的限制,我们使用dpkg安装软件包的时候需要考虑软件包之前的依赖关系。也有人把它叫做本地安装工具。总之,dpkg是一个底层的软件包管理系统,主要用于对已下载到本地和已安装的软件包进行管理。
依赖关系图示
基于这个特性,我们的 dpkg 安装一般来说有可能要安装多个软件包。而我们 linux 系统中的依赖关系相对复杂,因此就定义了一个依赖关系表以及优先级表。Ubuntu 中为每个软件包指定了一个优先级作为软件包管理器选择安装和卸载的一个依据。
依赖性关系定义
依赖关系 | 关系描述 |
依赖(depends) | 要运行软件包A必须安装软件包B,甚至还依赖于B的特定版本,通常版本依赖有最低版本限制 |
推荐(recommends) | 软件包维护者认为所有用户都不会喜欢缺少软件包A的某些功能,而这些功能需要B来提供 |
建议(suggests) | 软件包B能够增强软件包A的功能 |
替换(replaces) | 软件包B安装的文件被软件包A中的文件删除或覆盖了 |
冲突(conflicts) | 如果系统中安装了软件包B,那么软件包A将无法运行。“Conficts常和“Replaces”同时出现 |
提供(provides) | 软件包A中包含了软件包B中的所有文件和功能 |
软件包优先级描述
级别 | 含义 | 补充说明 |
Required(必须) | 该级别软件包是保证系统正常运行所必须的 | 包含所有必要的系统工具。尽管Require级别的软件不能满足整个系统的服务,但至少能够保证系统正常启动。如果删除其中一个软件包,系统将受到损坏而无法恢复。例如bash、mount、upstart |
Important(重要) | 若缺少该级别软件包,系统会运行困难或不好操作 | 该级别软件包是一些实现系统底层功能的程序。例如,aptitude、ubuntu-keyring、cpio |
Standard(基本) | 该级别软件包是任何Linux系统的标准件 | 该级别的软件包可以支撑命令行控制台系统运行,通常作为默认安装选项,例如,memtest86、teInet、pppconfig、ed |
Optional(可选) | 该级别软件包是否安装不影响系统的正常运行 | 该级别的软件包用于满足用户特定的需求或服务,它们不会影响系统的正常运行。例如,X11、mysqlopenoffic.org |
Extra(额外) | 该级别软件包可能与其他高级别软件包存在冲突 |
安装软件(本地安装)
sudo dpkg -i 软件包[安装单个软件包]
sudo apkg -i *.deb [多个软件包一起安装]
移除已经安装的软件包
sudo dpkg -r 软件包名
移除已安装的软件包及配置文件
sudo dpkg -P 软件包名
列出软件包所在系统所安装的文件
sudo dpkg -L 软件包名
列出软件包安装状态
sudo dpkg -s 软件包名
apt-get软件包安装(联网安装)
镜像站点服务器
APT系列工具可能是Deb软件包管理工具中功能最 强大的。它会自动检测软件包之间的依赖关系。因为它采用了集中式的软件仓库的机制,将各式各样 的软件包分门别类地存放在软件仓库中,进行有效地组织和管理。然后,将软件仓库置于许许多多的镜像服务器中,并保持基本一致。(可理解为我们上网的时候,有很多的网站,网站中有一些下载的链接,这里下载的链接中就又很多的软件包,这就是软件包仓库,这里的镜像站点服务器可理解为下载的网站)。这些镜像服务器就是它们的软件源(下载网站的集合)
我们可以在/etc/apt/source.list中来查看我们的软件源。这个路径就叫做镜像站点服务耐
索引文件
我们的镜像站点服务器只是告诉了我们。我们的软件包应该在哪里去下载。但是我们这些镜像站点具体拥有哪些资源,对我们来说,不是很清楚。如果,我们每安装一个软件包就到我们的服务器上去寻找一遍,这样的话效率就太低了。因此,我们提出了-个概念,叫做索引文件。它的本质就是我们为服务器上的软件资源在本地列了一个清单,以便于主机进行查询操作。(可理解为网站服务器在本地的缓存)
我们可以在/var/lib/apt/lists/ 这个目录来查看
下载软件包存放的路径
我们在windos上下载软件的时候,一般是会把.exe的安装包下载到一个指定的路径,然后双击它进行安装。我们的ubuntu也是一样的。只不过这个下载路径是固定的。我们可以到/var/cache/apt/archives这个目录下来查看我们的软件包
/etc/apt/source.list[文件] | 镜像站点服务器 |
/var/lib/apt/lists [文件夹] | 网站服务器到本地的缓存 |
/var/cache/apt/archives [文件夹] | 下载到本地的软件包 |
安装命令
安装软件
sudo apt-get install 软件包名
卸载软件
sudo apt-get remove 软件包名
更新索引文件
sudo apt-get update
清空存放下载软件包的目录
sudot-get clean
总结
Linux用户管理
在 linux 中系统中,它并不认识帐号名称。它认识的是我们的帐号 ID,帐号 ID 保存在/etc/passwd文件中。我们在登录 linux 主机时,在输入完帐号和密码时,linux 会先查找/etc/passwd 文件中是否有这个帐号,如果没有则跳出,如果有的话,他会读取该帐号的userID 和 group ID 同时该帐号的根目录和 shell 也读了出来。然后在去核对密码表,在/etc/shadow 中找出我们刚刚输入的帐号和userID,核对我们输入密码是否正确。一切正确我们可以登录到当前用户 shell。那么,我们首先了解一下一些基本的概念
常见用户分为:
- 超级用户 root:具有最高的权限,UID=0,GID=0
- 系统用户:主要服务于系统应用,维护系统运行,不能登录。例如uucp daema等
- 普通用户:登录的用户
组:具有相同权限的用户的集合。
帐号名称:帐号名称由于对应用户ID,这个是系统默认用户root超级管理员,在同一个系统帐号名称是唯一的,长度根据不同的1inux系统而定,一般是8
密码:由于系统中还有一个/etc/shadow文件用于存放加密后的口令所以在这里这一项是“x”来表示,如果用户没有设置口令,则该项为空。
用户ID:这个是系统内部用于来识别不同的用户的,不同的用户识别码不同,其中用户
0代表系统管理员
1-500系统预留的ID
500以上是普通用户使用
组ID:其实这个和用户ID差不多,用来规范群组,他与/etc/group有关。
描述信息:这个字段几乎没有什么作用,只是用来解释这个帐号的意义。一般常见的是)
用户根目录:就是用户登录系统的起始目录,用户登录系统后将首先进入该目录。
root用户登录she11:就是用户登录系统时使用的she11路径
/etc/shadow
保存密文的用户口令
用户相关命令
切换进入超级用户
sudo su root
切换到普通用户
sudo su linux
添加用户
sudo adduseer 用户名
删除用户
sudo deluser --remove-home 用户名
修改密码
sudo passwd 用户名
关闭和重启
立即关机
sudo shutdown -h now
立即重启
sudo reboot
Linux文件管理
Linux挂载
在我们的linux中,所有的一切都是从根目录开始的。我们可以这么说,所有的设备都是文件。例如,一块硬盘是一个文件,这个硬盘上的分区也是一个文件,声卡也是一
个文件。
这种表示一个的文件叫做设备文件。设备文件一般来说保存在/dev这个目录中。一个硬盘是一个设备文件,一般是/dev/sda(第一块);而硬盘上的每一个分区也是设备文件,比如第一个分区叫做/dev/sda1,第二个是/dev/sda2。
假设你可以直接读写硬盘的设备文件,但是,你得到的是硬盘的原始数据,几乎是0/1这样的二进制。因此,你可以直接像修改文件一般的修改硬盘的分区表等结构。而每一个分区也是一个设备文件,同样,你得到的是原始数据。
但是,没有人可以手工修改0101,来复制文件、删除文件。为了使你操作里面的数据,而不是原始010101,就需要进行挂载。比如,你把/dev/sda1挂到了/boot上,此时,驱动程序就会将01的原始数据转换成能操作的结构,并装到/boot上,此时对/boot的修改同等于修改/dev/sda1,只不过你可以复制、删除等,而不是看到0101的原始数据。
挂载: 指的就是将设备文件中的顶级目录连接到 Linux 根目录下的某一目录(最好是空目录),访问此目录就等同于访问设备文件
说明:并不是根目录下任何一个目录都可以作为挂载点,由于挂载操作会使得原有目录中文件被隐藏,因此根目录以及系统原有目录都不要作为挂载点,会造成系统异常甚至崩溃,挂载点最好是新建的空目录。
文件系统相关命令
查看目录的内容或文件属性信息
ls
查询文件详细的属性
ls -ld /home/linux
drwxrwxr-x 4 linux linux 40996 May 28 01:34 class
第一部分:文件类型
d->目录文件
常见文件类型标识字符
bcd-lps
b:块设备文件 (block)–硬盘
c:字符设备文件 character --鼠标
d:目录文件 directroy --文件夹
-:普通文件 regular
l:软链接文件(windows快捷方式)link
p:管道文件(常见于进程通信)
s:unix域socket文件(常见于进程通信)
第二部分:权限【文件所有者权限+文件所有者所在组的组员权限+其他人权限】
r读 w写 x 执行
100 010 001 r:4 w:2 x:1
r-- -w- --x
100
r–
010
-w-
001
–x
第三部分:
4->硬链接数
第四部分:
linux->文件所有者名
第五部分:
linux ->文件所属于组
第六部分:
文件大小(默认单位byte)
第七部分:
文件最后一次修改时间
第八部分:
文件名
ls -a 显示所有的文件,包括隐藏文件
ls -lh 带单位(G,K,M)显示文件大小
修改权限
chmod 权限 文件名
常用:
u:user(文件所有者)
g:group(文件所属组)
o:other(其他用户)
chmod u+x test.c
chmod u+w test.c
chmod g-r test.c
chmod o+x test.c
同时修改
chmod +0777 test.c
挂载
df -Th 查看磁盘空间使用情况
挂载本地设备文件
sudo mount 设备文件 挂载点目录
卸载设备
sudo umount 设备文件
文件系统压缩命令
zip压缩
压缩文件
zip test.zip hello.c log.c
解压文件
unzip test.zip
linux支持常见的两种压缩格式
- gzip:优点压缩速度较快
- bzip2:优点压缩后存储空间较小
tar:该命令一般用来压缩/解压gzip和bizp2的文件
相关参数
c | 创建 |
x | 释放 |
z | gzip操作 |
j | bzip2操作 |
v | 显示过程 |
f | 指定文件名(一定需要放在最后) |
压缩文件/文件夹
sudo tar -czvf work.tar.gz work
sudo tar -cjvf work.tar.bz2 work
或者
sudo tar -xvf work.tar.gz/work.tar.bz2(两种都可以释放)
解压到指定目录
tar -xvf work.tar.gz -C 指定的目录
软链接和硬链接
底层原理简介
大家在windows下可以看到我们桌面上有一些程序。双击它就可以运行了。在我们桌面上的图标只是一个快捷方式,它真正的运行路径是在其他的磁盘中。这个就是我们的windows中链接。我们的Linux系统中也存在类似的形式,我们Linux中的链接形式有两种,一种叫做软链接,一种叫做硬连接。在讲解之前,大家需要先知道一些文件的基本知识。
原理
Linux系统中一个文件由目录项、inode表和数据块组成。test.c
目录项:包括文件名和inode节点号
Inode表:包含文件的一些信息。例如,inode号,文件类型,文件大小等待。
数据块:文件具体内容存放的地方。
查看一个文件时,linux系统的运行过程:
查找过程
- 首先根据文件名,找到我们目录项中的inode号
- 通过inode号进入我们inode表中,查找到该文件中一些信息。
- 然后通过inode表中的保存的数据区的指针,读取我们相应数据区的内容。
硬链接
本质:是给我们的文件取别名。与源文件直接关联。修改一个,另一个同时被修改。删除一个另一个不会有影响。
Linux系统中规定,只有在文件的打开次数为0(即文件这个时候没有打开),并且文件的硬连接数为0,此时文件才会被删除
特点:不能对目录操作
命令
查看inode号
ls -i 文件名
硬链接命令
ln 源文件名 硬链接文件名
软链接
本质:类似于windows的快捷方式,用来记录我们目标的路径
特点:
- 占用磁盘空间
- 不能对目录操作
命令
ln -s 源文件 软链接文件