Linux1

Linux

Linux几乎无处不在

品牌手机与电脑,为其提供服务的服务器基本都是Linux系统

Android系统的底层用的是修改过的Linux内核

全球500台最快的超级计算机中,100%采用Linux系统

电脑的启动顺序

  • 启动界面(主板)
  • 操作系统的启动(Windows)
  • 其他程序的启动

[zhangxiaoyu@localhost ~]$

叫做“命令行提示符”,提示在其后面输入命令

zhangxiaoyu是当前用户的名字(username),Linux是多用户的操作系统

@前面是用户名,后面是所在的域,例如87195243@qq.com

localhost是电脑、主机的名字,也就是主机名(hostname)

~表示当前用户的家目录(home directory),是当前所在目录的名字,会随着用户进入不同目录而改变

$标志用户所具有的权限,$表示普通用户,有权限的限制,#表示超级用户也就是root,它拥有所有的权限,是系统的管家

将用户切换为root

  1. 用sudo su命令

  2. 命令行提示符变成[root@localhost zhangxiaoyu]#

  3. 退出root身份,可以用Ctrl+D的组合键,或者用exit命令

image-20200310100336649

whoami和hostname命令

image-20200310101613157

知识点

Linux的开发者写了丰富详尽的命令使用手册,英语是manual

Linux的使用手册可以说是Linux开发者的圣经

简单的命令

date命令

date是日期的意思,用于显示当前的时间

CST是Central Standard Time的缩写,表示“中央标准时间”

image-20200310102211329

ls命令

ls是list的缩写,list是“列举,列出”的意思

ls命令的作用是用于列出当前目录下的文件和目录

image-20200310103122086

命令的参数

参数是写在命令之后的一些补充选项,命令和参数之间有空格隔开

格式:command parameters

参数里可以包含数字、字母等等

参数里可以包含多个参数,由空格隔开

参数没有固定格式,但是一般还是遵循一定的规范

短参数(一个字母)

最常用的参数形式就是一个短横线后接一个字母:command -p

一次可以加好几个短参数,可以用空格隔开:command -p -a -T -c

多个短参数也可以合并在一起:command -paTc

字母的大小写有区别,大写的T和小写的t通常含义不同

长参数(多个字母)

  • 多个长参数,是不能当多个短参数那样合并写的,而是只能以空格隔开

    command –parameter1 –parameter2

  • 可以组合使用长参数和短参数

    command -paTc –parameter1 –parameter2

有时候,同一个意义的参数有短参数和长参数两种形式效果是一样的

例如ls -a和ls -all

image-20200310105541930

参数的值

有一些参数需要赋值,短参数和长参数的赋值方法不一样

短参数赋值,通常是:command -p 10

长参数赋值,通常是:command –parameter=10

如何查找命令和命令的历史记录

如何找到一个命令

使用Tab键来补全命令

Tab键可以补全命令,也可以补全文件名、路径名:按两次Tab键

命令的历史记录

向上键:向前查找用过的命令

向下键:先后查找用过的命令

Ctrl+R:用于查找使用过的命令

history命令用于列出之前使用过的所有命令,可以使用!编号的格式来重新运行history输出中对应编号的命令

image-20200310113725112

实用的快捷键

Ctrl+L:用于清理终端的内容,清屏的作用,同clear命令

Ctrl+D:给终端传递EOF(End Of File,文件结束符)

Shift+PgUp:用于向上滚屏

Shift+PgDn:用于向下滚屏

Ctrl+A:光标跳到一行命令的开头,Home键有相同的效果

Ctrl+E:光标跳到一行命令的结尾,End键有相同的效果

Ctrl+U:删除所有在光标左侧的命令字符

Ctrl+K:删除所有在光标右侧的命令字符

Ctrl+W:删除光标左侧的一个单词,单词指用空格隔开的一个字符串,例如-a就是一个单词

Ctrl+Y:粘贴之前用Ctrl+U、Ctrl+K或Ctrl+W删除的字符,像“剪切-粘贴”

文件和目录组成命令

Linux中一切都是文件

Linux中两种类型的文件

普通文件和特殊文件

普通文件

文本类型的文件(.txt,.doc,.odt等等)

声音文件(.wav,.mp3,.ogg)

这样的文件在Windows中也有

特殊文件

其他一些文件是特殊的,因为它们表示一些东西,例如光盘驱动器就是这类特殊的文件

根目录

Linux有且只有一个根目录,就是/(斜杠)

Linux中没有比根目录再高一阶的目录了,没有目录包含根目录

Linux目录结构

Linux中用斜杠/来标明目录的层级与包含关系,形式是这样的 /usr/bin,bin是usr目录的子目录,usr是/这个根目录的子目录

目录命名规范

Linux的目录名称可以包含空格等符号,但一般情况下,Linux下的命名目录时尽量不使用空格或者其他特殊符号,并且尽量使用小写英文字母

