01 linux 基础(1)

本贴最后更新于 520 天前,其中的信息可能已经斗转星移

环境安装

解压image,从 vmware 打开虚拟机。

设置密码:1

打开终端:ctrl+alt+t

image

linux 介绍

Linux 的发展

1)1969 年,由 kenthompson 在 AT&T 贝尔实验室实现的。使用的是汇编语言。
2)1970 年,KenThompson 和 DennisRitchie 是使用 C 语言对整个系统进行了再加工和编写,是的 Unix 能够很容易的移植到其他硬件的计算机上。
3)Unix 家庭树
1970 年---1980---1990---2000--->

image
4)什么是 Linux?
1) GNU&GPL
GNU = GNU is Not Unix
由 Richard Stallman 在 1984 创建
最初的软件:gcc、make、glibc
GPL = General Public License
http://www.gnu.org/copyleft/copyleft.html
http://www.gnu.org/licenses/gplfaq.html
2) Linux 是一种操作系统
1991 年,芬兰赫尔辛基大学的学生 Linux Torvals 为了能在家里的 PC 机上使用与学校一样的操作系统,开始编写了类 UNIX.
1991.8.25,Linux 就在 comp.os.minix 新闻组中首次发布了一个 Linux 内核的公共版本

各种 Linux 发行版本

(1)更为流行的 Linux 版本
Solaris 、IBM AIX、Red Hat、Fedora Core、SUSE、Debian、Mac OS X、Ubuntu、FreeBSD、OpenBSD、NetBSD、Yellow Dog linux....
(2)脱颖而出的 Ubuntu

image

image

(3)Ubuntu 发行版本代号

image

一般在 4、10 月发布。

linux 体系结构

  • Linux 操作系统的组件

    • –Linux 内核
    • –Shell
    • –文件系统
    • –实用程序

image

image

Linux 内核版本

https://kernel.org/

image

命令终端

  • 目前,在桌面环境下的命令终端仿真器程序有很多,它们各有特色,都拥有各自的用户群。目前流行的终端窗口有:

    • Xterm
    • Gnome-terminal
    • Konsole
    • Rxvt 等
  • Ubuntu Linux 默认安装的命令终端有 Gnome-terminal、Xterm,其他的命令终端都需要另行安装。

  • Gnome-terminal 是 GNOME 默认的命令终端。比 Xterm 具有更多、更强的功能,提供了剪切、粘贴、多标签显示,以及设置终端配置文件等功能,中文支持和用户界面也很友好。用户可以使用窗口菜单,或快捷键完成操作。

deb 包软件管理

流行的两种软件包管理机制

  • Debian Linux 首先提出“软件包”的管理机制——Deb 软件包

    将应用程序的二进制文件、配置文档、man/info 帮助页面等文件合并打包在一个文件中,用户使用软件包管理器直接操作软件包,完成获取、安装、卸载、查询等操作。

  • Redhat Linux 基于这个理念推出了自己的软件包管理机制——Rpm 软件包

随着 Linux 操作系统规模的不断扩大,系统中软件包间复杂的依赖关系,导致 Linux 用户麻烦不断。

Debian Linux 开发出了 APT 软件包管理器。

  • 检查和修复软件包依赖关系

  • 利用 Internet 网络帮助用户主动获取软件包

APT 工具再次促进了 Deb 软件包更为广泛地使用,成为 Debian Linux 的一个无法替代的亮点。

软件包的类型

Ubuntu 有两种类型的软件包:二进制软件包(deb)和源码包(deb-src)

  • 二进制软件包(Binary Packages):它包含可执行文件、库文件、配置文件、man/info 页面、版权声明和其它文档。

  • 源码包(Source Packages):包含软件源代码、版本修改说明、构建指令以及编译工具等。先由 tar 工具归档为.tar.gz 文件,然后再打包成.dsc 文件。

在用户不确定一个软件包类型时,可以使用 file 命令查看文件类型。

image

软件包的命名

​​image​​

软件包管理工具分类

根据用户交互方式的不同,可以将常见的软件包管理工具分为三类。

