第一天
linux基础大部分都是要记住,理解的部分很少,学起来比较枯燥乏味,希望读者做好心理准备。希望大家在linux系统下学习的时候一切操作强制使用命令,不要去点图标。
linux是一个操作系统,和windows是一样的
操作系统就是一个程序。
AT&T MIT GE在69年旨在研究一种多任务、多用户、分时性的操作系统。这个操作系统(multics)研究失败了。
什么是多用户?类似于Windows系统,可以允许创建多个用户。
什么是多任务?宏观一次可以执行多个程序(肉眼上看到的),实际每次可能只执行一个程序
什么是分时性(时间片)?假设一个程序从头到尾运行时间为5秒,可能每次只运行50ms
微观每次最多运行几个程序和cpu的核有关。核越多,微观每次同时运行的程序就越多。
69年之前出现的操作系统:单任务、单用户、不具备分时性(批处理的)。
贝尔实验室有一个人叫做肯汤普森,最初使用汇编写了一个小型的操作系统,发现当自己写的一个小游戏运行在这个系统上非常流畅。
后来他和丹尼斯里奇,分别使用B语言和C语言分别重写了操作系统——Unix。
什么是操作系统:用户软件(app、库、工具、图标)和内核
什么叫硬件裁剪?把一些用不到的功能从主板或开发板上移除相应的硬件,从而降低功耗。
什么叫软件裁剪?对操作系统内核功能的添加和删除
linux操作系统本身就是一个程序,运行在内存中,需要内存给操作系统分配空间。
分配的内存空间是物理空间还是虚拟空间?虚拟空间。
虚拟内存分成两个部分:
用户空间 包括命令 c中的可执行文件......
————————————————————————————————————————————————
内核空间
系统调用
文件系统
网络协议栈
驱动
......
——————————————————————————————————————————————————
硬件
现在使用的ubuntu版本是12.04
现在ubuntu使用的内核版本是3.5
内核版本的规则:主版本号.次版本号.修订版本号
通常情况下,次版本号为偶数时是稳定版,所以我们在开发时大部分使用的都是次版本号为偶数的。
2.4 2.6 2.8 3.0(几乎不用了) | 3.14 3.18 4.8
高级语言:1、编译型语言,使用编译器 2、解释型语言,使用解释器
无论编译器还是解释器都是将高级语言转化成二进制
shell就是解释器的统称。解释器也会有不同名称的分类(sh ksh bash ...)
sudo /etc/init.d/network-manager restart 重启网络服务
当作公式来记:sudo /etc/init.d/服务名称 start/stop/restart
服务名称有哪些?我不知道
软件包:应用程序、README、配置文件
linux软件包的分类:.deb软件包 .rpm软件包
ubuntu使用的是.deb软件包
红帽使用的是.rpm软件包
Filename_Version-Reversion_Architecture.deb 软件包
软件包名称
主要讲的是.deb软件包:操作工具(可以是图标、可以是命令)
安装软件的命令:
dpkg apt我们在使用前必须要明确的知道软件包之间是有依赖性的。
假设有a、b、c三个软件包,它们之间如果有依赖性为:b 依赖于 a 依赖于 c
安装顺序:c a b
dpkg的使用方法:
特性:安装之前必须要知道软件包之间的依赖关系,并且不支持在线安装。
安装:sudo dpkg -i 软件包
不完全卸载:sudo dpkg -r 软件包名称
完全卸载: sudo dpkg -p 软件包名称
apt使用方法:非常常用
特性:自动检查软件包依赖关系,支持在线安装
使用原理:
/etc/apt/sources.list 存放网址(存放软件包的网址,也叫做软件源)
/var/lib/apt/lists 存放的是索引文件
/var/cache/apt/archives 存放的是下载好的软件包
我们在使用apt下载一个软件包时,首先会到/var/lib/apt/lists寻找索引文件,进而索引文件会在软件源中找到
适合当前系统使用的软件包,进而下载,下载成功的软件包被存放到/var/cache/apt/archives
下载并且安装方式:sudo apt-get install 软件包名称
安装失败原因:
1、没有网络
2、索引文件太陈旧造成了根本找不到软件源
解决方案:a、更新索引文件,sudo apt-get update
b、更改软件源
3、安装过程手贱不小心中途取消了,可能会造成软件包之间的依赖关系被破坏
解决方案:修复依赖关系 sudo apt-get -f install
4、如果在终端提示:请删除某个路径下的某个文件,照做.
不完全卸载:sudo apt-get remove 软件包名称
完全卸载:sudo apt-get --purge remove 软件包名称
和软件包相关的命令就是上面这些
下载软件包源码:sudo apt-get source 软件包名称
sudo apt-get upgrade 更新当前系统中所有已安装的软件包
sudo apt-cache pkgnames | wc -l
| 叫做管道
wc 用来统计的
-c 统计字节
-l 统计行数
-w 统计单词
命令有三要素:命令名称 选项 参数
三要素之间最少要有一个空格。通常选项和参数可以互换位置,通常带-的是选项
history显示的是当前终端历史命令
history -c 清除当前终端输入过的历史命令
上面两条不记住没有影响
如何知道一个终端最多存放多少历史命令?
vi ~/.bashrc
HISTSIZE=1000 确定了每个终端最多存放1000条历史命令
打印一个变量的内容,需要使用echo命令,并且变量前要加$
echo $HISTSIZE
如果修改了一个配置文件的内容,如果想要使配置文件生效,执行source + 指定的文件名 使配置文件重新运行一次。
echo 普通字符串 输出结果就是原有字符串
echo hello <==> echo "hello"
echo hello world != echo "hello world"
这是两个字符串 一个字符串
echo 使用选项时一定要将选项加在参数的前面
echo -n "hello"
取别名:alias 别名='命令' 注意:=左右没有空格
如果上面命令单纯在终端上运行,只适用于当前终端。
如果将命令添加到某个配置文件中的最后一行(比如/etc/bash.bashrc),最后保存退出重启配置文件。永久生效。
ls -a 显示当前目录下所有内容
ls -sh s作用显示文件大小,但是不满足4K以4K为单位显示 了解
h作用是以某种单位来显示文件大小
ls -R 从当前目录递归显示所有目录下内容
很多命令的选项如果见到r或者R通常都是递归的作用
ls -l
d rwx r-x r-x 3 root root 4096 Jul 8 14:55 sl-3.03
文件类型 用户权限 组权限 其它用户权限 硬链接个数 用户名 组名 文件大小 文件最后一次修改时间 文件名
文件类型:b(块设备文件) c(字符设备文件) d - l(软链接文件) p(有名管道文件) s(域套接字文件)现在我们才接触了2种(d -)
linux@linux:~$
当前用户
如何创建其它用户? sudo adduser 用户名
切换用户?su 用户名
返回原有用户?exit 千万别使用su切换
和用户相关的配置文件:/etc/passwd存放的是用户所有信息 /etc/group存放组信息 /etc/shadow存放密码
默认情况下,用户名和组名同名。通常情况下一个组内部只存放了和其同名的一个用户。
如何删除用户?但是如果直接删除用户系统会有警告(组已经空了)
1、添加一个已存在的用户到需要删除的用户对应的组中。
假设现在需要删除farsight用户,将linux用户添加到farsight组中。
sudo usermod -a(添加) -G(指定组名) farsight(组名) linux(任意存在的用户名)
2、删除用户:sudo deluser 用户名
3、删除组:sudo delgroup 组名
权限:r代表读 w代表写 x代表执行
如何表示权限?通常使用的是8进制
rwx r-x r-x
111 101 101
7 5 5
如果已知权限?0123 --x -w- -wx
对于一个文件来说,只能使用三部分的一部分。
chmod 修改文件的原有权限
1、chmod u或g或o或a+或-权限 文件名
注意:+ -的左右不能有空格
2、chmod 八进制 文件名
如何确定使用哪部分?
-rw-rw-rw- 1 farsight farsight 34 Jul 8 17:22 1.c
1 .c文件属于farsight用户,属于farsight组
假设我们当前使用的用户为linux,如果在linux下操作1.c文件使用的是哪部分权限?(其他用户权限)
1、肯定不会使用1.c的用户位置权限,只是给1.c属于的用户使用的
2、 假设sudo usermod -a -G farsight linux 将linux用户添加到了farsight组中
此时linux用户操作1.c文件使用的是组权限
3、如果linux用户不属于farsight组,使用其他用户权限
对于普通文件:r代表可读 w代表可写 x代表可执行 除了可执行文件之外其他的普通文件默认权限一般为0664或者0666
对于目录文件:
r控制了是否能查看目录下内容
w控制了是否能在目录下新增文件
x控制能否进入目录
对于目录一般常用权限为0775或者0777
文件最后一次修改时间:也叫做时间戳 给make工程管理器使用的。
linux系统中有一些具有特殊功能的字符,被叫做通配符。
通配符:
*在命令行中或者在脚本文件中具有匹配任意长度字符的功能 重点
?只匹配一个长度字符
[afw]匹配其中的一个字符
[1-9]只能代表一个字符不可能出现[1-100]这里不是100 1 0 0三个字符
[^123] 除了指定的字符其他均可匹配,但是要注意:操作的还是一个字节