跟我一起学linux基础(第一天)

时间:2022-04-19 08:10:46

第一天

      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] 除了指定的字符其他均可匹配,但是要注意:操作的还是一个字节