类别 常见工具举例 描述
命令行 dpkg-deb、dpkg、apt 在命令行模式下完成软件包管理任务。为完成软件包的获取、查询、软件包依赖性检查、安装、卸载等任务,需要使用各自不同的命令
文本窗口界面 dselect、aptitude、tasksel 在文本窗口模式中,使用窗口和菜单可以完成软件包管理任务
图形界面 synaptic 在 X-Window 图形桌面环境中运行,具有更好的交互性、可读性、易用性等特点

linux@ubuntu:~$ sudo aptitude

image

image

dpkg 相关命令

  • dpkg -i 安装一个在本地文件系统上存在的 Debian 软件包
  • dpkg -r 移除一个已经安装的软件包
  • dpkg -P 移除已安装软件包及配置文件
  • dpkg -L 列出安装的软件包清单
  • dpkg -s 显出软件包的安装状态

image

image

APT 工作原理

Ubuntu 采用集中式的软件仓库机制,将各式各样的软件包分门别类地存放在软件仓库中,进行有效地组织和管理。然后,将软件仓库置于许许多多的镜像服务器中,并保持基本一致。因此,对于用户,这些镜像服务器就是他们的软件源(reposity)。

image

在 Ubuntu 系统中,使用软件源配置文件 /etc/apt/sources.list​列出最合适访问的镜像站点地址。

软件源配置文件只是告知 Ubuntu 系统可以访问的镜像站点地址。但那些镜像站点都拥有什么软件资源并不清楚。若是每安装一个软件包,就在服务器上寻找一边,效率是很低的。因而,就有必要为这些软件资源列个清单(建立索引文件),以便本地主机查询。这就是 APT 软件包管理器的工作原理。

软件源

根据软件包的开发组织对该软件的支持程度,以及遵从的开源程度,划分为如下四类:

  • 核心(Main):官方维护的开源软件,是由 Ubuntu 官方完全支持的软件,包括大多数流行的、稳定的开源软件,是 Ubuntu 默认安装的基本软件包;

  • 公共(Universe):社区维护的开源软件,是由 Ubuntu 社区的计算机爱好者维护的软件。这些软件包没有安全升级的保障。用户在使用时,需要考虑这些软件包存在的不稳定性;

  • 受限(Restricted):官方维护的非开源软件,是专供特殊用途,而且没有自由软件版权,不能直接修改软件,但依然被 Ubuntu 团队支持的软件;

  • 多元化(Multiverse):非 Ubuntu 官方维护的非开源软件,用户使用这些软件包时,需要特别注意版权问题。

更换软件源

遇到这个问题的 Unable to fetch some archives, maybe run apt-get update or try with --fix-missing​就需要改成国内源。

  1. 先创建备份。

sudo cp sources.list sources.list.bak
就是先将 sources.list 备份到 sources.list.bak

  1. ​ /etc/apt/sources.list​ 的内容换成:
# deb cdrom:[Ubuntu 16.04 LTS _Xenial Xerus_ - Release amd64 (20160420.1)]/ xenial main restricted
deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties
deb http://archive.canonical.com/ubuntu xenial partner
deb-src http://archive.canonical.com/ubuntu xenial partner
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse

或者:

image

image

image

刷新软件源

  • 修改了配置文件——/etc/apt/sources.list,目的只是告知软件源镜像站点的地址。但那些所指向的镜像站点所具有的软件资源并不清楚,需要将这些资源列个清单,以便本地主机知晓可以申请哪些资源。

  • 使用“apt-get update​”命令会扫描每一个软件源服务器,并为该服务器所具有软件包资源建立索引文件,存放在本地的/var/lib/apt/lists/目录中。

软件管理相关命令

在 Ubuntu Linux 中,通常使用 apt-get​命令管理软件包,只需告知软件包名字,就可以自动完成软件包的获取、安装、编译和卸载,以及检查软件包依赖关系。

apt-get 命令提供了一个软件包管理的命令行平台。在这个平台上使用更丰富的子命令,完成具体的管理任务。