Linux的根目录的常用直属子目录

bin

是binary的缩写,表示“二进制文件”,可执行文件是二进制的,bin目录包含了会被所有用户使用的可执行程序

boot

启动,boot目录包含与Linux启动密切相关的文件

dev

表示设备,包含外设,它里面的子目录,每一个对应一个外设,比如代表光盘驱动器的文件就会出现在这个目录下面

etc

etc目录包含系统的配置文件

home

表示家,用户的私人目录,放置私人文件,Linux中的每个用户都在home目录下有一个私人目录,除了用户root,root用户拥有所有权限,与普通用户不在一起

lib

library的缩写,表示“库 ”

lib目录包含被程序所调用的库文件,例如.so结尾的文件,Windows下这样的库文件则是以.dll结尾

media

表示媒体,可移动的外设(USB盘,SD卡,DVD,光盘等等)插入电脑时,Linux可以让我们通过media的子目录来访问外设中的内容

mnt

表示挂载,类似media目录,但一般用于临时挂载一些装置

opt

表示“可选的应用软件包”,用于安装多数第三方软件和插件

root

超级用户root的家目录,一般的用户的家目录位于/home下,root用户是一个例外

sbin

system binary的缩写,表示“系统二进制文件”

srv

service的缩写,表示“服务”

包含一些网络服务启动之后所需要取用的数据

tmp

temporary的缩写,表示“临时的”,是普通用户和程序存放临时文件的地方

usr

Unix Software Resource

表示“Unix操作系统软件资源”,类似etc也是历史遗留的命名

它是最庞大的目录之一,类似Windows中的C:\Windows和C:\Program Files这两个文件夹的集合

usr目录里安装了大部分用户要调用的程序

var

variable的缩写,表示动态的,可变的

通常包含程序的数据,比如log(日志)文件

image-20200310190443366

pwd命令和which命令

pwd命令

显示当前目录的路径

刚打开一个终端(Terminal),你将位于你的用户家目录~中

如果用户是zhangxiaoyu,那么~这个目录就是/home/zhangxiaoyu这个目录,通常来说,命令行提示符会告诉你目前位于哪个目录下

pwd命令,显示当前目录的路径

除了看命令行提示符,还有一个方法就是pwd命令,全称Print Woking Directory(“打印当前工作目录”)的缩写

image-20200310202457371

which命令

which命令不是一个必不可少的命令,平时用到它的机会也不多

which命令用于显示一个命令的对应的可执行程序的位置

Linux下,每一条命令其实都对应了一个可执行程序,在终端中输入命令,按回车的时候,就是执行了对应的那个程序,pwd命令对应的pwd程序就是存在于Linux中的,一个命令其实是一个我们随时可以调用的程序,which命令接受一个参数,是你想知道其可执行程序位于哪里的那个命令

image-20200310203155475

Windows可执行程序以.exe结尾,Linux中一般是没有后缀名的,which命令对应的可执行程序是在usr/bin中,Linux中的可执行程序也不都位于相同目录的

目录相关的命令ls,cd和du

ls命令

列出文件和目录

ls命令是最常用的Linux命令之一,用于列出文件和目录

CentOS的终端默认是有颜色标注的,一般来说

蓝色表示目录,绿色表示可执行文件,红色表示压缩文件,浅蓝色表示链接文件,灰色表示其他文件

如果没有颜色,可以加上参数 --color=auto来开启颜色标注,即ls --color=auto

可以用ls --color=none来关闭颜色标注,为了避免每次都输入额外的参数,可以在配置文件中修改,详细售卖在后面

ls命令常用的参数

-a

显示所有的文件和目录,包括隐藏的文件

Linux中,以.开头的文件是隐藏文件,但不包括最开头的两个...

image-20200310211306089

大写的参数-A,它的作用和小写的-a几乎一样,唯一不同就是-A不列出...这两个文件

-l

详细列表

-l参数使得ls命令列出一个显示文件和目录的详细信息的列表,每一个文件或目录都对应一行信息

image-20200311113805133

total:表示当前文件的总大小(单位以千字节来表示),但是total后面的数字并不统计当前目录下所有文件的大小,只是统计了这一层的文件大小,并没有深入这些文件的底层

第一列表示文件权限:drwxr-xr-x之类的

第二列表示链接的数目:2,1之类的

第三列表示文件的所有者的名称

第四列表示文件所在的群组

第五列表示文件大小,单位是octet,也就是byte,表示字节

-h

以Ko、Mo、Go的形式显示文件大小

仅用ls -l,列出的文件详细信息中,文件大小是以字节为单位的

参数-h,h是human readable的缩写,表示适合人类阅读的

-t

按文件最近一次修改时间排序

t是time的缩写,表示“时间”

ls的常用参数合并在一起使用,效果是叠加的

