你也想起飞嘛------Linux常用的命令和分析
前言:
作为当今世界最受欢迎的开源操作系统之一的Linux系统,一直是各大厂商所津津乐道。也是我们这些运维小白入门必须要接触的一门系统。对于用惯了Windows操作系统的我们来说,首次接触到Linux系统肯定是一脸懵,因为windows系统我们就是桌面化操作,相对比较便捷,但是便利的同时,Windows系统所带来的稳定性,也是各大厂商对其敬而远之的理由,毕竟谁都不想在运行的同时,突然就蓝屏了。相信大家都有这样的困扰。但是Linux不存在,Linux作为开源系统,所具有的稳定性是Windows系统所不具备的。所以我们作为运维人员一定要认证的学习好Linux系统知识,打好基础。
前面我也说了,Linux系统与Windows系统最大的不同是,Linux即包含图形界面,也包含字符界面。图形界面就是我们windows常用的鼠标点点点,而字符界面就是我们需要了解的linux常用的命令字符。
————了解命令之前我们必须知道什么是Shell
***Shell***是在Linux系统中运行的一种特殊程序,在用户和内核之间充当一名“翻译官”的角色。问题来了,我们为什么需要“翻译官”?首先,我们知道的是,程序所能够明白的指令是“1”和“0”,但是我们输入的指令包含数字,英文,甚至是中文。那么程序能够理解么??显然不能,为此我们需要一名“翻译官”来充当用户与程序之间沟通桥梁。这就是Shell。而且每当用户在Linux系统登录时,会自动加载一个Shell程序。LInux系统默认的Shell程序我们称为Bash。
与Windows相比,Shell可以被理解为一种系统程序。那么我们也会知道,我们还可以从外部安装程序。我们就可以理解Linux的内部程序与外部程序的区别了。
内部命令 | 外部命令 |
---|---|
集成与shell解释器程序内部的一些特殊指令,也成为了内建指令(built-in) | Linux系统中能够完成特定功能的脚本文件或二进制程序 |
属于Shell的一部分 | 属于Shell解释器程序之外的命令 |
没有单独对应的系统文件 | 每个外部命令对应了系统中的一个文件 |
自动载入内存,可以直接使用 | 必须知道器对应的文件位置,有Shell加载后才能执行 |
***Linux***命令程序有在开发工程中,遵循一个固有的格式,这个需要我们注意。通常的命令行使用格式包含命令字、选项和参数等。
***命令字***是整条命令的关键部分,用来指明这条命令的作用是什么,也是唯一确定的一条命令。
***选项***分为两种,一种是短格式选项:用“-”符号进行引导,另一种长格式选项:用“–”符号来引导。
***参数***命令字的处理对象,就是命令对什么进行处理,可以是文件名、目录(路径)名或者用户名等,可是从0到多个对象。
了解完命令基础之后,让我们开始详细解读命令吧!
首先,我们先了解下将会用到的功能以及组合
Tab键:自动补齐(妈妈再也不用担心我们记不住命令!)
反斜杠“\”:强制换行
Ctrl+U组合键:清空至行首(记住!!是你光标前到行首!)
Ctrl+K组合键:清空至尾行(这个清除的包括你选定的光标处,千万要注意!)
Ctrl+L组合键:清屏
Ctrl+C组合键:取消本次命令编辑
Ctrl+J组合键:回车(回车键无法使用的时候使用)
Ctrl+H组合键:删除光标前一格(可以替代键盘的删除键)
在命令符里面键入“history”,表示当历史命令。
col - b :对字符进行输出
在Linux系统中,">"表示覆盖原文件内容(文件的日期也会自动更新),“>>”表示追加内容(会另起一行,文件的日期也会自动更新)。
举个栗子:
1、1 将history命令执行的结果保存到history.log文件中
[root@zhu opt]# history > history.log ##history.log覆盖到history。
[root@zhu opt]# cat history.log ##查看文件。
注意:
使用 “>”执行命令时,每次都会新生成一个 ">"后面的文件,将之前生成的文件替换掉(文件创建时间也会跟着改变)。
PWD命令:显示用户当前所在的工作目录位置。
接下来,我们开始具体讲解字符命令:
1、cd命令----切换工作目录
①cd /xxx ###进入XXX目录
②cd … ###回到上层目录
③cd ~ ###表示回到自己的主目录,对于 root 用户,其主目录为 /root
④cd - ###表示回到刚刚的那个目录
[root@zhu ~]# cd /opt ##进入opt目录
[root@zhu opt]# pwd ##查看当前工作目录
/opt
[root@zhu opt]# cd ~ ##回到主目录
[root@zhu ~]# pwd ##查看工作目录
/root
我们要了解一个理论,不管在Windows系统或者是Linux系统,都明确的区分了绝对路径和相对路径,那么怎么区分呢?我们来认识下:
***绝对路径:***例如,根目录(/)下有目录usr,usr目录下有子目录bin,bin目录下有文件chsh,则chsh文件的绝对路径就是:/usr/bin/chsh
***相对路径:***相对当前所在路径的位置,例如当前所在的位置为/usr,也就是在根目录的usr子目录下,则chsh文件相对当前位置的路径为:bin/chsh
2、ls命令----列表(list)显示目标内容
-a ###显示所有文件及目录 (ls内定将文件名或目录名称开头为"."的视为隐藏档,不会列出)
-c ###按文件修改时间排序
-i ###输出每个文件的inode(索引信息)号
-l ###除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出
-r ###将文件以相反次序显示(原定依英文字母次序)
-R ###若目录下有文件,则以下之文件亦皆依序列出
[root@zhu ~]# ls -a ###显示所有文件
. .. anaconda-ks.cfg .bash_history .bash_logout .bash_profile .bashrc .cache .config .cshrc .dbus initial-setup-ks.cfg .tcshrc test
[root@zhu ~]# ls -i ###显示文件索引号
537160770 anaconda-ks.cfg 537160792 initial-setup-ks.cfg 268499557 test
3、du----统计目录及文件空间占用情况
格式-----------du[选项] [文件或目录]
常用的选项包括-a和-sh,-a用来统计磁盘空间占用的情况,-sh知识用来查看某一条文件大小。
[root@zhu ~]# du -a ###统计磁盘空间的占用情况
4 ./.bash_logout
4 ./.bash_profile
4 ./.bashrc
4 ./.cshrc
4 ./.tcshrc
4 ./anaconda-ks.cfg
4 ./.cache/dconf/user
4 ./.cache/dconf
4 ./.cache/abrt/lastnotification
4 ./.cache/abrt
8 ./.cache
4 ./.dbus/session-bus/ea47c73ce5bd40b19e8c53b99bab6c62-9
4 ./.dbus/session-bus
4 ./.dbus
0 ./.config/ibus/bus
0 ./.config/ibus
0 ./.config/abrt
0 ./.config
4 ./initial-setup-ks.cfg
4 ./.bash_history
0 ./test
44 .
[root@zhu ~]# du -sh ./.bash_logout ###统计bash_logout这条文件占用的大小
4.0K ./.bash_logout
4、mkdir----用于创建新目录
常用格式mkdir -p[目录名称],选项-p表示为确保目录名称存在,不存在的就建一个。
命令格式
mkdir -p 新建目录的名称
[root@zhu ~]# mkdir -p test ###在目录下创建一个名为tset的的子目录
[root@zhu ~]# cd test ###进入子目录
[root@zhu test]# pwd ###查看工作目录
/root/test
[root@zhu ~]# mkdir -p 33/22/11 ###在目录下创建一个名为33的子目录,并且连续在目录下创建22/11的子目录
[root@zhu ~]# cd 33 ###进入33目录
[root@zhu 33]# pwd ###查看工作目录
/root/33
[root@zhu 33]#
5、ln----创建链接文件
为文件或目录建立链接文件,类似于Windows系统的快捷方式。
在这边我们需要了解一个知识点,就是上文中提到的***inode***(索引信息)。Inode译成中文就是索引节点,每个存储设备(例如硬盘)或存储设备的分区被格式化为文件系统后,应该有两部份,一部份是inode,另一部份是 Block,Block是用来存储数据用的。而inode呢,就是用来存储这些数据的信息,这些信息包括文件大小、属主、归属的用户组、读写权限等。 inode为每个文件进行信息索引,所以就有了inode的数值。操作系统根据指令,能通过inode值最快的找到相对应的文件。block是用来存储实际数据用的,例如:照片、视频等普通文件数据。而inode就是用来存储这些数据属性信息的(也就是ls -l 的结果),inode包含的属性信息包括文件大小、属主、归属的用户组、读写权限、文件类型、修改时间,还包含指向文件实体的指针的功能(inode节点–block的对应关系)等,但是,inode唯独不包含文件名。并且,当我们通过命令删除文件时,我们只是把文件名从磁盘中删除了,剩下的索引以及数据库都没有删除,想要彻底删除,我们只能通过新的文件将其覆盖,才能保证原信息已经被擦去。
那么这边我们就分析了-------ln命令可以创建2种链接,一种称为软链接,一种称为硬链接,它们的区别就在于,在软链接命令下,当我们删除了源目标文件的名称之后,软链接这条命令就已经失效。但是硬链接不会,因为硬链接连接的是源文件的索引号。
命令格式
ln -s 源文件或者目录 目标文件或者目录 ##软链接命令可以对文件创建也可以对目录创建
ln 源文件 目标文件 ##硬链接只能对文件创建
举个栗子:
[root@zhu ~]# touch 11.TXT ##创建一个名为11.TXT的文件
[root@zhu ~]# ln -s 11.TXT AA.TXT ##对11.TXT创建一个名为AA.TXT的软链接
[root@zhu ~]# ln 11.TXT BB.TXT ##对11.TXT创建一个名为BB.TXT的硬链接
[root@zhu ~]# ll ##显示目录信息
total 16
-rw-r--r--. 1 root root 0 Jul 8 19:12 11
-rw-r--r--. 2 root root 10 Jul 8 19:13 11.TXT
drwxr-xr-x. 3 root root 16 Jul 8 18:46 33
lrwxrwxrwx. 1 root root 6 Jul 8 19:13 AA.TXT -> 11.TXT ##显示11.TXT的软链接
-rw-------. 1 root root 2118 Jul 7 18:10 anaconda-ks.cfg
-rw-r--r--. 2 root root 10 Jul 8 19:13 BB.TXT ##显示11.TXT的硬链接
-rw-r--r--. 1 root root 2166 Jul 7 18:11 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 6 Jul 8 16:54 test
[root@zhu ~]# rm -f 11.TXT ##删除11.TXT的文件名称
[root@zhu ~]# ll
total 12
-rw-r--r--. 1 root root 0 Jul 8 19:12 11
drwxr-xr-x. 3 root root 16 Jul 8 18:46 33
lrwxrwxrwx. 1 root root 6 Jul 8 19:13 AA.TXT -> 11.TXT ##注意此时这条命令一定是闪烁的说明这条民无法实现
-rw-------. 1 root root 2118 Jul 7 18:10 anaconda-ks.cfg
-rw-r--r--. 1 root root 10 Jul 8 19:13 BB.TXT ##正常显示
-rw-r--r--. 1 root root 2166 Jul 7 18:11 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 6 Jul 8 16:54 test
[root@zhu ~]# cat BB.TXT ##可以正常读取
fdkskjlfj
[root@zhu ~]# cat AA.TXT ##无法正常读取
cat: AA.TXT: No such file or directory
[root@zhu ~]#
6、cp----复制文件或目录
将需要复制的文件或目录(源)重建一份,并保存为新的文件或目录。
格式为:cp[选项] 源文件或目录 目标文件或目录
常用选项:
cp -f ##覆盖目标同名文件或目录时,不进行提醒直接覆盖
cp -i ##覆盖目标同名文件或目录时提醒用户确认
cp -p ##复制时保持源文件的权限,属主及时间标记等属性不变
cp -r ##复制目录时必须使用此选项,表示递归复制所有文件及子目录
7、rm----删除文件或目录(谨慎操作!!!)
格式及选项
rm -f ##即使原档案属性设为唯读,亦直接删除,无需逐一确认。
rm -i ##删除前逐一询问确认。
rm -r ##将目录及以下之档案亦逐一删除。
实际操作
[root@zhu ~]# cat 11.TXT ##查看11.TTX文件
fsald
[root@zhu ~]# rm -i 11.TXT ##输出删除命令
rm: remove regular file ‘11.TXT’? y ##提示是否删除?选择确认Y
[root@zhu ~]# cat 11.TXT ##查看命令
cat: 11.TXT: No such file or directory ##无法找到该文件
[root@zhu ~]#
8、mv----移动文件或者目录
这条命令的作用是将指定的文件或目录转移位置,如果目标位置与源位置相同,则相当于执行重命名操作。
举例:
mv 文件名 文件名 ##将源文件名改为目标文件名
mv 文件名 目录名 ##将文件移动到目标目录
mv 目录名 目录名 ## 目标目录已存在,将源目录移动到目标目录;目标目录不存在则改名
mv 目录名 文件名 ##这条命令是错误命令
注意:我们重命名之后的索引号跟数据是不会发生改变的!
9、which----查找命令文件存放目录。
这个搜索范围由环境变量(PATH)决定(命令为:echo $PATH)
格式
[root@zhu /]# which pwd
/bin/pwd
[root@zhu /]# which adduser
/sbin/adduser ##不用的环境变量
[root@zhu /]# which which
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
/bin/alias
/usr/bin/which ##有两个 which ,其中一个是 alias 这就是所谓的『命令别名』,意思是输入 which 会等於后面接的那串命令!
10、find----查找文件或者目录
采用递归的方式,根据目标的名称、类型、大小等不同属性进行精细查找。
格式:find [OPTIONS] [查找起始路径] [查找条件] [处理动作]
查找条件:
-name ##按名称查找,根据目标文件的名称进行查找,允许使用“*”及“?”通配符
-size ##按文件大小查找,根据目标文件的大小进行查找,一般使用“+”“—”号设置超过或小于指定的大小作为查找条件常用的容量单位包括 kB(注意k是小写!)、MB、GB
-usr ##按文件属主属主查找,根据文件是否属于目标用户进行查找
-type ##根据文件的类型进行查找,文件类型包括普通文件(f),目录(d)、块设备文件(b)、字符设备文件(c)等