注:本文当前linux系统发行版为Red hat系的Centos7
本文结构
Linux命令基础
如何查找命令和命令的历史记录
文件和目录组织命令
Linux中一切都是文件
目录
对文件的操作
浏览和创建文件
文件的复制移动删除和链接
Linux命令基础
切换为root 用户
sudo su
退出root用户:exit
或者ctrl+D
获取当前用户名:whoami
获取当前主机名:hostname
命令行提示符可自行配置,以后再提
列出当前目录下的文件和目录:ls
ls是list的缩写
-
命令参数:参数是写在命令之后的一些补充选项,命令和参数之间有空格隔开
参数里可与包含多个参数,由空格隔开
参数也可以包含数字,字母等
参数没有固定的格式,但是一般来说还是会遵循一定的规范短参数(一个字母)
最常用的参数形式是一个短横线后接一个字母:
举个伪命令例子 command -p
一次加好几个段参数,可以用空格隔开:
command -p -a -T -c
多个段参数可以合并在一起:command -paTc
区别字母大下写 例如 command -T 和command -t是不同的
ls -a
获取当前目录下所有文件长参数(多个字母)
多个长参数不能像多个短参数那样合并,而是只能以空格隔开:
command --parameter1 --parameter2
短参数和长参数可以组合使用
有时候,同一意义的参数有短参数和长参数两种形式
效果相同:例如ls-a
和ls-all
参数的值
有一些参数需要赋值,短参数和长参数的赋值方式不同
短参数赋值,通常是这样的:command -p 10
长参数赋值,通常是这样的:command --parameter=10
如何查找命令和命令的历史记录
-
如何找到一个命令
用Tab键补全命令,也可以补全文件名、路径名:按两次Tab键
当按Tab键补全后结果太多,一页显示不完时,space(空格键)表示跳到下一页,enter(回车)键可以跳到下一行
按下Q键退出列表 -
命令的历史记录
向上键:按时间顺序向前查找使用过的命令,每按一次就前进一个命令
向下键:按时间顺序向后查找使用过的命令,没按一次就前进一个命令Ctrl+R:用于查找使用过的命令
history命令:列出之前使用过的所有命令
history还可以用**!编号**这样的格式重新运行history输出中对应编号的命令 -
一些实用的快捷键
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+W粘贴用Ctrl +U,Ctrl+K 或Ctrl+W“删除 ”的字符串,有点像“剪切-粘贴”
文件和目录组织命令
Linux中一切都是文件
-
linux系统中的文件可以简单的分为两类
普通文件
特殊文件 -
普通文件
文本类型的文件(.txt, .doc, .odt,等等)
声音文件(.wav, .mp3,.ogg),还有程序,等
这样的的文件windows中也有 -
特殊的文件
其他的一些文件是特殊的,因为它们表示一些东西
例如光盘 驱动器就是这样的文件 -
根目录
linux有且只有一个根目录 / ,根目录是Linux中最顶层的目录 -
目录的结构
Linux用斜杠 / 来标明目录的层级与包含关系
Linux的目录形式是这样的 /user/bin
Linux目录名一般规范:
一般Linux下目录尽量不要使用空格或者其他特殊符号
尽量用小写英文字母,以省去一些不必要的麻烦 -
根目录的直属子目录
bin:是英语binary的缩写,表示“二进制文件”bin目录包含了会被所有用户使用的可执行程序boot:英语boot表示启动,包含于Linux启动密切相关的文件
dev:英语device的缩写,表示“设备“,包含外设,它里面的子目录,每一个对应一个外设
etc:etc是法语 et cetera 的缩写,翻译成英语即为 and so on ,表示“…等等”etc包含系统的配置文件
home:即“家”目录,用户的私人目录,Linux中每个用户都在home目录下有一个私人目录(除了root用户)root用户拥有所有权限,与普通用户不在一起
lib:英语library的缩写,表示“库”lib目录包含被程序调用的库文件,后缀名 .so (windows下的库文件以 .dll 结尾)
media:"媒体”可移动外设(USB,SD卡,DVD,光盘等等)插入电脑时,Linux可以让我们通过media的子目录来访问这些外设中的内容
mnt:英语 mount 的缩写,表示“挂载”有点类似media,但是一般用于临时挂载一些装置
opt:英语 optional application software package 的缩写,表示“可选的应用软件包”,用于安装多数的第三方软件和插件
root:“根“”目录,root用户的“家”目录
sbin:英语system binary 的缩写,表示“系统二进制文件”sbin目录包含系统级的重要可执行程序
srv:service的缩写,表示“服务”包含一些网络服务启动后所需取用的数据
tmp:temporary 表示“临时的”,普通用户和程序存放临时文件的地方usr: unix software resource的缩写,表示“Unix操作系统资源软件”usr是最庞大的目录之一,有点类似于windows中的C:\Windows和C:\Program Files 的集合
usr 目录里安装了大部分用户要调用的程序var:variable,表示“动态的,可变的”var通常包含程序的数据,比如log(日志)文件,log文件记录了电脑中发生了什么事
linux文件系统结构图参考:
图片来源:https://linuxtoy.org/archives/linux-file-structure.html
-
pwd命令和which命令
pwd命令:print working directory 显示当前工作目录的路径
刚打开一个终端(Terminal),你将位于你的用户家目录~中
例如用户是xiaoming,那么~这个目录就是/home/xiaoming这个目录
通常命令行提示符会显示当前你所在的目录。which命令:获取命令的可执行文件的位置
which 命令不是一个必不可少的命令,平时用到的不多
which 命令用于显示一个命令对应的可执行程序的位置
window的可执行程序是以 .exe结尾,Linux中一般是没有后缀名的
目录
目录相关的命令 ls ,cd, du
-
ls 列出文件和目录
CentOS的终端默认是有颜色标注的,一般来说
蓝色 -->目录
绿色 -->可执行文件
红色 -->压缩文件
浅蓝色 -->链接文件
灰色 -->其他文件
可以通过命令ls --color=auto
来开启颜色标注,通过ls --colour=none
来关闭
为避免每次都输入额外参数,可以在配合文件中修改
ls 常用参数
-a:显示所有文件和目录,包括隐藏文件
Linux中以( . )开头的文件是隐藏文件,但不包括开头的两个 . 和 … ,这两个的含义如下 一个 . 表示当前目录,两个 … 表示上一级目录大写的参数 -A ,他的作和小写的 -a 几乎一样,唯一的不同是 -A不列出 . 和 … 这两个文件
-l:详细列表
-l这个参数几乎算是老师命令中最常用的命令了
-l 参数使ls命令列出一个显示文件和目录的详细信息的列表
例如:
drwxr -xr -x 表示文件权限
链接的数目:2 之类的,第三列表示用户的名称,第四列表示文件所在的群组,第五列是文件大小,单位是octet,也就是byte,即字节 后面一列是文件和目录最后一次修改的时间-h :以Ko ,Mo, Go 的形式显示文件大小
仅使用ls -l ,列出的文件详细信息中,文件大小是以字节为单位的
参数 -h,h是human readable 的缩写-t:按照最近一次修改时间顺序排序
ls 的参数合并在一起使用,效果是叠加的:例如 ls -lath -
cd 命令:切换目录
cd 是 change directory 的缩写,表示“切换目录”
cd命令后面接的参数为 :你要去的那个目录的路径
回到上一级目录(父目录),用cd ..
后退两个层级cd ../..
相对路径:相对于当前目录的一个路径表示法
绝对路径:不管当前位于那个位置,绝对路径都是保持不变的切换到家目录的三种方法
1.cd /home/xxx(xxx当前用户名)
2.cd ~
3.直接 cd 不加任何参数
可以使用Tab键路径自动补全 -
du命令:显示目录包含的文件大小
du 可以让我们知道文件和目录所占空间大小
与ls -l 相比,du 命令统计的才是真实的文件大小
du 命令会深入遍历每个目录的子目录,统计所有文件的大小
du 是 disk usage 的缩写,表示“磁盘占用/已用”du 命令的参数:
-h :以Ko ,Mo, Go 的形式显示文件大小与历史命令中 -h 参数类似
-a: 显示文件和目录的大小
默认情况下,du 只显示目录的大小
-s:只显示总计大小 例如du -sh
对文件的操作
浏览和创建文件
-
cat和less命令:显示文件内容(只能显示文件内容,不能修改)
-
cat 是 concatenate 的缩写,“级联/串联”
cat可以一次性在终端显示文件的所有内容(比较适合小的文件)
用法:只需要在命令后加上想要显示的文件路径即可
用cat -n
显示行号
cat 还可以连接两个文件一并输出,如:cat -n Xorg.9.log Xorg.0.log
-
less 命令:分页显示文件内容
如果文件比较大,cat命令显示所有内容就不太合适了,与 cat 不同, less 命令会分一页一页显示
此外还有个命令 more ,more 和 less 命令功能类似,但 more 命令只能往后翻页,不能往前,more 没有 less 强大 -
less命令中最常用的快捷键
空格键 :文件内容读取下一个终端屏幕的行数,与PgDn效果相同
回车键:文件读取下一行,与向下键效果相同
d键:前进半个屏幕
b键:后退一页 (PgUp)
y键:后退一行,与向上键效果相同
u键:后退半页(半个屏幕)
q键:停止读取文件,中止less命令(quit)
区分大小写= 号:显示当前在文件中的位置
显示当前页面的内容是文件中的第几行到第几行
h 键:显示帮助文档。q键退出帮助文档
/ :进入搜索模式(n键在搜索所得结果中跳转,n下一个,shift+n上一个)
正则表达式也可以用在搜索内容中 -
head命令和tail命令:显示文件的开头和结尾
head显示文件开头几行,tail显示文件结尾几行
head:默认显示开头10行
用-n 参数指定显示的行数,例如head -n 5
显示前5行tail:默认显示尾10行
用-n 参数指定显示的行数,例如head -n 5
显示尾5行
tail命令可以配合 -f 参数实时追踪文件的更新,用 Ctrl+c终止 tail -f
Ctrl+c组合可以终止大部分终端命令
默认情况下 tail -f 每隔1秒检查一下文件是否有新内容
可以指定间隔检查的秒数,用 -s 参数 :tail -f -s 4 xxx
xxx为追踪的文件名, 上述命令表示每隔 4 秒检查xxx文件的更新 -
touch命令:创建一个空白文件
touch 命令设计初衷其实是修改文件的时间戳 ,但是如果touch命令后面跟着的文件名不存在,它会新建一个
touch + 文件名 可以创建新文件,touch可以同时创建多个文件,如touch new_file new_file_2
-
mkdir 命令:创建一个目录
mkdir即 make directory
mkdir + 需要创建目录的路径,mkdir也可以同时创建多个目录,如mkdir new_folder new_folder_2
-p 参数:递归的创建目录结构 如mkdir -p one/two/three
文件的复制移动删除和链接
-
cp命令:拷贝文件或目录
-
拷贝文件
cp 可以拷贝单个/多个文件,也可以拷贝目录
例如拷贝 new_file 文件 :cp new_file new_file_copy
我们就创建了new_file 的拷贝 new_file_copy
第一个文件 new_file 是已经存在的文件,即被拷贝文件
第二个 new_file_copy 文件是需要创建的文件,是 new_file 文件的副本
复制到另一个目录
只需把 cp 命令的第二个参数换成目录名:例如cp new_file one
其中one为一个目录
如果想拷贝文件的同时,不要具有相同名字
那么可以cp new_file one/new_file_copy
其中 one 为一个目录 -
拷贝目录
拷贝目录只需要在cp 命令之后加上 -r 或者 -R 参数
这里 r 大小写作用相同,表示 recursive ,即“递归的”
拷贝的时候,目录中所有内容(子目录和文件)都会被拷贝
例如cp -r one one_copy
即拷贝 one 目录为 one_copy -
使用通配符 *
*是(星号)正则表达式中的通配符,可替代任意字符串
cp *.txt folder
: 把当前目录下所有txt文件拷贝到 folder 目录下
cp ha*folder
:把当前目录以ha开头的文件都拷贝到folder目录中 -
mv 命令:移动文件
mv 即 move -
移动文件(或目录)
与 cp 命令用法类似,但是不会复制当前文件
mv new_file_2 one
: 将 new_file_2 这个文件移动到 one 目录
用 mv 命令移动目录很简单,不需要额外参数,和移动文件一样
例如:mv new_folder one
mv 也可以配合通配符 ( * )使用 例如:mv *.txt one
-
重命名文件(或目录)
实际上Linux没有命令用来重名,但是文件(目录)经过mv 移动后,可以将原始文件变成新名字的文件,相当于重命名
例如:mv new_file renamed_file
-
rm 命令:删除文件和目录
rm 即remove 删除
终端中没有回收站或者垃圾箱,用rm删除后,一般恢复难度比较大,或者恢复起来比较麻烦
rm 可以删除单个/多个文件 例如rm file1 file2 file3
-i 参数:向用户确认是否删除 (i即 inform)
保险起见,用rm 命令删除文件时,可以加上 -i 参数
这样对于每一个要删除的文件,终端都会询问我们是否删除
-f 参数 :慎用,不会询问是否删除,强制删除 (f 即 force)
在 rm 命令后加上 -f 参数,终端不会询问用户是否确定删除文件,文件会被强制删除
例如 rm -f file
-r 参数:递归的删除 (r即 recoursive)
使用 -r 参数,可以使 rm 命令删除目录
并且递归的删除其包含的子目录和文件
也存在一个命令 rmdir 但是这个命令只能删除空的目录
**
rm 命令加 -r 和 -f 参数:极为危险!rm -rf / * 或者 rm -rf / 千万不要在 root 身份下尝试这个命令,将会删掉整个Linux系统
**
一般系统会加入保护机制,如果无视提示,运行sudo rm -rf --no-preserve-root /
系统将被删除,在PC上,如果使用双系统,而windows挂载在Linux上的话,windows系统也将被删除。
Centos 系统对如下命令是没有防护措施的
cd /
然后 sudo rm -rf *
总之rm -rf很危险,用之前先搞清自己所在目录以及后面所加路径。
-
ln 命令:创建链接
-
physical link:物理链接或硬链接
-
symbolic link:符号链接或软链接
在硬盘上存储时,大致来说
每个文件分为两部分:
文件名和文件内容
文件名的列表储存在硬盘的其他地方
和文件内容分开存放,这样方便Linux管理
其实文件可分为三部分:文件名 ,权限和文件内容,这里做了简化。
因此每个文件名都绑定到它的文件内容(用inode标识)
如图: -
** 创建硬链接**
硬链接原理:使链接的两个文件分享同样的文件内容,就是同样的inode
,一旦文件和文件2之间有了硬链接,那么修改文件1或者文件2,修改的是同一块的内容
硬链接的缺陷:只能创建指向文件的硬链接,不能创建指向目录的
通过一些参数的修改,也可以创建指向目录的硬链接,但是比较复杂
软链接可以指向文件或目录,对于目录,一般都是用软链接
创建file1和file2文件,使file2成为file1的硬链接
要创建硬链接,直接是由ln命令,不加任何参数:ln file1 file2
这样就创建了file1的链接file2:原理图如下
可以用 ls -i命令查看两个文件的链接(-i 参数可以显示文件的inode)
对于硬链接,删除任意一方的文件对另一方是没有影响的,只有既删除file1又删除file2,它们共同指向的文件内容才会消失,也就是那个inode才会被删除 -
创建软链接
软链接才真正像我们在windows下的快捷方式,原理很相似
创建硬链接时 ln 不带任何参数,创建软链接需要加上 -s 参数
s 是symbolic (符号的)的缩写
ln -s file1 file2
:创建file1 和file2 的软链接,原理如图:
使用ls -l查看 file1 和 file2 ,file2的信息是这样的:file2->file1,表示file2 指向 file1,file2前面权限那里有一个字母变成了l,表示link(链接)硬链接是没有此标识的。
file2这个软链接其实只是file1的快捷方式
(硬链接:硬链接文件的作用之一是允许一个文件拥有多个有效的路径名,这样就可以建立硬链接到重要的文件,以防止误删重要源数据。很多硬件存储,如 netapp 存储中的快照功能就是应用了这个原理。
软链接:类似Windows中的“快捷方式”,一般用得比硬链接多。)
软链接的特点
如果我们删除file2 ,file1不会受到影响
如果我们删除file1,file2会变成“死链接”,因为指向的文件不见了
软链接可以指向目录,硬链接不行