ls -lath

image-20200311125353397

cd命令

cd命令是最常用的Linux命令之一,change directory的缩写,表示切换目录

cd命令后面接的参数就是一个:要去的那个目录的路径

image-20200311125740062

要回到上一级目录(也叫父目录),使用cd..,使用cd.就是返回当前目录

要返回父目录的父目录就是用cd../..

相对路径与绝对路径

相对路径:相对于当前目录的一个路径表示法

image-20200311140918265

绝对路径:绝对的,不因当前目录而改变的一个路径表示法,它总是以/开头,/表示根目录

image-20200311141237733

重回家目录的三种方式

第一种

cd /home/zhangxiaoyu

第二种

cd ~

第三种

cd,直接使用cd命令,不参加参数

路径自动补全

Tab键可以进行命令的补全(按两下Tab键),Tab键还可以用于路径的补全

du命令

显示目录包含的文件大小相比ls -l,du命令统计的才是真正的文件大小

du命令会深入遍历每个目录的子目录,统计所有文件的大小

du是disk usage,表示磁盘占用

du命令常用参数

-h

以Ko,Mo,Go的形式显示文件大小,du -h

-a

显示文件和目录的大小

默认情况下,du命令只显示目录的大小,如果加上-a参数,则会显示目录和文件的大小

-s

只显示总计大小

浏览和创建文件

cat和less命令

显示文件内容

/var/log中有很多日志文件

/var这个目录通常包含程序的数据

cat命令

concatenate,表示连接/串联,可以一次性在终端中显示文件的所有内容,只需要在命令后加上想要显示的文件路径即可

less命令

分页显示文件内容

如果文件比较大,cat命令就不适合,和cat命令最大的区别就是,less命令会一页一页的显示文件内容

less命令中最基本最常用的快捷键

空格键:文件内容读取下一个终端屏幕的行数,与键盘上PageDown效果一样

回车键:文件内容读取下一行,也就是前进一行

d键:前进半个页面(半个屏幕)

b键:后退一页,与键盘上PageUp效果一样

d键:后退一行

u键:后退半页(半个屏幕)

q键:停止读取文件,终止less命令

这里的快捷键大小写是需要区分的,d键,就是小写的d,而不是大写的D,在Linux中通常区分大小写

=号:显示你在文件中的什么位置

image-20200311155722829

lines当前页面的内容是文件中第几行到第几行/整个文件所含行数/所含字符数/整个文件所含字符

h键:显示帮助文档,q键退出帮助文档

/(斜杠):进入搜索模式,在斜杠后面输入要搜索的文字,按下回车键,就会把所有符合的结果都标识出来,要在搜索得到的结果中跳转,可以按n键,跳到下一个符合项目,按N键(Shift+n)跳到下一个项目

head命令和tail命令

显示文件的head开头和tail结尾

默认情况下,head会显示文件的头10行

默认情况下,tail会显示文件的尾10行

可以指定显示的行数,用-n这个参数

image-20200311163740125

tail命令还可以配合-f参数来实时追踪文件的更新

Ctrl+c组合快捷键可以终止大部分终端的命令和正在执行的程序

默认tail -f会每1秒检查一下文件是否有新内容

可以指定间隔检查的秒数,用-s参数,tail -f -s 4 文件名

touch命令和mkdir命令

创建文件和目录

touch命令

创建一个空白的文件

事实上,Linux没有一个命令是专门用来创建一个空白文件的

touch命令其实一开始的设计初衷是修改文件的时间戳,就是可以修改文件的创建时间或修改时间,让电脑以为文件是在那个时候被修改和创建的

如果touch命令后跟着的文件名是不存在的文件,则会新建一个

image-20200311181736332

mkdir命令

mkdir命令就是用于创建一个目录的

还可以用-p参数来递归创建目录结构:mkdir -p one/two/three

image-20200311182845400

文件的复制、移动、删除和链接

cp和mv命令

拷贝文件和移动文件

cp命令

拷贝文件或目录,cp命令不仅可以拷贝单个文件,还可以拷贝多个文件,也可以拷贝目录

拷贝之前创建的new_file文件:cp new_file new_file_copy

第一个文件new_file是已经存在的文件,也就是 被拷贝的文件

第二个文件new_file_copy是需要创建的文件,是new_file的副本

复制文件到另一个目录

不一定要在同一个目录下拷贝,也可以把文件拷贝到其他目录

只需要把cp命令的第二个参数换成目录名:cp new_file one/

如果想拷贝文件到其他目录的同时,并想重新取一个新名字,那么可以这样做cp new_file one/new_file_copy

拷贝目录

拷贝目录只要在cp命令之后加上-r或者-R参数

r大写和小写的作用是一样的,都表示recursive,也就是递归,拷贝的时候,目录中的所有内容(子目录和文件)都会被拷贝

