这是我从头开始学习Linux的学习笔记,后续还会更新。
记录自己的技术成长,也希望和大家分享交流,欢迎关注~
本笔记为coursera网站课程《Linux for Developers》的学习笔记
文章目录
Ubuntu跟CentOS的区别
-
CentOS
CentOS是RedHat的社区版本, 可以兼容RedHat的RPM安装包, 一般用作服务器, 预安装的也都是服务器的内容。除了没有RedHat服务外(反正要钱的咱也不会买), 用起来与RedHat相差不大。包管理一般用rpm或者yum来管理。
-
Ubuntu
Ubuntu是基于Debian发行版和GNOME桌面环境, 也有KDE版本, 属于较流行的发行版, 它强化了图形方面的功能, 有面向一般用户的桌面版本, 也有服务器版本。因为其桌面版本比较漂亮, 有较多多媒体方面的软件和ubuntu软件中心的支持, 对一般用户也还算好用, 所以较流行。其服务器版本也就没什么好说了, 都差不太多。包管理一般用apt-get。
-
使用场景选取
如果要做服务器, 当然选CentOS, 或者Ubuntu Server版。如果用做桌面系统, 那就用ubuntu desktop了。
学习目标
- 列出几乎所有基于Linux的系统上可用的主要文本编辑器,重点是vi,emcas,nano和gedit
- 了解如何使用vi和emacs编辑器以及如何仅使用cat和echo而不使用编辑器来创建文件
- 讨论操作系统如何使用命令shell程序,可用选项以及如何初始化bash
- 说明别名的使用,操作和使用环境变量以及自定义命令行提示符
- 讨论特殊字符,了解如何使用它们以及覆盖其特殊含义
- 将重定向用于输入,输出和错误消息,并使用命令替换将一个程序的输出提供给另一个程序
- 利用管道使连接的程序高效并行运行,以更好地利用系统资源
- 讨论Linux中使用的主要目录结构及其用途
- 描述如何使用分区以及如何构造,格式化和操作它们,以及如何建立良好的分区方案
一.文字编辑器
Linux和Linux中最常用的两个是vi和Emacs。 但是有些替代品非常易于使用, 您可以立即开始使用,例如nano和Gedit。 我们将简要提及它们,但是它们非常易于学习。
无论您是系统管理员还是开发人员, 您将必须编辑文本文件以及创建它们。无论您是系统管理员还是开发人员, 您将必须编辑文本文件以及创建它们。 您可以从命令行使用的一种编辑器是nano。 使用非常简单, 它几乎没有学习曲线, 而且开始使用起来要容易得多 如果您以前没有使用过vi或emacs,则可以使用它们。
1.echo and cat
如果您只想创建一个文件,甚至不需要编辑器,有两种标准方法可以从命令行创建一个文件并用内容填充它。
The first is to just use echo repeatedly:
$ echo line one > myfile
$ echo line two >> myfile
$ echo line three >> myfile
A second way is to use cat combined with redirection:
$ cat << EOF > myfile
> line one
> line two
> line three
> EOF $
either of which produces a file which has in it:
line one
line two
line three
2.vi编辑器
该程序的实际名称可能是vim, vi作为其替代名称的别名。您使用vi所做的一切, 您可以通过键盘进行操作。 关于vi的一个令人困惑的部分是,有两种基本模式, 命令模式和插入模式 ,然后您可以使用退出键在每个按钮之间切换。在任何一种模式下键入的相同字母,其功能都非常不同, 因此一开始学习可能会造成混淆。
3.vi命令
在vi中启动,退出,读取和写入文件
在vi中更改位置
在vi中搜索文本
在vi中更改,添加和删除文本
3.emacs编辑器
文本编辑器的另一个主要选择emacs。 Emacs在所有Linux系统上都可用, 有时它不是默认安装的。 除了文字编辑功能外,Emacs几乎具有多种功能,例如电子邮件, 调试,构成一个完整的集成开发环境,等等。 emacs中只有一种模式,与vi中的两种模式不同。 为了执行特殊的控制功能并发布与编辑器相关的命令, 您使用Control(Ctrl)键或META键, 对于META键,您可以轻松使用ALT或Escape与其他键组合使用。 大多数资深emacs用户可能 将控制键重新映射到无用的Caps Lock键所在的位置。 因此,这仅与emacs有关。
二.Shell,Bash和命令行
1.shell
shell是你(用户)和Linux(或者更准确的说,是你和Linux内核)之间的接口程序。你在提示符下输入的每个命令都由shell先解释然后传给Linux内核。shell 是一个命令语言解释器(command-language interpreter)。**拥有自己内建的 shell 命令集。**此外,shell也能被系统中其他有效的Linux 实用程序和应用程序(utilities and application programs)所调用。**不论何时你键入一个命令,它都被Linux shell所解释。**一些命令,比如打印当前工作目录命令(pwd),是包含在Linux bash内部的(就象DOS的内部命令)。其他命令,比如拷贝命令(cp)和移动命令(rm),是存在于文件系统中某个目录下的单独的程序。而对用户来说,你不知道(或者可能不关心)一个命令是建立在shell内部还是一个单独的程序。
2.bash
Bash,shell的一种。Bash是一个命令处理器,通常运行于文本窗口中,并能执行用户直接输入的命令。Bash还能从文件中读取命令,这样的文件称为脚本。
只能通过在命令行输入名称来调用任何命令shell。可以使用chsh实用程序更改用户的默认Shell 。
3.Interactive shells
Login shells:
- if /etc/profile exists, source it
- if ~/.bash_profile exists, source it
- else if ~/.bash_login exists, source it
- else if ~/.profile exists, source it
- on exit, if ~/.bash_logout exists, source it
Non-login shells:
- if ~/.bashrc exists, source it
**自己改系统:**1.备份一下2.在root里重新建一个账号
4.环境变量
环境变量的长度或数量不受限制。例如,许多应用程序都使用它们来设置配置选项的默认值。示例包括HOME,HOST,PATH,并且可以将其设置为PATH:例如,PATH = $ HOME / bin:$ PATH。
练习:添加环境变量,path追加一个目录,给环境变量设置值
5.自定义命令行提示符
默认命令行提示符是**$(对于普通用户)和#(**对于root用户或超级用户)。
Here is a table with some of the possible special characters that can be embedded in the PS1 string:
6.Shell命令中的echo 命令
echo命令用来显示文字。
1.文本输出:echo命令后面跟上输出的文本
2.echo自动换行; echo -n 表示不换行输出
3.echo -e 表示转义字符
①\b转义后相当于按退格键(backspace),但前提是“\b”后面存在字符,具体效果参考下方示例。
②\c不换行输出,在“\c”后面不存在字符的情况下,作用相当于echo -n,具体效果参考下方示例。
③\n换行,具体效果参下方示例。
④\f换行,但是换行后的新行的开头位置连接着上一行的行尾,具体效果参下方示例。
⑤\v与\f相同。
⑥\t转以后表示插入tab,即制表符。
⑦\r光标移至行首,但不换行,相当于使用“\r”以后的字符覆盖“\r”之前同等长度的字符,只看这段文字描述的话可能不容易理解,具体效果查看示例。
⑧\表示插入“\”本身。
[administrator@localhost ~]$ echo -e "123\b"
123
[administrator@localhost ~]$ echo -e "123\b4567"
124567
[administrator@localhost ~]$ echo -e "123\b\b4567"
14567
[administrator@localhost ~]$ echo -e "123\b\b\b4567"
4567
[administrator@localhst ~]$ echo -e "123\c"
123[administrator@localhost ~]$
[administrator@localhost ~]$ echo -n "123"
123[administrator@localhost ~]$
[administrator@localhost ~]$ echo -e "123\c456"
123[administrator@localhost ~]$
[administrator@localhost ~]$ echo -e "abcefg\n1234"
abcefg
1234
[administrator@localhost ~]$ echo -e "123\f456"
123
456
[administrator@localhost ~]$ echo -e "abcdefg\f1234"
abcdefg
1234
[administrator@localhost ~]$ echo -e "abcdefg\f1234\f@@@@@@@@"
abcdefg
1234
@@@@@@@@
[administrator@localhost ~]$ echo -e "abcdefg\r123"
123defg
[administrator@localhost ~]$ echo -e "abc\r123"
123
[administrator@localhost ~]$ echo -e "a\r123"
123
[administrator@localhost ~]$ echo -e "a\r"
a
[administrator@localhost ~]$ echo -e "abc\\def"
abc\def
三.文件系统布局,分区,路径和链接
1.Linux文件管理
Linux文件管理从用户的层面介绍了Linux管理文件的方式。 Linux有一个树状结构来组织文件。 **树的顶端为根目录(/),节点为目录,**而末端的叶子为包含数据的文件。当我们给出一个文件的完整路径时,**我们从根目录出发,经过沿途各个目录,最终到达文件。**我们可以对文件进行许多操作,比如打开和读写。在Linux文件管理相关命令中,我们看到许多对文件进行操作的命令。它们大都基于对文件的打开和读写操作。
Linux发行版本之间的差别很少,差别主要表现在系统管理的特色工具以及软件包管理方式的不同。目录结构基本上都是一样的。Windows的文件结构是多个并列的树状结构,最顶部的是不同的磁盘(分区),如:C,D,E,F等。
Linux的文件结构是单个的树状结构.可以用tree命令进行展示(默认没有安装)。 每次安装系统的时候我们都会进行分区,Linux下磁盘分区和目录的关系如下:
① 任何一个分区都必须挂载到某个目录上。
② 目录是逻辑上的区分。分区是物理上的区分。
③ 磁盘Linux分区都必须挂载到目录树中的某个具体的目录上才能进行读写操作。
④ 根目录是所有Linux的文件和目录所在的地方,需要挂载上一个磁盘分区。
2.Linux目录结构
Linux对文件的扩展名是没有强制要求的,甚至可以说没有扩展名之类的概念。但是通常我们创建文件或者保存文件的时候都还是最好给弄一个文件扩展名,这样非常有利于理解文件的内容,方便管理
以下是对根目录下每个目录的简单解释:
使用建议:
-
用户应该将文件存储在自己的主目录及其子目录下
-
系统绝大多数设置都在/etc目录下
-
不要修改/或者/usr目录下的任何内容,除非你真的清楚你在做什么,也就是说/目录最好和安装好系统之初保持一致
-
大多数工具和应用软件程序都安装在/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin
-
文件或者目录都有唯一的绝对路径。
一个问题:
ls指令后看不到其他的文件目录
作业:把windows/linux的目录挂载到linux上
查询/proc,获取系统的用户时间、系统时间、空闲时间
3.分区
在Linux下,**磁盘分为多个分区。最多可以创建四个主分区,**有关它们的信息存储在MBR(主引导记录)中。**通过创建最多三个主分区和一个扩展分区,可以获得更大的灵活性,扩展分区可以包含可以容纳的尽可能多的逻辑分区,**这可能取决于所涉及的磁盘类型。例如,SCSI磁盘最多只能有16个分区。
用于创建和检查硬盘分区的命令行实用程序是fdisk。该FDISK实用程序可用于创建和删除分区,改变他们的类型,fdisk不允许您移动分区或调整分区大小。
可以使用mkfs命令为各种文件系统格式化分区,或更常见的是,针对每种类型的文件系统使用特定的命令格式化分区。
使用gparted实用程序(和某些等效项),您可以以图形用户友好的方式执行所有这些操作。
在 Linux 中,每一个硬件设备都映射到一个系统的文件,对于硬盘、光驱等 IDE 或 SCSI 设备也不例外。Linux把各种 IDE 设备分配了一个由 hd 前缀组成的文件;而对于各种 SCSI 设备,则分配了一个由 sd 前缀组成的文件。
4.路径
路径是环境的重要方面,并且封装在PATH环境变量中。
将目录添加到路径很容易,如下所示:
$ MY_BIN_DIR=$HOME/my_bin_dir
$ export PATH=$MY_BIN_DIR:$PATH
$ export PATH=$PATH:$MY_BIN_DIR
5.硬连接和软连接
我们 Linux 目录使用的是 ext4 文件系统。
ext4 文件系统会把分区主要分为两大部分(暂时不提 super block(超级块)):小部分用于保存文件的 inode(i 节点)信息;剩余的大部分用于保存 block 信息。
在Linux系统中,**内核为每一个新创建的文件分配一个Inode(索引结点),**每个文件都有一个惟一的inode号。文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存,从而实现文件的快速访问。Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。
硬链接说白了是一个指针,指向文件索引节点,系统并不为它重新分配inode。
软链接克服了硬链接的不足,没有任何文件系统的限制,任何用户可以创建指向目录的符号链接。因而现在更为广泛使用,它具有更大的灵活性,甚至可以跨越不同机器、不同网络对文件进行链接。
总结:软链接就是快捷方式,硬链接就是指向文件索引节点的指针。基于软链接的各种优势,更倾向于使用软链接。
都看到这里了,不如点个赞哦~
亲爱的朋友,这里是我新成立的公众号,欢迎关注!
本博客的优秀博文也将陆续搬运到公众号,之后还将推出更多优秀博文,并将优先发在公众号,敬请期待!
关注起来,让我们一起成长!