命令的参数
参数是写在命令之后的一些补充选项。命令和参数之间有空格隔开
格式:command parameters
command和parameter分别是英语“命令”和“参数”的意思
参数里可以包含多个参数,由空格隔开
参数也可以包含数字,字母,等等
参数没有固定的格式,但一般来说还是遵循一定的规范
短参数哦(一个字母)
最常用的参数形式就是一个短横线后接一个字母:command -p
一次加好几个短参数,可以用空格隔开:command -p -a -T -c
多个短参数也可以合并在一起:command -paTc
字母的大小写有区别,大写的T和小写的t通常含义不同
举一个实际的例子:ls -a
上面参数中的a是英语all的缩写,表示“全部”
长参数(多个字母)
长参数没有短参数那么常用,但也是很有用的
短参数是以一个短横线开始,而长参数是以两个短横线开始的
格式:command --parameter
多个长参数,是不能像多个短参数那样合并的
而是只能以空格隔开:command --parameter1 --parameter2
可以组合使用短参数和长参数
例如 command -paTc --parameter1 --parameter2
有时候,同一个意义的参数有短参数和长参数两张形式
效果是一样的:例如 ls -a 和 ls --all
参数的值
有一些参数需要赋值。短参数和长参数的赋值方式不一样
短参数哦赋值,通常是这样的:command -p 10
长参数赋值,通常是这样的:command --parameter=10
命令行提示符
sunshuo@sunshuo-PC:~$
sunshuo 当前用户的名字
@ 前面是用户名,后面是所在的域
sunshuo-PC 电脑/主机的名字。
-
当前所在目录的名字,会随用户进入不同目录而改变
$ 指你所具有的权限,表示普通用户,有限制的权限
# 表示超级用户,也就是root
sudo su 切换到root用户
退出root身份,可以用Ctrl+D的组合建,或者用exit命令
whoami 获取用户名
hostname 获取主机名
如何查找命令和命令的历史记录
如何找到一个命令
Tab建加两个回车,来补全命令或文件文件夹
命令的历史记录
- 向上键:按时间顺序向上查找用过的命令,没按一次就前进一个命令
- 向下键:按时间顺序向后查找用过的命令,没按一次就前进一个命令
- Ctal + R :用于查找使用过的命令
- history命令:是英语历史,历史记录的意思
- 可以用 !编号 这样的格式来重新运行history输出中对应编号的命令
一些实用的快捷键
- Ctrl + L : 用于清理终端的内容,就是清屏的作用。同clear命令
- Ctrl + D : 给终端传递EOF (End Of File,文件结束符)
- SHIFT + PGUP :用于向上滚屏,与鼠标的滚轮向上滚屏是一个效果
- SHIFT + PGON : 用于向下滚屏,与鼠标的滚轮向下滚屏是一个效果
- Ctrl + A : 用于跳到一行命令的开头。Home键有相同的效果
- Ctrl + E :用于跳到一行命令的结尾。End键有相同的效果
- Ctrl + U : 删除所有在光标左侧的命令字符
- Ctrl + K : 删除所有在光标右侧的命令字符
- Ctrl + W : 删除光标左侧的一个单词
- 单词 指的是用空格隔开的字符串。例如-a就是一个单词
- Ctrl + y: 粘贴用 Ctrl + U 或 Ctrl + k 或 Ctrl + w 删除的字符串 有点像剪切粘贴
文件组织,pwd和which命令
- pwd 显示当前你所在的目录
- which 获取命令的可执行文件的位置
Linux的根目录的直属子目录:bin
- bin : 是英语ary的缩写,表示二进制文件
- (我们知道可执行文件是二进制的)
- bin 目录包含了会被所有用户使用的可执行程序
Linux的根目录的直属子目录:boot
- boot : 英语boot表示启动
- boot目录包含与linux启动密切相关的文件
Linux的根目录的直属子目录:dev
- dev : 英语device的缩写,表示设备
- 包含外设。它里面的子目录,每一个对应一个外设
- 比如代表我们的光盘驱动器的文件就会出现在这个目录下面
Linux的根目录的直属子目录:etc
- etc : 有点不能顾名思义了。etc是法语 et cetera 的缩写
- 翻译成英语就是 and so on, 表示。。。等等
- etc目录包含系统的配置文件
- 至于为什么在/etc下面放配置文件
- 按照原始的unix的说法
- 这下面放的都是一堆零零散散的东西,就叫etc好了,是历史遗留
Linux的根目录的直属子目录:home
- home : 英语home表示家。用户私人目录
- 在home目录中,我们放置私人的文件
- 类似Windows中Documents文件夹,也叫我的文档
- Linux中的每一个用户都在home目录下有一个私人目录
- (除了大管家root)
- 假如我的用户名叫oscar,那么我的私人目录就是/home/oscar
Linux的根目录的直属子目录:lib
- lib : 英语library的缩写,表示库
- lib目录包含被程序所调用的库文件,例如.so结尾的文件
- 在windows下这样的文件是以.dll结尾
Linux的根目录的直属子目录:media
- media : 英文media表示媒体
- 可移动的外设(USB盘,SD卡,DVD, 光盘等等)插入电脑时
- Linux可以让我们通过media的子目录来访问这些外设中的内容
Linux的根目录的直属子目录:mnt
- mnt : 英语mount的缩写,表示挂载
- 有点类似media目录,但一般用于临时挂载一些装置
Linux的根目录的直属子目录:opt
- opt : 英语optional application software package 的缩写
- 表示可选的应用软件包
- 用于安装多数第三方软件和插件
Linux的根目录的直属子目录:root
- root : 英语根的意思
- 超级用户root的家目录
- 一般用户的家目录位于/home下,root用户是个例外
Linux的根目录的直属子目录:sbin
- sbin : 英语system binary 的缩写,表示系统二进制文件
- 比bin目录多了一个前缀system(“系统”)
- sbin 目标包含系统级的重要可执行程序
Linux的根目录的直属子目录:srv
- srv : 英语service的缩写,表示服务
- 包含一些网络服务启动之后所需取用的数据
Linux的根目录的直属子目录:tmp
- tmp : 英语temporary 的缩写表示临时的
- 普通用户和程序存放临时文件的地方
Linux的根目录的直属子目录: usr
- usr : 是英语Unix Software Resource的缩写
- 表示Unix操作系统软件资源(类似etc,也是历史遗留)
- usr目录是最庞大的目录之一
- 类似Windows中的C:\Windows
- 和C:\program Files这两个文件夹的集合
- usr目录里安装了大部分用户要调动的程序
Linux的根目录的直属子目录:var
- var : 英语variable 的缩写,表示动态的,可变的
- var通常包含程序的数据,比如log(日志)文件
- log文件记录电脑中发生了什么事
目录相关的命令
目录相关的命令ls,cd,du
-
ls:列出文件和目录
- 蓝色 --> 目录
- 红色 --> 压缩文件
- 浅蓝色 --> 链接文件
- 灰色 --> 其他文件
- 你可以加上参数 --color=auto 来开启颜色标注:ls --color=auto
- 可以用 --color=none 来关闭颜色标注:ls --color=none
- -a 显示所有文件和目录,包括隐藏的
- 在Linux中以 .(点)开头的文件为隐藏文件
- 不包括开头的两个点.和…,这两个的含义如下
- .(一个点)表示当前目录;…(两个点)表示上一级目录
- -A ,它的作用和小写-a几乎完全一致,唯一的不同就是-A不列出.和…这两个文件
- -l 详细列表
- -l 参数使得ls命令列出一个显示文件和目录的详细信息的列表
- 每一个文件或目录都有对应的一行信息
- 文件权限drwxr-xr-x之类的
- 链接的数目:2,1之类的
- 文件的所有者的名称
- 文件所在的群组
- 文件大小:单位是octet,也就是byte,是英语字节的意思
- 月(最近修改时间)
- 日 (最近修改时间)
- 时间(最近修改时间)
- 目录或文件名
- -h:以Ko,Mo,Go的形式显示文件大小
- 参数-h 是humain readable的缩写,表示适合人类阅读的 加上-h为文件大小加上单位
- -t 按文件最近一次修改时间排序
- -i 可以显示文件的inode (一般用于ln之后的文件)
-
cd 切换目录
- cd命令后面接的参数就是一个:你要去的那个目录的路径
- cd … 回到上一级目录
- cd …/… 连续后退两个层级
- cd ~ 重回家目录
- cd 重回家目录
-
du 显示目录包含的文件大小
- du 可以让我们知道文件所占的空间的大小
- 相比于ls -l命令,du命令统计的才是真正的文件大小
- du命令会遍历每个目录的子目录,统计所有文件的大小
- du是英语disk usage的缩写,表示 磁盘使用/占用
- -h 以Ko,Mo,Go的形式显示文件的大小
- 默认情况下,du命令只显示目录的大小
- 如果加上-a参数,则会显示目录和文件的大小
- -s 只显示总计大小
cat和less命令:显示文件内容
-
cat命令:一次行显示文件的所有内容
- cat是concatenate的缩写,表示连接/串联
- cat命令可以一次性在终端中显示文件的所有内容
- -n 代表展示行号 如:cat -n /var/log/auth.log
- 用cat命令连接多个文件会把多个文件合并在一起
-
less命令:分页显示文件内容
- 如果文件比较大,cat命令会令人“猝不及防”
- 这种时候,另外一个命令less就显的必不可少了
- 和cat命令最大的区别:less会分一页一页的显示文件内容
- 其实还有一个命令more。more是“更多”,less是“更少”
- more命令和less命令功能类似,more没有less强大
- 比如more命令不能往后翻页,只能往前,“一路向北”
-
less命令中最基本最常用的快捷键
- 空格键:文件内容读取下一个终端屏幕的行数
- 相当于前进一个屏幕(页)。很常用的快捷键
- 与键盘上的pageDown(下一页)效果一样
- 回车键:文件读取下一样,也就是前进一行
- d键:前进半页(半个屏幕)
- b键:后退一页。与键盘上的PageUp(上一页)效果一样
- y键:后退一行。与键盘上的向上效果是一样的
- u键:后退半页(半个屏幕)
- q键:停止读取文件,中止less命令
- 这里所说的快捷键当中提到的字母时,大小写时需要区分的
- 说到d键,那么就是小写字母d键,而不是大写字母D(shift + d)
- 在Linux中,通常来说都区分大小写
-
less命令中一些略显高级的快捷键
- = 号:显示你在文件中的什么位置
- 会显示当前页面的内容是文件中第几行到第几行
- 整个文件所含行数,所含字符数,整个文件所含字符
-
h键:显示帮助文件。按q键退出帮助文档 -
/(斜杠):进入搜索模式, 按n键跳到下一个符合项目,按大写N跳到上一个符合项目 -
正则表达式(Regular Expression)也是可以用在搜索内容中
head命令和tail命令:显示文件的开头和结尾
- 这两个新命令可是很有用的,特别是tail
- head用于显示文件的开头几行,tail用于显示文件结尾的几行
head命令:显示文件的开头
- head在英文中是头部的意思,默认显示头10行
- 可以指定显示的行数,用-n这个参数 显示5行如:head -n 5 auth.log
tail命令:显示文件结尾
- tail在英语中是“尾部的意思”
- 顾名思义,这个命令用于显示文件的结尾
- 默认情况下,tail会显示文件的尾10行 如:tail auth.log
- 可以指定显示的行数,用-n这个参数 显示5行如:tail -n 5 auth.log
- tail命令还可以配合-f参数来实时追踪文件的更新 如:tail -f auth.log
- 用ctrl+c可以终止tail -f命令
- 默认地,tail -f 会没过1秒检查一下文件是否有新内容
- 可以指定间隔检查的秒数,用-s参数:tail -f -s 4 auth.log
ctrl+c组合快捷键
- ctrl+c组合快捷键(同时按下)可以终止大部分终端命令
- 和正在执行的程序,有点类似windows中的Alte+F4
touch命令和mkdir命令:创建文件和目录
touch命令:创建一个空白文件
- 事实上,Linux没有一个命令是专门用来创建一个空白文件的
- touch命令其实一开始的设计初衷是修改文件的时间戳
- 就是可以修改文件的创建时间和修改时间
- 让电脑以为文件是在那个时间被修改和创建的
- touch在英语中是触摸触碰的意思
- 就是说我碰一下那个文件,让电脑以为我刚修改过
- 如果touch命令后面跟着的文件名是不存在的文件,它会新建一个 如:touch new_file
- 如果文件名中有空格可以加上双引号 如:touch “new file”
mkdir命令:创建一个目录
- mkdir命令就是用来创建一个目录的
- mkdir是mk和dir的缩合。mk是make的缩写,表示创建
- dir是directory的缩写,表示目录
- 还可以用-p参数来递归创建目录结构:mkdir -p one/two/three
文件的复制,移动,删除和链接
计较危险的命令:rm命令
cp和mv命令 拷贝文件和移动文件
cp命令:拷贝文件或目录
- cp是英语copy的缩写,表示拷贝
- cp命令不仅可以拷贝单个文件
- 拷贝文件 如: cp new_file new_file_copy
- 如果要拷贝到一个目录下不改变文件 如: cp new_file one 拷贝到one目录下
- 也可以改变名字 如:cp new_file one/a
- 拷贝目录,只要在cp命令之后加上 -r 或者 -R 参数
- r大写或小写都是一样的,都表示recursive,也就是“递归的”
- 拷贝的时候,目录中的所有内容(子目录或文件)都会被拷贝 如: cp -r one one_copy
- 使用通配符 *
- * 号(星号)是很常用的正则表达式符号,被称为“通配符”
- 顾名思义就是百搭的意思,可以替代任意字符串
- 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目录下
- mv *.txt one : 讲当前目录下所有txt文件移动到 one目录下
- mv new_file ranamed_file :重命名文件
rm命令:删除文件和目录
- rm命令可以删除一个文件,多个文件,目录
- 甚至你的整个Linux系统(只要你愿意的话)
- rm new_file_copy : 删除当前目录下的new_file_copy 这个文件
- 可以同时删除多个文件,只要用空格隔开每个文件即可
- 例如:rm file1 file2 file3
-i参数:向用户确认是否删除
-
保险起见,用rm命令删除文件时,可以加上-i参数 -
这样对于每一个要删除的文件,终端都会询问我们是否确认删除 -
i 是英语inform的缩写,表示“通知,告知”; -
有两种回答: -
y : 英语yes的意思,表示“是”。回车确认后,文件就删除了 -
n : 英语no的缩写,表示“否”。回车确认后,文件不会删除。
-f 参数:慎用,不会询问是否删除,强制删除
- 在rm命令后加上-f参数,终端不会询问用户是否确认删除文件
- 不论如何,文件会强制删除
- -f 是英语force的缩写,表示“强迫,强制”
- rm -f file : 强制删除file这个文件
-r 参数 :递归的删除
- r是英语recursive的缩写,表示“递归的”
- 使用-r参数,可以使rm命令删除目录
- 并且递归删除其包括的子目录和文件
- 这个参数也挺危险,用的不好你的子目录和文件都没了
- rm -r one : 删除one这个目录和其下的所有子目录
- 其实,也存在一个命令rmdir,看着和rm -r 挺像
- 但是这个命令有个局限性:只能删除空的目录
ln命令:创建链接
- ln是link的缩写,在英语中表示“链接”
- ln命令用于在文件之间创建链接
- 用一个你比较熟悉的词好了:快捷方式
- 事实上,Linux有两种链接类型:
- Physical link : 物理链接或硬链接
- Symbolic link : 符号链接或软连接
创建硬链接
- ln file1 file2 : 创建硬链接,file1和file2 文件内容指向同一个inode
- 如果我们用rm file1来删除file1,对file2也没什么影响
- 对应硬链接来说,删除任意一方的文件
- 共同指向的文件内容并不会从硬盘上被删除
- 只要即删除file1又删除file2,它们共同指向的文件内容才会消失,也就是那个inode才会消失
创建软链接
- 软链接才真正像我们windows下的快捷方式,原理和相似
- 创建硬链接时ln不带任何参数,创建软链接需要加上-s参数
- s是symbolic(符号)的缩写
- ln -s file1 file2 : 创建file1的软连接file2
- 软连接可以指向目录,硬链接不行
硬链接同一个硬链接指向相同的inode号
软连接软连接的文件指向被软连接的文件,被软连接的文件指向inode号,删除了被软连接的文件,会变成死链接
用户和权限,用户管理
sudo命令:以root身份运行命令
sudo命令:暂时成为root
- sudo是英语Substitute User DO的缩写
- substitute 是“替换,代替,替身”的意思。user是用户的意思。
- do是“做”的意思。连在一起就是“替换用户来执行。。。”的意思
- 如果要运行只有root才可以运行的命令
- 可以在此命令前加上sudu命令,如下 sudo 命令
sudo su命令:一直成为root
useradd 命令:添加新用户
- useradd命令,很容易理解其作用,因为完全可以顾名思义
- user是英语“用户”的意思,add是英语“添加”的意思
- useradd用于添加用户。用法:命令后接要创建的用户名
- 在普通身份下,运行useradd ccc
- 终端提示 : useradd: Permission denied.
- 意思是“useradd”:权限被否决
passwd命令:修改密码
- passwd命令可以修改用户的密码
- passwd ccc : 指定密码
userdel:删除用户
群组管理的命令
- Linux 中每一个用户都属于一个特定的群组
- 如果你不设置用户的群组,默认会创建一个和它用户名一样的群组
- 并且把用户划归到这个群组
groupadd:创建群组
- groupadd是group和add的缩写
- group是英语群组的意思,add是英语添加的意思
- groupadd命令用于添加一个新的群组
- 用法也很简单,和useradd命令类似,后接需要创建的群组名
- 例如:groupadd friends
- 创建一个名为friends的群组,friends是英语“朋友”的意思
usermod命令:修改用户账户
- usermod是user和modify的缩写
- user是英语用户的意思,modify是修改的意思
- usermodify命令用于修改用户的账户
usermod命令的参数
-
-l :对用户重命名。 /home 中的用户家目录名不改变,需要手动修改 -
-g : 修改用户所在群组 -
usermod -g friends sunshuo -
用户sunshuo之前的群组是sunshuo-PC默认的 -
用groups(“群组”)命令可以获知一个用户属于那个(些)群组 -
用法很简单,后接用户名就可以了,当然用户名必须存在才行 -
可以将一个用户添加到多个群组,用-G参数 (大写的G) -
usermod -G friends,happy,funny sunshuo : 将sunshuo这个用户一次加到friends happy funny 这三个群组中 -
记得群组名之间要用逗号分隔,而且没有空格 -
注意:使用usermod时要小心,因为配合-g或-G参数时 -
它会把用户先从原先的群组里剔除,加入到新的群组 -
如果你不想离开原先的群组,又想加入新的群组 -
可以在-G参数的基础上加上-a参数 -
a 是英语append的缩写表示追加 -
usermod -aG friends sunshuo -
groups命令单独使用,不加任何参数,会显示当前用户所在的群组 -
追加群组的时候,一定要用大写的G参数,即使只追加一个群组
groupdel命令:删除群组
修改文件的所有者和群组
- 只有root用户可以修改一个文件的所有者和群组
- 我们在家目录里创建一个文件,例如file.txt
chown命令:改变文件的所有者
- chown是change和owner的缩写。需要root身份才能运行
- change是英语“改变”的意思,owner是英语“所有者”的意思
- chown命令用于改变文件的所有者
- 用法也很简单,后接新的所有者的用户名,再接文件名
- chown ccc file.txt : 把file.txt 的所有者变成ccc
- chown ccc:firends file.txt : 就是把file.txt文件的所有者改为ccc,群组改为firends
chgrp 命令:改变文件的群组
- chgrp是change和group的缩写
- change是英语“改变”的意思,group是英语“群组”的意思
- change命令用于改变文件的群组
- 用法也很简单,后接新的群组名,再接文件名
- chgrp firends file.txt : 把文件file.txt的群组改为firends
-R参数:递归设置子目录和子文件
- chown命令的-R参数非常有用
- R是recursive的缩写,表示“递归”
- 注意:这里只能用大写的R,小写的r不起作用
- chown命令配上-R参数
- 就会使得被修改的目录的所有子目录和子文件都改变所有者
- 或者连群组也改变,用上述冒号的方法来同时修改所有者和群组
chmod命令:修改访问权限
权限的原理
-
在Linux系统里,每个文件和目录都有一列权限属性 -
访问权限指明了谁有读的权利,谁有修改的权利,谁有运行的权利 -
在我们运行ls -l命令的时候 -
显示的每个文件或目录的第一列信息就是访问权限 -
文件信息的第一列比较复杂,可以看到不少d,r,w,l,x等字母 -
不细分的话,这些可以通称为文件访问权限符 -
d:英语directory的缩写,表示“目录”。就是说这是一个目录 -
l:英语link的缩写,表示“链接”。就是说这是一个链接 -
r:英语read的缩写,表示“读”。就是说可以读这个文件 -
w:英语write的缩写,表示“写”。就是说可以 写/修改 这个文件 -
x:英语execute的缩写,表示“执行/运行”。可以运行这个文件
- 如果x权限在一个目录上,那么表示的是这个目录可以被读
- 就是可以打开词目录来看子目录和子文件,如果同时有r权限的话
- 如果相应位置有字母,表示有相应的权限。短横-,表示没有相应的权限
-
最后可能会有一个点,这是SELinux的安全标志 -
为什么我们看到这一排有好多个重复出现的r,w和x呢?
- 第一组rwx表示文件所有者对于此文件的访问权限
- 第二组rwx表示文件所属群组的其他用户对于此文件的访问权限
- 第三组rwx表示除前两组之外的其他用户对于此文件的访问权限
sunshuo@sunshuo-PC:~$ ls -l new_file
-rw-rw-r-- 1 sunshuo sunshuo 5 4月 21 23:32 new_file
- 解析 -rw-rw-r–
- - :第一个短横表示这是一个普通文件
- rw-:文件所有者(sunshuo)对文件有读,写的权限,没有运行的权限
- rw-:表示此文件所在的群组此处是sunshuo这个群组的其他用户对文件有读,写的权限,没有运行的权限
- 这也很好理解,因为这是一个普通文件,默认没有可执行的属性
- 记住:如果w权限(写的权限),那么也有删除此文件的权限
- r–:其他用户(除去sunshuo用户和sunshuo群组的用户)对这个文件有读的权限,没有写的权限,没有运行的权限
chmod命令
- chmod命令不需要是root用户也能执行
- 只要你是此文件的所有者,就可以用chmod来修改文件的访问权限
- chmod是change和mode的缩写
- change是英语“改变的意思”,mode是“模式”的意思
- chmod命令用于修改文件的各种访问权限
用数字来分配权限:chmod的绝对用法
- 事实上,Linux为每种权限(r,w和x)分配了对应的数字
- 要合并这些权限,就需要做简单的加法了:将对应的数字相加
- 假如我们要分配读,写权限,那么我们就要用 4 + 2 ,就等于6
- 数字6表示具有读和写的权限
权限 | 数字 | 计算 |
---|
— | 0 | 0+0+0 | r– | 4 | 4+0+0 | -w- | 2 | 0+2+0 | –x | 1 | 0+0+1 | rw- | 6 | 4+2+0 | -wx | 3 | 0+2+1 | r-x | 5 | 4+0+1 | rwx | 7 | 4+2+1 |
- 访问权限三组
- (所有者的权限,群组用户的权限,其他用户的权限)
- 只要分别做加法就可以了,然后把三个和连起来
- chmod 640 file.txt
- 6: 文件所有者拥有读的权限,拥有写的权限,没有执行的权限
- 4:文件所在群组的其他用户拥有读的权限,没有写的权限,没有执行的权限
- 0 :除去该文件的所有者和所在群组的其他人其他用户没有读的权限,没有写的权限,没有执行的权限
- 可以给的最宽泛的权限就是777
- 所有者,群组用户,其他用户,都有所有权限
- 如果权限是000,那么没有人能对此文件做什么,除了root,root可以做任何事情
用字母来分配权限:chmod的相对用法
- 除了数字,可以用另一种方式来分配文件的访问权限:用字母
- 原理是类似的,但是有是用字母的方式更加精巧
- 因为不需要一次性把三组权限都写出来
- u:user的缩写,是英语“用户”的意思。表示所有者
- g:group的缩写,是英语“群组”的意思。表示群组用户
- o:other的缩写,是英语“其它”的意思。表示其它用户
- a:all的缩写,是英语“所有”的意思。表示所有用户
- +:加号,表示添加权限
- -:减号,表示1去除权限
- =:等于号,表示分配权限
- chmod u+rx file : 文件file 的所有者增加读和运行的权限
- chmod g+r file : 文件file的群组其它用户增加读的权限
- chmod o-r file : 文件file的其它用户移除读的权限
- chmod g+r o-r file : 文件file的群组其它用户添加读的权限,其它用户去除读的权限
- chmod go-r file : 文件file 群组的其它成员和其它用户均移除的权限
- chmod +x file : 文件file的所有用户增加运行的权限
- chmod u=rwx,g=r,o=- file : 文件file的所有者拥有读写执行的权限,群组其它成员拥有读的权限,其它用户没有权限
-R 参数:递归地修改访问权限
- chmod配合-R(大写的R)参数可以递归地修改文件访问权限
- 假如只允许sunshuo能读,写,运行/home/sunshuo 目录下的所有文件
- chmod -R 700 /home/sunshuo 或 chmod -R u=rwx,g=-,o=- /home/sunshuo
Nano 文本编辑器和终端配置
Nano,初学者的文本编辑器
- Linux终端的文本编辑器中,较著名的有:Nano,Vim,Emacs
- 其它文本编辑器还有Gedit,Sublime,Atom,等等
Nano初体验
- nano是“豪微”的意思,也就是10的-9次方
- 纳米科技的“纳米”就是nanometer,由nano和meter组成
- 这个文本编译器叫nano,应该是取其短小精悍的意思把
- Nano相比Vim/Emacs,确实小巧简单。“麻雀虽小,五脏俱全”
- 不及后两者复制和强大。但是对于入门的文本编辑器还是很合适的
Nano是一个文本编辑器,不是一个文本处理器
文本编辑器
- 文本编辑器:Text Editor.可以编辑和查看文本文件
- 但是不能对字做格式处理
- 例如:加粗,斜体,改变颜色,改变文字大小,添加超链接等等
- 常见的有Windows下的记事本;macOS下的文本编辑
- Linux下的Vi,Vim,Emacs,Gedit;DOS下的edit等
- Linux下,默认系统中至少安装了一种文本编辑器
- 在macOS下,nano也是默认安装的
文本处理器
-
文本处理器:Text Processor.又叫文档编译器 -
不仅可以编辑查看文档,而且可以对其文件进行格式处理 -
加下划线,设为标题,插入图片等等 -
这些软件只能在图形界面下使用 -
常见的Windows下的Word;macOS下的Pages -
Linux下的OpenOffice Writer,等等 -
文本编辑器处理的文件格式和文本处理器的文件格式一般也不同 -
那么什么时候我们需要用到文本编辑器呢? -
我们可以用文本编辑器来编辑纯文本文件 -
纯文本格式,就是没有任何文本修饰的。没有任何粗体,下划线,斜体,图形,符号或特殊字符及特殊打印格式的文本 -
只保存文本不保存其格式设置 -
Windows下,比较熟悉的纯文本文件就是.txt结尾的文本文档 -
在Linux和macOS下,后缀名没有那么重要 -
不少纯文本文件是没有后缀名的 -
文本编辑器对程序员来说又是必不可少的 -
它可以让我们编辑各种编程语言的代码程序 -
.c(C语言代码文件), .cpp(C++代码文件) -
.py(Python代码文件), .php(PHP代码文件) -
.java(JAVA代码文件),.xml(XML代码文件) -
在学习了如何使用nano之后 -
我们也会学习如何修改两个配置文件:.nanorc和.bashrc -
这两个文件能让我们分别配置nano和终端
揭开Nano的面纱
- Nano的全称其实是GNU Nano
- Nano的设计灵感来自于Pico的文本编辑器
- Nano也是 Nano is ANOther editor的递归缩写,意思是Nano是另一种编辑器
- Nano的官网是https://www.nano-editor.org
启动Nano
- Linux预装了Nano,因此要启动Nano,只需要在终端输入
- nano
- 回车,就打开了nano文本编辑器
Nano中的键盘快捷键
-
终端下部,我们可以看到有两行帮助文档 -
^这个符号表示键盘的Ctrl键,所以这些都是Nano的快捷键组合 -
^X标明的就是exit,就是退出Nano.exit是英语退出的意思 -
这些快捷键组合中虽然字母是大写,但就是键盘上对应的字母键,并不需要用Shift键来将其变成大写 -
Ctrl+G:显示帮助文档 -
Ctrl+O:保存文件 -
Ctrl+R:打开其他文件 -
Ctrl+Y:上一页 -
Ctrl+V:下一页 -
Ctrl+K:剪切当前一行 -
Ctrl+X:退出 -
Ctrl+W:查找 -
Ctrl+U:粘贴刚剪切的内容 -
Ctrl+:替换 -
Ctrl+F:向前移动一格光标 -
Ctrl+B:向后移动一格光标 -
Ctrl+P:向上移动一行 -
Ctrl+N:向下移动一行 -
用键盘上的方向键(上,下,左,右)也可以控制光标移动 -
PaUp和PaDn也分别与Ctrl+Y和Ctrl+V功能一样 -
如果你比较熟悉这些快捷键组合之后。觉得下方的帮助文档有点碍眼 -
可以让它消失,只要先按Esc键,再按X键,帮助文档就没了 -
如果要重新调出帮助文档,则同样操作
Nano的参数
- 刚才我们打开nano时,是单独用了nano这个命令
- 当然nano命令也可以带参数的
- 最常用的参数当然就是要打开的文件名了
- nano file.txt : 用nano打开file.txt,如果你对file.txt有写的权限
- 那你就可以用nano来修改这个文件了
- 如果file.txt文件不存在,就会创建一个空文件,名字就叫file.txt
- -m : 激活鼠标。如果没有-m 参数,那么鼠标在nano里是不起作用的
- 加了-m参数鼠标可以通过点击来控制光标的位置
- -i : 激活自动缩进的功能。这对程序员写代码太有用了
- -A : 激活智能Home键的功能。通常情况下按下键盘的Home键,光标会立即跳到一行的最开始。用了-A这个参数
- 按下Home键它会智能的判断,根据一行的开始处有无缩进来跳
- 如果我们要同时激活三个属性,只需要这样用
- nano -miA file.txt
通过.nanorc来配置nano
- Nano也有一个配置文件,用于设置nano的一些选项
- 这个文件就叫做.nanorc
- 注意.nanorc的最前面有一个点,表明这是一个隐藏文件
- 像这样的配置文件,用ls -l命令是列不出来的,需要ls -a来列出
- Linux中的配置文件大多以点开头,而且多以rc结尾
- 比如Vim的配置文件.vimrc; Bash shell的配置文件.bashrc
- 那这个rc是什么意思呢?
- Linux或Unix的许多程序在启动时
- 都需要“rc”后缀的初始文件或配置文件
- “rc”是“runcomm”的缩写,即“run command”(运行命令)
- “rc”取自“runcom”,来自麻省理工学院在1965年发展的CTSS系统
- 相关文献曾记载:具有从档案中取出一系列命令来执行的功能
- 称为“run commands”,又称“runcom”
- "rc"是很多脚本类文件的后缀
- 这些脚本通常在程序的启动阶段被调用,通常是Linux系统启动时
- 而.bashrc是当Linux的Bash shell启动后所运行的脚本
- 每个Linux的用户都可以在自己的家目录创建.nanorc这个文件
- 在每次nano启动前,它会读取此配置文件
- 我的.nanorc文件应该在/home/sunshuo/.nanorc
- 如果在家目录没有.nanorc
- 那么nano会用全局的配置文件
创建.nanorc
- 每一行一句配置语句,配置语句是以set或unset开头
- set是英语“放置,设置”的意思,用于激活
- unset则用于关闭。set或unset后接你要配置的项目
- 例如:set mouse
- 这句话就用于激活鼠标(mouse是英语“鼠标”的意思)
- 每次nano启动时都会激活鼠标操作了,不必写-m这个参数了
- 如法炮制,使得我们不用每次启动nano都加上-i和-A参数
- set autoindent : 激活自动缩进,相对于-i参数的作用
- set smarthome : 激活智能Home键
全局的nanorc
- 每个用户家目录中的.nanorc这个文件非常实用
- 因为它可以帮助你设置自己的nano选项
- nano有一个全局的配置文件
- 是为系统上所有用户所公共调用的,也叫nanorc
- 但是在/etc中,是/etc/nanorc。这回nanorc前面没有点了
- /etc这个目录,它里面存放系统的配置文件。一般为所有用户共用
- 如果我们要修改这个文件,建议用sudo命令
- sudo nano /etc/nanorc
- 在这个配置文件里,有所有可以放置在你自己的.nanorc中的语句
- 这些配置语句都是以#开头,就是说默认是注释掉的(不生效)
- 在/etc/nanorc中把那些配置语句前面的#去掉,会对全局用户生效
通过.bashrc配置终端
- 对于nano,我们有一个配置文件叫.nanorc
- 对应我们的终端,也有一个配置文件,叫做.bashrc
- 是用户的终端配置文件。在我的情况,位于/home/sunshuo/.bashrc
- 这个文件一般来说是默认存在的,不像.nanorc可能还有自己创建
- 打开家目录下的终端配置文件看看,只要输入以下命令
- nano ~/.bashrc
- .bashrc文件比较复杂,初看可能会有点眼花缭乱的感觉
- 我们暂时不会深入学习它的语法,因为bansh是一种shell
- 暂时只要了解Shell是外壳程序(Shell是英语“外壳”的意思)
- 是用于解释我们输入终端的各种命令的
- Shell是一个用户跟操作系统之间的一个命令解释器
- 也就是用户和Linux操作系统之间沟通的桥梁
- Bash是最常见的一种Shell程序
- CentOS和大部分常见的Linux发行版默认的Shell程序就是Bash
- .bashrc就是Bash这个Shell程序的配置文件
- .bashrc本身语法也是Bash的语法,是一种脚本语言
- 在.bashrc文件中,我们可以修改命令行提示符的样式
- 如果你觉得目前的命令行提示符太繁琐太长了
- 你可以把它改短一些,简洁一些
全局的bashrc
- 之前的nano有全局的配置文件: /etc/nanorc
- 终端的bash也有它的全局配置文件:/etc/bashrc
- 家目录下的.bashrc文件的优先级比系统的/etc/bashrc文件高
- 例如同样的配置选项,如果.bashrc和/etc/bashrc不同,那么以家目录下.bashrc为准
- 把bashrc文件向下拉,看到有PS1开头的行
- 这个就是设置命令行提示符的样式的
- ${USER}表示用户名(例如我的用户名是sunshuo)
- ${HOSTNAME}是电脑的名称(我的情况是sunshuo)
- @就是分割用户名和电脑名的那个@号
- 你也可以试着修改。但对于初学者来说,别把bashrc文件搞乱了为好
profile配置文件
- 家目录下,其实还有一个.profile文件
- 而且它也有对应的全局profile文件,是/etc/profile
- profile在英语中是“外观,轮廓”的意思
- 有一点需要记住:profile文件会调用.bashrc
- 我们修改了.bashrc,也就间接修改了profile文件
- profile文件会用profile本身的配置再加上.bashrc的配置
- 修改了.bashrc和.profile文件后
- 默认是在用户下次登录系统时才能生效
- 可以用source命令来使改动立即生效
- source .bashrc
- source .profile
软件仓库
- 在windows下,要安装软件,一般使用“安装程序”
- 一般是.exe结尾的可执行程序,双击即可运行
- 一般会把软件安装到Program FIles这个文件夹下
- 例如QQ这个软件的安装包就是.exe文件
- 在CentOS下也有类似的程序,但不能称之为“安装程序”
- 而称之为“软件包”,英语是Package
- 一个软件包其实是软件的所有文件的压缩包
- 二进制形式的,包含了安装软件的所有指令
- 在Red Hat一族里,软件包的后缀是.rpm
- rpm是Red Hat Package Manager的缩写
- 表示“红帽软件包管理器”
- CentOS作为Red Hat一族的一员,也是用.rpm的软件包
- Debian一族(Ubuntu, Debian,等)的软件包是.deb为后缀
- .rpm格式的软件包,和Windows下的.exe的安装程序类似吗?
- 确实很像,但其实它们的运行方式不一样
- 软件包管理包括了依赖关系的管理
- 软件包不需要我们通过搜索引擎找到并下载
- 几乎所有.rpm软件包存放在相同的地方,称为软件仓库(repository)
依赖关系
- 通常来说,很少有一个软件可以单独在Linux上运行
- 也就是说它不依赖与其他程序
- 一个软件经常需要使用其他程序或者其他程序的片段(称之为库)
- 一个软件依赖其他程序,这就是依赖关系
- 比如说,Linux下类似Photoshop的软件GIMP
- GIMP的正常运作需要调用图片读取的库(例如读取一个JPG图片)
- 往往依赖关系还有下层依赖关系,环环相扣
- 当然在Windows里面你也遇到过依赖问题
- 比如你运行Eclipse软件,它会说你还没安装Java环境
- 幸运的是,Red Hat的包管理系统非常智能
- Linux的软件包都存放在一个地方,叫做软件仓库(repository)
- 对与windows的各种软件,可没有这样一个集中存放的地方
- 因为Linux是在Windows之后诞生的(1991年前后)
- 为了避免Windows的这个弊端
- Linux选择创建一个集中存放软件的地方
- 当然了,Linux的这一优势也得益于它的开源性
- Linux中的软件基本都是开源自由的,任何人都可以分发,传播软件
- 只要遵循一定软件协议,把这些软件集中存放在某个地方是可行的
- Windows的大部分软件都是有版权的,闭源的,不开放的
- 甚至是收费的,这些软件的作者不会同意把他们本该赚钱的软件存放到一个公共仓库任大家分发,使用
软件仓库的概念
- 前面我们说了Linux的软件会集中存放在一个地方
- 叫做软件仓库,英语是repository
- 你也许会问:假如全球的Linux用户都到同一个地方取下载软件
- 那么存放软件的那个服务器岂不是会死机?
- 所以,其实软件仓库绝不只是存放在一台服务器上
- 全球有很多个软件仓库(也就是有很多服务器)
- 大部分软件仓库里的软件是一样的,只不过是拷贝而已
- 有一些特别的软件仓库,会存放其他软件仓库没有的软件
- 是用户选择软件仓库,因为基本上各个软件仓库都是一样的
- 一般建议用户选择离自己所在比较近的软件创库的服务器
- 用默认的官方版本没有太大坏处,但是有时候会很卡
- 所以我们要学习如何切换软件仓库
- CentOS系统使用的软件仓库的列表是记录在一个文件中
- 要编辑的那个包含软件仓库的列表的文件是
- /etc/yum.repos.d/CentOS-Base.repo
- Debian 需要修改的文件为 /etc/apt/sources.list
- 这个文件是系统文件,只能被root用户修改
- 那么问题来了:我怎么知道其他软件仓库的服务器地址呢?
切换CentOS的软件源
- CentOS官方的源列表
- https://www.centos.org/download/mirrors/
yum update / upgrade : 更新软件包
- update 和 upgrade几乎没有什么区别
- yum update不删除旧包
- yum upgrade删除旧包
yum search : 搜索软件包
yum install:安装软件包
- sudo yum install xxx
- xxx对应软件包名
yum remove:删除软件包
手册
man命令,显示使用手册
- man是manual的缩写,是英语“使用手册”的意思
- 用法很简单,后接你想要显示使用手册的命令,函数,等等
- 此命令用于查看系统中自带的各种参考手册
- 可执行程序或shell命令
- 系统调用(Linux内涵提供的函数)
- 库调用(程序库中的函数)
- 文件(例如/etc/passwd)
- 特殊文件(通常在/dev下)
- 游戏
- 杂志(比如man(7),groff(7))
- 系统管理命令(通常只能被root用户使用)
- 内核子程序
- 如果man的手册没有安装,可以运行以下命令
- sudo yum install -y man-pages
- 如果man的手册不全,可以运行以下命令
- sudo mandb
- 输入man + 数字 + 命令/函数,可以查到相关的命令和函数
- 若不加数字,man默认从数字较小的手册中寻找相关命令和函数
- man这个词本身又是英语“男人”的意思
- 所有Linux和Unix世界流行着一句有趣的话
- 不懂就问一问“男人”
在手册中移动
- 键盘上的方向键:向上和向下键使我们实现上一行和下一行的跳转
- PgUg和PgDn(或者空格键)键:实现上一页和下一页的跳转
- 键盘上的Home和End键:实现开始和结尾的跳转
- /键(斜杠):实现搜索,和之前在less命令中功能类似 n键下一个 N键上一个
- 键盘上的q键:退出手册页
手册页的不同区域
- 手册页分为不同的区域
- 这些区域的名字是用大写和粗体表示,且靠左对齐
- NAME:英语“名字”的意思
- 手册页对应的命令或函数名字,后接简单描述
- SYNOPSIS:英语“概要,大意,摘要”的意思
- 使用此命令的所有方法
- DESCRIPTION: 英语“描述”的意思。命令的更深入的描述
- 这个区域也会包括所有参数及其用法
- 一般来说这个区域也是文字最多的
- AUTHOR : 英语是作者的意思
- 命令的作者。有时候不止一个作者
- COPYRIGHT : 英语“版权”的意思。版权
- 也就是用了什么许可证(Licence)
- 大多数命令都是在GPL许可证下的开源代码
- SEE ALSO:英语“另见”的意思
- 与此命令的其他命令。扩展阅读
SYNOPSIS区域
- SYNOPSIS这个区域是手册中很重要的一个区域
- 也是最难理解的区域之一
- SYNOPSIS这个区域的作用就是列出使用命令的所有可能方法
- 简单地说,SYNOPSIS这个区域显示了所有可能的参数组合
- 有些命令的SYNOPSIS区域比较简单,但有些就很复杂了
man mkdir
mkdir - make directories
- make 是英语创建的意思
- directories 是directory(英语“目录”)的复数
- 所有mkdir命令用于创建目录
- mkdir 命令的 SYNOPSIS 区域如下
? mkdir [OPTION]... DIRECTORY...
- mkdir : 使用mkdir命令,我们当然需要先输入mkdir
- [OPTION] : option是英语“选项”的意思
- 表示在mkdir之后,我们可以加选项参数(就是-v,-h之类)
- SYNOPSIS区域,中括号中的内容表示可选,不一定要添加选项参数
- DIRECTORY : directory是英语“目录”的意思
- 就是需要mkdir命令创建的目录
- 这个参数是必须的,因为并没有用中括号括起来
- … : 省略号表示可以有多个此类内容
- 在[OPTION] 和 DIRECTORY后都有省略号
- 分别表示可以有多个选项参数和多个目录名
- 也就是说可以同时指定多个选项参数
- 也可以用mkdir同时创建多个目录
- SYNOPSIS 区域中,粗体的文字表示要原封不动地输入
- 下划线的文字表示要用实际的内容替换
- 这也不难理解:mkdir命令肯定要原封不动的输入
- 而DIRECTORY就要替换成实际要创建的目录名称
mkdir用例
- 根据SYNOPSIS区域的语法
- 使用mkdir命令时至少要输入一个创建的目录名。例如:
- mkdir photo : 用于创建一个名为photo的目录
- DIRECTORY 之后的省略号表明我们可以同时输入多个目录名
- 用于同时创建多个目录,例如
- mkdir photo video music : 创建photo, video, music三个目录
- 也可以加选项参数,选项参数在DESCRIPTION区域中
- 以上所有的选项参数都可以替换[OPTION]
- 而且可以同时写多个选修参数,例如-pv
man cp
SYNOPSIS
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
-
cp [OPTION]… [-T] SOURCE DEST -
拷贝源文件到目标文件 -
除了cp原封不动输入,还必须输入SOURCE 和 DEST 这两个部分内容 -
分别用实际的源文件名和目标文件名代替 -
也可以加上一个或多个选项参数(替换OPTION) -
还可以加上-T参数 -
cp [OPTION]… SOURCE… DIRECTORY -
拷贝一个或多个源文件到目录 -
除了cp原封不动输入,还必须输入SOURCE 和 DIRECTORY两部分 -
分别用实际的源文件名和目录名代替 -
也可以加上一个或多个选项参数(替换OPTION) -
cp [OPTION]… -t DIRECTORY SOURCE… -
拷贝一个或多个源文件到目录 -
与这两种方法其实效果是一样的,只不过这里把目录名放在了前面 -
后接需要拷贝到目录的文件名(一个或多个) -
但是这里的-t参数是必须加的 -
也可以加上一个或多个选项参数(替换OPTION) -
cp file.jpg file_copy.jpg -
将file.jpg拷贝为file_copy.jpg -
cp file.jpg file_copy.jpg photo/ -
将file.jpg 和 file_copy.jpg 拷贝到photo这个文件夹中
SYNOPSIS区域的语法总结
- 粗体:原封不动的输入
- 下划线部分:用实际的内容替换
- [-hvc] : -h,-v和-c选项都是可选的,非强制性的
- a|b : 你可以输入a或者b选项,但是不能够同时输入a和b
- option… : 省略号表示前面的内容可以输入任意多个
apropos 命令:查找命令
- apropos 是英语“关于…”的意思。其实这个单词是从法语引进的
- apropos命令的用法很简单,只要后接一个关键字
- apropos命令就会为你在所有的手册页中查找相关的命令
- 因此apropos命令与man命令有点对立的关系
- man命令用于显示命令的使用手册
- 而apropos命令用于根据手册中的关键字来找到命令
- 想要知道如何用终端的命令来控制音量
- 可以这样查找:apropos sound
- 为什么用sound这个关键字呢?
- 因为sound是英语“声音,音量”的意思
- 运行apropos sound之后
- 就列出了所有使用手册中有sound这个关键字的命令
- 左侧是命令的名字,后面是命令的手册中出现关键字的句子
- 我们就知道了要调节音量可以用的命令是:
- alsamixer
- 可以用加号和减号来调节音量
其他阅读手册的方式
-h 或 --help参数
- 虽然并不一定,但是大多数命令都接受-h这个参数
- 有时候它等价的参数–help也可以
- -h参数中的h是help的首字母,help是英语“帮助”的意思
- 所有-h或–help参数的作用是显示帮助文档
- 虽说一般帮助文档没有man命令显示的使用手册那么详细
- 但是也很有用,且往往比man显示的手册易于阅读
- 比如我们要查看yum命令的帮助文档,可以这样
- yum -h
whatis命令
- what是英语“什么”的意思,is是英语“是”的第三人称单数形式
- 所有连起来whatis就是“是什么”的意思
- whatis命令可以说是man命令的精简版
- 只会列出man命令显示的手册的开头部分,就是概述命令的作用
- 例如用whatis命令查看ls命令的作用
- whatis ls
在网络上查看手册
- 不仅仅能在Linux系统里查找到手册,在网络上也可以找到
- 如果你暂时不在Linux系统里,又想查一个命令或者函数的使用手册
- 可以用搜索引擎如google或者百度来搜索
- 例如,我要查看ls命令的手册,可以在google里搜索
- man ls
- 一般搜索结果的第一个就是你要找的
|