image-20200313163012532

使用通配符*

*号是很常用的正则表达式的符号,被称为“通配符”,可以替代任意字符串

cp *.txt folder:把当前目录下所有txt文件拷贝到folder目录中

cp ha* folder:把当前目录以ha开头的文件都拷贝到folder目录中

mv命令

移动文件

mv是move,表示移动,mv命令有两个功能

一个是移动文件(或目录),另一个是重命名文件(或目录)

移动文件

cp命令用法类似,不同的是cp命令会复制当前文件,而mv命令则是单纯的移动,并不会制作副本

cp像windows中的复制+粘贴,mv像Windows中的剪切+粘贴

mv new_file_2 one:将new_file_2这个文件移动到one目录,原先的new_file_2文件不存在了,用cp,命令的时候,源文件还在的,只是把副本移动到其他目录

用mv命令移动目录很简单,不需要额外的参数,和移动文件一样

例如:mv new_folder one,将new_folder目录(包括子目录和文件)移动到one这个目录

重命名文件

事实上,Linux中没有一个专门的命令用于重命名文件,mv命令可以重命名文件,还是因为它的机制:移动文件

mv new_file renamed_file

image-20200313175533526

以上命令将new_file重命名为renamed_file

rm命令

删除文件和目录

rm,表示“移除”,因为在终端中没有回收站或垃圾箱,用rm命令删除了文件,一般比较难恢复,所以需要谨慎使用

rm命令可以删除一个文件、多个文件、目录,甚至整个Linux系统

rm new_file_copy:删除当前目录下的new_file_copy这个文件

可以同时删除多个文件,只要用空格隔开每个文件即可,例:rm file1 file2 file3

-i

向用户确认是否删除,保险起见,用rm命令删除文件时,可以加上-i参数,这样对于每一个要删除的文件,终端都会询问我们是否确定删除,-i中i表示inform,告知,通知

image-20200313191313345

-f

不会询问是否删除,强制删除

在rm命令后加上-f参数,终端不会询问用户是否确定删除文件,文件会立即被强制删除,f表示force,强迫

-r

递归删除,recursive,表示“递归”,使用-r参数,可以使rm命令删除目录,并且递归删除其包含的子目录和文件

ln命令

创建链接

ln是link的缩写,表示链接,ln命令用于在文件之间创建链接,用一个比较熟悉的词就是快捷方式

Linux下有两种链接类型:

Physical link:物理链接或硬链接

Symbolic link:符号链接或软链接

文件的存储

大致上来说,每个文件有两个部分,一个是文件名,一个是文件内容,文件名的列表是存储在硬盘的其他地方的,和文件内容分开存放,这样方便Linux管理

其实每个文件有三个部分:文件名、权限和文件内容,这里简化的将文件分为两部分:文件名和文件内容

每个文件的文件内容被分配到一个标识号码,就是inode,因此每个文件名都绑定到它的文件内容(用inode标识)

创建硬链接

硬链接的原理是使链接的两个文件共享同样的文件内容,就是同样的inode

所以一旦文件1和文件2之间有了硬链接,那么修改文件或文件2修改的是相同的一块内容,只不过可以用两个文件名来取到文件内容

硬链接的缺陷:只能创建指向文件的硬链接,不能创建指向目录的硬链接,通过一些参数的修改,也可以创建指向目录的硬链接,但比较复杂

软链接可以指向文件或目录,对于目录,一般使用软链接

image-20200313194444737

创建一个文佳file2,使它成为file1的硬链接,要创建硬链接,直接用ln命令,不加任何参数,ln file1 file2,以上命令创建了file1的一个硬链接file2,原理图如下

image-20200313201316778

对于硬链接来说,删除任意一方的文件,共同指向的另一个文件内容并不会从硬盘上删除,只有即删除file1又删除file2,它们的共同指向的文件内容才会消失,也就是inode才会被删除

创建软链接

软链接才真正像我们在Windows下的快捷方式,原理很相似

创建硬链接时In不带任何参数,创建软链接需要加上-s参数,s是symbolic(符号的)的缩写

image-20200313203817314

ln -s file3 file4:创建 了file3的软链接file4

image-20200313203515967

file4的信息是这样的:file4->file3,表示file4指向file3

file4前面的权限那里的第一个字母变成了l,表示link(链接),之前硬链接的时候是没有l的,硬链接看起来就和普通文件类似

使用ls -l命令查看文件信息的时候,第二列的那个1,表示拥有相同inode号的文件数,不难理解,因为file4指向file1,它们并没有指向同一块文件内容,所有他们的inode号不相同

其实file4这个软链接只是file1的一个快捷方式,它指向的是file1,所以显示的是file1的内容,file2的inode和file1不一样,也就是文件内容不一样

如果删除file4,file3不会受到影响,如果删除file1,file2会变成“死链接”,因为指向的文件不见了