子命令 描述
update 下载更新软件包列表信息
upgrade 将系统中所有软件包升级到最新的版本
install 下载所需软件包并进行安装配置
remove 卸载软件包
autoremove 将不满足依赖关系的软件包自动卸载
source 下载源码包
build-dep 为源码包构建所需的编译环境
dist-upgrade 发布版升级
dselect-upgrade 根据 dselect 的选择来进行软件包升级
clean 删除缓存区中所有已下载的包文件
autoclean 删除缓存区中老版本的已下载的包文件
check 检查系统中依赖关系的完整性

管理软件包:

apt-get subcommands [ -d | -f | -m | -q | --purge | --reinstall | - b | - s | - y | - u | - h | -v ] pkg

选项 描述
-d 仅下载软件包,而不安装或解压
-f 修复系统中存在的软件包依赖性问题
-m 当发现缺少关联软件包时,仍试图继续执行
-q 将输出作为日志保留,不获取命令执行进度
--purge 与 remove 子命令一起使用,完全卸载软件包
--reinstall 与 install 子命令一起使用,重新安装软件包
-b 在下载完源码包后,编译生成相应的软件包
-s 不做实际操作,只是模拟命令执行结果
-y 对所有询问都作肯定的回答,apt-get 不再进行任何提示
-u 获取已升级的软件包列表
-h 获取帮助信息
-v 获取 apt-get 版本号

修复软件包依赖关系

如果由于故障而中断软件安装过程,可能会造成关联的软件包只有部分安装。之后,用户就会发现该软件既不能重装又不能删除。

作为组合命令,下面前者用于检查软件包依赖关系,后者用于修复依赖关系。

apt-get check​”——“apt-get -f install​”

在处理依赖关系上,apt-get 会自动下载并安装具有依赖关系(depends)的软件包,但不会处理与安装软件包存在推荐(recommends)和建议(suggests)关系的软件包。

更新软件包

在 Ubuntu Linux 中,只需使用命令“apt-get upgrade​”就可以轻松地将系统中的所有软件包一次性升级到最新版本。

安装软件包

在准备好软件源并连通网络后,用户只需告知安装软件的名称,“apt-get install”命令就可以轻松完成整个安装过程,而无须考虑软件包的版本、优先级、依赖关系等。

使用“apt-get install​”下载软件包大体分为四步:

  • STEP1,扫描本地存放的软件包更新列表(由 apt-get update 命令刷新更新列表),找到最新版本的软件包;
  • STEP2,进行软件包依赖关系检查,找到支持该软件正常运行的所有软件包;
  • STEP3,从软件源所指的镜像站点中,下载相关软件包;
  • STEP4 ,解压软件包,并自动完成应用程序的安装和配置。

重新安装软件包

当用户不小心损坏了已安装的软件包,而需要修复。或者,希望重新安装软件包中某些文件的最新版本,可以重新安装软件包。

linux@ubuntu:~$ sudo apt-get --reinstall install

卸载软件包

  • 完全卸载

    apt-get remove​”会关注那些与被删除的软件包相关的其它软件包,删除一个软件包时,将会连带删除与该软件包有依赖关系的软件包。

  • 完全卸载

    apt-get --purge remove​”命令在卸载软件包文件的同时,还删除该软件包所使用的配置文件。

清理软件包缓冲区

如果用户认为软件包缓冲区中的文件没有任何价值了,有必要删除全部下载的软件包。可以使用“apt-get clean​”清理整个软件包缓冲区,除了 lock 锁文件和 partial 目录。

按照依赖关系清理缓冲区中多余的软件包,如果用户希望缓冲区中只保留最新版本的软件包,多余版本全部清除,可以使用“apt-get autoclean​”命令。

查询软件包信息

使用 apt-cache​命令完成查询软件源和软件包的相关信息。

子命令 描述
showpkg 获取二进制软件包的常规描述信息
showsrc 获取源码包的详细描述信息
show 获取二进制软件包的详细描述信息
stats 获取软件源的基本统计信息
search 根据正则表达式检索软件包
depends 获取该软件包的依赖信息
rdepends 获取所有依赖于该软件包的软件包
pkgnames 列出所有已安装软件包的名字
policy 获取软件包当前的安装状态

shell 基本命令

shell 简介

随着各式 Linux 系统的图形化程度的不断提高,用户在桌面环境下,通过点击、拖拽等操作就可以完成大部分的工作。