软链接可以指向目录,硬链接不行

用户和权限

sudo命令

以root身份运行命令

Linux下的用户组织

在Linux中,理论上可以创建无数个用户,但是这些用户是被划分到不同的群组里面的,有一个root用户很特殊

image-20200313210249426

root用户是默认会创建的,因为是超级用户,zhangxiaoyu则是我们自己创建的用户,我们只在必要时才会切换root身份,其他时候都使用有限权限的用户,例如zhangxiaoyu,这个简单的保护措施大大提高了Linux系统的安全性,有效防止误操作或是病毒攻击

以普通用户登录,可以使用sudo命令暂时成为root

substitute,代替、替换的意思,如果要运行只有root才可以运行的命令,可以在此命令前加上sudo,如下

sudo command

终端会提示输入密码,至少第一次会要求输入密码

sudo su命令

想要从root用户切换到普通用户,只需要输入su 用户名

一直成为root

只要使用sudo su这个命令组合,就可以一直成为root用户

image-20200314085141405

用户管理的命令

以下是只有root用户才能运行的命令

useradd命令

添加新用户,命令后面直接创建用户名

passwd命令

可以修改用户的密码

在其后面加上需要修改密码 的那个用户名

image-20200314090151817

userdel命令

删除用户,在后面接要删除的用户名

单使用userdel命令,不加参数的话,只会删除用户,但不会删除/home目录的用户家目录,如果想连此用户的家目录也一起删除,要加上-r--remove这个参数

userdel -r thomasuserdel --remove thomas

image-20200314091002291

群组的管理和文件权限管理

群组管理的命令

Linux中每一个用户都属于一个特定的群组

如果不设置用户的群组,默认会创建一个和它用户名一样的群组,并且把用户划归

groupadd命令

用于添加一个新的群组,后接需要创建的群组名

usermod命令

修改用户账户

-l:对用户重命名,/home中的用户加目录名不改变,需要手动修改

-g:修改用户所在群组

将thomas这个用户方法刚创建的friends这个群组中

usermod -g friends thomas

用户thomas之前的群组是thomas,是默认的

用groups命令可以获知一个用户属于哪个或哪些群组,用法很简单,后接用户名就可以了,当然用户需要存在才行


可以将一个用户添加到多个群组,用-G参数

uesrmod -G happy,funny thomas

以上命令把thomas添加到happy和funny群组中,群组名之间要用逗号分隔,而且没有空格

注意:

使用usermod时要小心,因为配合-g-G参数时,他会把用户从原先的群组里剔除,加入到新的群组,如果不想离开原先的群组,又想加入新的群组,可以在-G参数的基础上加上-a参数,a是append,表示追加

usermod -aG good thomas


groups命令单独用,不加任何参数,会显示当前用户所在群组

追加群组的时候,一定要用到大写的G的参数,即使只是追加一个群组

groupdel命令

删除已存在的群组

groupdel happy

chown命令

改变文件的所有者

chown是change和owner的缩写,需要 root身份才能运行

后接新的用户所有者的用户名,再接文件名

chown thomas file.txt

chgrp命令

用于改变文件的群组

后接新的群组名,在接文件名

chgrp thomas file.txt

chown命令也可以改变文件的额群组,用法如下

chown oscar:friends file.txt,就是把file.txt文件的所有制改为oscar,群组改为friends

-R参数

递归设置子目录和子文件

chwon命令的-R参数非常有用,注意:这里只能用 大写的R,小写的r不起作用

chwon命令配上-R参数,就会使得被修改的目录的所有子目录和子文件都改变所有者,或者连群组也改变,用上述冒号的方法来同时修改所有者和群组

假如想把用户thomas的家目录的所有子目录和文件都占为己有,可以使用

chown -R oscar:oscar /home/thomas,此时/home/thomas都归oscar所有

权限原理

Linux系统中,每个文件和目录都已一列权限属性,访问权限指明了谁有读的权利,谁有修改的权利,谁有运行的权利

在运行ls -l命令的时候,显示的每个文件或目录的第一列信息就是访问权限,文件信息的第一列比较复杂,可以看到不少d,r,w,l,x等字母,不细分的话,这些统称为文件访问权限符

d:表示目录,说明这是一个目录

l:link,表示链接,说明这是一个链接

r:read,表示可以读这个文件

w:write,表示写,就是可以写、修改这个文件

x:execute,表示执行,可以运行这个文件

最后可能有一个点,这是SELinux的安全标签


为什么我们看到这一排有好多个重复出现的r、w和x呢?

那是因为访问权限是按照用户来划分的

image-20200314124652626

第一组rwx表示文件的所有者对于此文件的访问权限

第二组rwx表示文件所属的群组的其他用户对于此文件的访问权限

第三组rwx表示除前两组之外的其他用户对于此文件的访问权限