然而,许多 Ubuntu Linux 功能使用 shell 命令来实现,要比使用图形界面交互,完成的更快、更直接。

英文单词 shell 可直译为“贝壳”。“贝壳”是动物作为外在保护的一种工具。

可以这样认为,Linux 中的 shell 就是 Linux 内核的一个外层保护工具,并负责完成用户与内核之间的交互。

image​•命令是用户向系统内核发出控制请求,与之交互的文本流。

shell 是一个命令行解释器,将用户命令解析为操作系统所能理解的指令,实现用户与操作系统的交互。

当需要重复执行若干命令,可以将这些命令集合起来,加入一定的控制语句,编辑成为 shell 脚本文件,交给 shell 批量执行。

shell 的交互:

  • 用户在命令行提示符下键入命令文本,开始与 Shell 进行交互
  • 接着,shell 将用户的命令或按键转化成内核所能够理解的指令
  • 控制操作系统做出响应,直到控制相关硬件设备
  • 然后,shell 将输出结果通过 shell 提交给用户

image

选择 shell

最初的 UNIX shell 经过多年的发展,由不同的机构、针对不同的目的,开发出许多不同类型的 shell 程序。目前流行的 shell 主要有几种 :

  • Bourne Shell(简称 sh):它是 Unix 的第一个 shell 程序,早已成为工业标准。目前几乎所有的 Linux 系统都支持它。不过 Bourne Shell 的作业控制功能薄弱,且不支持别名与历史记录等功能。

  • C Shell(简称 csh)

  • Korn Shell(简称 ksh)

  • Bourne Again Shell:能够提供环境变量以配置用户 Shell 环境,支持历史记录,内置算术功能,支持通配符表达式,将常用命令内置简化。

shell 命令

立即关机:

linux@ubuntu:~$ sudo shutdown -h now

立即重新启动:

linux@ubuntu :~$ sudo shutdown -r now

linux@ubuntu :~$ sudo reboot now

定时关机:

linux@ubuntu:~$ sudo shutdown -h +45 “That is all, game over.”

定时重启:

linux@ubuntu:~$ sudo shutdown -r +60

shell 命令格式

shell 提示符标识了命令行的开始。用户在提示符后面输入一条命令并按 Enter 键,完成向系统提交指令。

通常 shell 命令提示符采用以下的格式:

  • username:用户名,显示当前登录用户的账户名;

  • hostname:主机名,显示登录的主机名,例如若远程登录后,则显示登录的主机名;

  • direction:目录名,显示当前所处的路径,当在根目录下显示为“/”,当在用户主目录下显示为“~”(/home/某个用户目录);

image

通常一条命令包含三个要素:命令名称、选项、参数。命令名称是必须的,选项和参数都可能是可选项。命令格式如下所示:

image

  • Shell 提示符:如果当前用户为超级用户,提示符为“#”,其他用户的提示符均为“$”;
  • Command:命令名称,Shell 命令或程序,严格区分大小写
  • Options:命令选项,用于改变命令执行动作的类型,由“-”引导,可以同时带有多个选项;
  • Argument:命令参数,指出命令作用的对象或目标,有的命令允许带多个参数。

shell 命令语法格式:

  • 一条命令的三要素之间用空格隔开;

  • 若将多个命令在一行书写,用分号(;)将各命令隔开;

  • 如果一条命令不能在一行写完,在行尾使用反斜杠(\)标明该条命令未结束。

命令行操作

bash 除了在命令编辑功能上比 sh 有很大改进外,还增加了特有功能极大地方便了用户在 Shell 命令行上的操作。

  • 补齐命令与文件名

  • 查询命令历史

  • 等等

补齐命令与文件名

在使用 Shell 命令时,很多用户会经常遇到命令或文件名没有记全的情况。Bash Shell 的命令和文件名补齐功能会帮助用户。在输入命令或文件名的前几个字符后,按 TAB 键或 ESC 键自动补齐剩余没有输入的字符串。

如果存在多个命令或文件有相同前缀,shell 将列出所有相同前缀的命令或文件。shell 给出的提示信息,帮助用户回忆和完成输入。之后等待用户输入足够的字符。