解析-rw-rw-r–

-:第一个短横表示这个是普通文件

rw-:文件的所有者对文件有读、写的权限,没有运行权限,记住,如果有w权限,那么也有删除此文件的权限

rw-:表明文件所在的群组的其他用户,对文件有读、写的权限,但是没有运行的权限

r--:表示其他用户只能读此文件,不能写也不能执行

chmod命令

修改访问权限

chmod命令不需要是root用户才能运行,只要是此文件的所有者,就可以用chmod来修饰文件的访问权限

用数字来分配权限

chmod的绝对用法

事实上,Linux系统对每种权限(r,w,x)分配了对应的数字

image-20200314131547221

要合并这些权限,就需要做简单的加法,将对应的数字相加,假如要分配读、写权限,就用4+2=6

数字6表示具有读和写的权限

访问权限的三组(所有者的权限、群组用户的权限、其他用户的权限),只要分别做加法就可以了,然后哈三个和连起来

可以给的最宽泛的权限是777

chmod 600 renamed_file


-R参数

递归的修改访问权限

chmod -R700 /home/oscar,只允许oscar能读、写运行/home/oscar目录下的所有文件

总结

有一些命令的运行需先切换到root身份

usermod,chgrp,chown

chmod命令不需要root身份就可以运行

Nano

文本编辑器,小巧简单,nano是“毫微”的意思,Nano相比Vim/Emacs,不及两者复杂和强大,但是对于入门文本编辑器还是合适的


文本编辑器:Text Editor,可以编辑和查看文本文件,但是不能对文字做格式处理,例如:加粗、斜体、改变颜色等

常见的有Windows下的记事本,macOS下的文本编辑

Linux下的Vi、Vim、Emacs、Gedit,DOS下的edit等,Linux下默认系统中至少安装了一种文本编辑器


文本处理器:Text Processor,又叫文档编辑器

不仅可以编辑和查看文档,而且可以对其 文字进行格式处理,加下划线,设为标题,插入图片等、

这些只能在图形界面下使用,常见的有Windows下的Word,macOS下的Pages

文本编辑器处理的文件和文本处理器的文件格式一般也不同

什么时候需要用文本编辑器呢?

我们可以用文本编辑器来编辑纯文本文件

纯文本格式就是没有任何文本修饰的,没有任何粗体,下划线等格式的文本,只保存文本,不保存其格式设置

Windows下,比较熟悉的纯文本文件就是.txt结尾的文本文档,在Linux和macOS下,后缀名没有那么重要,不少纯文本文件是没有后缀名的

文本编辑器对于程序员来说又是必不可少的,它可以让我们编辑各种编程语言的代码程序,.c(C语言代码文件),.cpp(C++代码文件)


在学习如何使用Nano之后,我们学习如何修改两个配置文件 :.nanorc.bashrc,这两个文件能让我们分别配置nano和终端

终端下部,有两行帮助文档

^这个符号表示键盘Ctrl键,这些就是Nano的快捷键组合

Nano的参数

nano命令也可以带参数,最常用的参数就是打开文件名

如果对file.txt有写的权限,就可以使用nano file.txt,如果file.txt文件不存在,就会创建一个空文件,名字叫file.txt

-m:激活鼠标,如果没有-m参数,那么鼠标在nano里是不起作用的

-i:激活自动缩进功能

-A:激活智能Home键的功能,通常按下键盘的Home键光标会立即跳到一行的最开始,用了-A这个参数,按下Home键会智能的判断,根据一行的开始有无进行缩进

如果要同时激活三个属性,只需要nano -miA file.txt

软件安装

CentOS下的安装程序称之为软件包,即package,一个软件包其实是是软件的所有文件的压缩包,是二进制形式的,包含了安装软件中的所有指令,在RedHat一族里,软件包的后缀是.rpm,rpm是Red Hat Package Manager的缩写,表示“红帽软件包管理器”,CentOS作为RedHat一族的一员,也是拥有.rpm的软件包

.rpm格式的软件包,和Windows下的.exe很像,但是它们的运作方式不一样,软件包管理包含了依赖关系的管理,软件包不需要我们通过搜索引擎来找到并下载,几乎所有.rpm软件包存放在相同的地方,称为软件仓库(repository)

依赖关系

通常来说,很少有一个软件可以单独在Linux上运行,也就是说他依赖与其他程序,一个软件经常需要使用其他程序或者其他程序的片段(称之为库)

一个短剑依赖其他程序,这就是依赖关系,比如说Linux下类似PhotoShop的软件GIMP,GIMP的正常运作需要调用图片读取的库

软件仓库

image-20200315110512346

是用户选择软件仓库,因为基本上各个软件仓库中的软件都是一样的,一般选择离自己所在地比较近的软件仓库的服务器,用默认的官方版没有太大坏处,但是有时候会卡,所以要学习切换软件仓库

CentOS系统使用的软件仓库的列表是记录在一个文件中的,要编辑的那个包含软件仓库的列表文件是

/etc/yum.repos.d/CentOS-Base.repo,这个文件是系统文件,只能被root用户修改

切换CentOS的软件源

CentoS官方的源列表

https://www.centos.org/download/mirrors/

包管理工具

可以使用终端来管理软件包,终端的软件包管理命令一般用yum,yum是CentOS中默认包管理器工具,也用于RedHat一族

yum update/upgrade

更新软件包,update和upgrade几乎没有什么区别

yum search

搜索软件包

yum install

安装软件包

yum remove

删除软件包

RTFM阅读

man命令

man是manual的缩写,是使用手册的意思,后接想要显示使用手册的命令、函数等,此命令用于查看系统中自带的各种参考手册

手册的分类

可执行程序或Shell命令

系统调用(Linux内核提供的函数)

库调用(程序库中的函数)

文件(/etc/password)

特殊文件(通常在/dev下)

游戏

如果man的手册没有安装,可以运行sudo yum install -y man-pages

如果man的手册不全,可以运行sudo mandb

显示使用手册

输入man+数字+命令、函数,可以查到相关的命令和函数,若不加数字,man默认从数字较小的手册中寻找相关命令和函数

键盘上Home和End键:实现开始和结尾的跳转

/键(斜杠):实现搜索,和之前在less命令中功能类似

q键:退出手册页

手册页的不同区域

手册页分为不同的区域,这些区域的名字是用大写和粗体表示,且靠左对齐

NAME:名字,手册页对应的名字或函数的名字,后接简单描述

SYNOPSIS:概要,大意,包含了此命令的所有方法

SESCRIPTION:描述,命令更深入的描述,这个区域也会包含所有参数及其用法

AUTHOR:作者,有时候作者不止一个

COPYRIGHT:版权,也就是用了什么许可证,大多数命令都是在GPL许可证之下的开源代码

[OPTION]:选项,表示可以添加选项参数(-v,-h),SYNOPSIS区域,中括号中的内容表示可选,不一定要添加选项参数

SYNOPSIS区域中,粗体的文字表示要原封不动地输入,下划线的文字表示要用实际的内容替换

举例

cp [option]… [-T] SOURCE DEST拷贝源文件到目标文件

除了cp原封不动输入,还必须输入SOURCE和DEST这两部分内容

apropos命令

查找命令,在后面加一个关键字,apropos命令就会为你在所有手册页中查找相关的命令

假设想知道如何用终端的命令来控制音量

运行apropos sound之后,就列出了所有使用手册中有sound这个关键字的命令,左侧是命令的名字,右侧是命令出现关键字的句子

其他阅读手册方式

-h或–help参数

显示帮助文档,没有man命令显示的使用手册详细

whatis命令

只会列出man命令显示的手册的开头部分,就是概述命令的作用

查找文件

locate命令

快速查找

locate命令是搜索包含关键字的所有文件和目录,但是刚创建的文件,用locate命令查找不出来,这是locate的缺陷

locate命令不会对你实际的整个硬盘进行查找,而是在文件的数据库里查找记录,对于刚创建不久的文件,因为它们还没有被收录到文件数据库,因此locate命令就找不到其索引,自然就不会返回任何结果,Linux系统一般每天会更新一次文件数据库,因此,只要隔24小时再用locate查找,就应该找到刚创建的文件了

可以用updatedb命令强制系统立即更新文件数据库,updatedb命令只能由root用户执行sudo updatedb

这个命令执行需要一点时间,一旦执行成功,再用locate查找刚创建的文件,就可以找到了

find命令

与locate命令不同,find命令不会在文件数据库中查找文件的记录,而是遍历实际硬盘

find 何处 何物 做什么,这几个参数,只有何物是必须指定的,也就是要查找什么

何处:指定在哪个目录中查找,此目录的所有子目录也会被查找,find命令可以限定查找目录,比如可以只让find查找/home目录,默认如果没有给出何处这个参数,那么find命令会在当前目录及其子目录中查找

何物:也就是要查找什么,可以根据文件的名字来查找,也可以根据大小查找,也可以根据最近访问时间来查找,这个参数是必须的

做什么:用find命令找到我们需要的文件后,可以对每个文件做一定的操作,称为“后续处理”,默认不加这个参数,find命令只会显示找到的文件

image-20200315194339746

与locate命令不同的是,find命令只会查找完全符合何物的字符串表示的文件,locate会查找所有包含关键字的文件

如果要查找以syslog结尾的文件,可以用*syslog

如果要查找包含syslog这个关键字的文件,可以用*syslog*

如果要在整个硬盘里查找,则使用find / -name "syslog"