需要说明的是,连续按两下 TAB 键或 ESC 键,用于命令补齐;按下一次 TAB 键,用于文件名补齐。

查询命令历史

用户在 Shell 下的操作是有很大连续性的,曾经输入的命令可能需要多次使用。当用户在操作中发现问题,需要查看曾经执行过的操作。Bash 将用户曾经键入的命令序列保存在一个命令历史表中。按“键盘上­”键 和“键盘下”键,便可查询命令历史。

Bash Shell 还提供了 history​命令。该命令将命令历史表按列表形式,从记录号 1 开始,一次性全部显示出来。

image

显然 history 只能记录有限条的历史命令,默认保留 500 条命令。

Bash Shell 将历史命令容量保存在环境变量 HISTSIZE 中。

  • 使用“echo $HISTSIZE​”查看当前历史命令容量;

  • 通过直接赋值的方法,修改这个环境变量。$HISTSIZE=2000

shell 中的特殊字符

通配符

当需要用命令处理一组文件,例如 file1.txt、file2.txt、file3.txt……,用户不必一一输入文件名,可以使用 shell 通配符。shell 命令的通配符含义如下表

通配符 含义 实例
星号(*) 匹配任意长度的字符串 用 file_*.txt,匹配 file_wang.txt、file_Lee.txt、file3_Liu.txt
问号(?) 匹配一个长度的字符 用 flie_?.txt,匹配 file_1.txt、file1_2.txt、file_3.txt
方括号([…]) 匹配其中指定的一个字符 用 file_[otr].txt,匹配 file_o.txt、file_r.txt 和 file_t.txt
方括号([ - ]) 匹配指定的一个字符范围 用 file_[a-z].txt,匹配 file_a.txt、file_b.txt,直到 file_z.txt
方括号([^…]) 除了其中指定的字符,均可匹配 用 file_[^otr].txt,除了 file_o.txt、file_r.txt 和 file_t.txt 的其他文件

image

管道

管道可以把一系列命令连接起来,意味着第一个命令的输出将作为第二个命令的输入,通过管道传递给第二个命令,第二个命令的输出又将作为第三个命令的输入,以此类推。就像通过使用“|”符连成了一个管道。

image

以上操作中,借助管道“|”,将 ls 的输出直接作为 wc 命令的输入。使用管道可以巧妙的将一些命令联合使用,得到单个命令所无法实现的效果。例如使用以上的命令组合,得到的是/usr/bin 目录下文件的个数。

输入/输出重定向

输入/输出重定向是改变 shell 命令或程序默认的标准输入/输出目标,重新定向到新的目标。

linux 中默认的标准输入定义为键盘,标准输出定义为终端窗口。

用户可以为当前操作改变输入或输出,迫使某个特定命令的输入或输出来源为外部文件。

重定向符 含义 实例
> file 将 file 文件重定向为输出源,新建模式 ls /usr > Lsoutput.txt,将 ls /usr 的执行结果,写到 Lsoutput.txt 文件中,若有同名文件将被删除
>> file 将 file 文件重定向为输出源,追加模式 ls /usr >> Lsoutput.txt,将 ls /usr 的执行结果,追加到 Lsoutput.txt 文件已有内容后
< file 将 file 文件重定向为输入源 wc < file1,将 file1 中的内容作为输入传给 wc 命令
2> 或&> 将由命令产生的错误信息输入到文件中 ls noexistingfile.txt 2> err.log,使用 ls 命令,查看一个不存在的文件时,将系统错误提示保存在 err.log 文件中

cat 命令功能为在标准输出上显示文件。下面通过一个实例,可以更好地理解重定向的功能。

image

命令置换

命令替换是将一个命令的输出作为另一个命令的参数。命令格式如下所示。

其中,命令 command2 的输出将作为命令 command1 的参数。需要注意,命令置换的单引号为 ESC 键下方的“`”键

image

pwd 命令用于显示当前目录的绝对路径。在上面的命令行中,使用命令置换符,将 pwd 的运行结果作为 ls 命令的参数。最终,命令执行结果是显示当前目录的文件内容。

image

  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    946 引用 • 943 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...