文章目录
  1. 1. Linux
    1. 1.0.1. 将用户切换为root
    2. 1.0.2. whoami和hostname命令
    3. 1.0.3. 知识点
  2. 1.1. 简单的命令
    1. 1.1.1. date命令
    2. 1.1.2. ls命令
  3. 1.2. 命令的参数
    1. 1.2.1. 短参数(一个字母)
    2. 1.2.2. 长参数(多个字母)
    3. 1.2.3. 参数的值
  4. 1.3. 如何查找命令和命令的历史记录
    1. 1.3.1. 如何找到一个命令
    2. 1.3.2. 命令的历史记录
  5. 1.4. 实用的快捷键
  6. 1.5. 文件和目录组成命令
    1. 1.5.1. Linux中两种类型的文件
      1. 1.5.1.1. 普通文件
      2. 1.5.1.2. 特殊文件
    2. 1.5.2. 根目录
    3. 1.5.3. Linux目录结构
      1. 1.5.3.1. 目录命名规范
    4. 1.5.4. Linux的根目录的常用直属子目录
      1. 1.5.4.1. bin
      2. 1.5.4.2. boot
      3. 1.5.4.3. dev
      4. 1.5.4.4. etc
      5. 1.5.4.5. home
      6. 1.5.4.6. lib
      7. 1.5.4.7. media
      8. 1.5.4.8. mnt
      9. 1.5.4.9. opt
      10. 1.5.4.10. root
      11. 1.5.4.11. sbin
      12. 1.5.4.12. srv
      13. 1.5.4.13. tmp
      14. 1.5.4.14. usr
      15. 1.5.4.15. var
    5. 1.5.5. pwd命令和which命令
      1. 1.5.5.1. pwd命令
      2. 1.5.5.2. which命令
  7. 1.6. 目录相关的命令ls,cd和du
    1. 1.6.1. ls命令
    2. 1.6.2. ls命令常用的参数
    3. 1.6.3. cd命令
      1. 1.6.3.1. 相对路径与绝对路径
      2. 1.6.3.2. 重回家目录的三种方式
      3. 1.6.3.3. 路径自动补全
    4. 1.6.4. du命令
    5. 1.6.5. du命令常用参数
  8. 1.7. 浏览和创建文件
    1. 1.7.1. cat和less命令
    2. 1.7.2. less命令中最基本最常用的快捷键
    3. 1.7.3. head命令和tail命令
    4. 1.7.4. touch命令和mkdir命令
      1. 1.7.4.1. touch命令
      2. 1.7.4.2. mkdir命令
  9. 1.8. 文件的复制、移动、删除和链接
    1. 1.8.1. cp和mv命令
    2. 1.8.2. cp命令
      1. 1.8.2.1. 复制文件到另一个目录
      2. 1.8.2.2. 拷贝目录
      3. 1.8.2.3. 使用通配符*
    3. 1.8.3. mv命令
      1. 1.8.3.1. 移动文件
      2. 1.8.3.2. 重命名文件
    4. 1.8.4. rm命令
    5. 1.8.5. ln命令
      1. 1.8.5.1. 文件的存储
      2. 1.8.5.2. 创建硬链接
      3. 1.8.5.3. 创建软链接
  10. 1.9. 用户和权限
    1. 1.9.1. sudo命令
      1. 1.9.1.1. Linux下的用户组织
      2. 1.9.1.2. sudo su命令
    2. 1.9.2. 用户管理的命令
      1. 1.9.2.1. useradd命令
      2. 1.9.2.2. passwd命令
      3. 1.9.2.3. userdel命令
  11. 1.10. 群组的管理和文件权限管理
    1. 1.10.1. 群组管理的命令
      1. 1.10.1.1. groupadd命令
      2. 1.10.1.2. usermod命令
      3. 1.10.1.3. groupdel命令
      4. 1.10.1.4. chown命令
      5. 1.10.1.5. chgrp命令
      6. 1.10.1.6. 权限原理
      7. 1.10.1.7. 解析-rw-rw-r–
      8. 1.10.1.8. chmod命令
      9. 1.10.1.9. 用数字来分配权限
      10. 1.10.1.10. 总结
  12. 1.11. Nano
    1. 1.11.1. Nano的参数
  13. 1.12. 软件安装
    1. 1.12.1. 依赖关系
    2. 1.12.2. 软件仓库
    3. 1.12.3. 包管理工具
  14. 1.13. RTFM阅读
    1. 1.13.1. man命令
      1. 1.13.1.1. 显示使用手册
      2. 1.13.1.2. 手册页的不同区域
      3. 1.13.1.3. 举例
    2. 1.13.2. apropos命令
    3. 1.13.3. 其他阅读手册方式
      1. 1.13.3.1. -h或–help参数
      2. 1.13.3.2. whatis命令
  15. 1.14. 查找文件
    1. 1.14.1. locate命令
    2. 1.14.2. find命令
|