引言
日常生活和工作中我们所使用的Windows系统的图形界面使用简单,容易入手。但是在Linux系统的文字界面,我们则需要学习使用各种命令才能熟练操作Linux系统,所以可想而知命令对于Linux系统的重要性! 根据我在日常工作中的需求,在此总结出一些Linux的基础知识和基础命令。
一、Shell是什么
在总结命令之前,再了解一下Shell到底是什么,有什么作用?
从下图中我们可以看出Shell担任着“翻译官”的角色:
总结一下:
- Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁,在用户和内核之间充当着“翻译官”的角色。
- 它既是一种命令语言,又是一种程序设计语言。他给用户提供了一个界面,让用户能够通过这个界面访问操作系统内核的服务。
二、Linux命令基础
1.命令的分类
内部命令 | 外部命令 |
---|
集成于Shell解释器程序内部的一些特殊指令,称为内建(Built-in)指令 | Linux系统中能够完成特定功能的脚本文件或二进制程序 | 属于Shell的一部分 | 属于Shell解释器程序之外的命令 | 没有单独对应的系统文件(在bash中) | 每个外部命令对应了系统中的一个文件 | 自动载入内存,可以直接使用 | 必须知道其对应的文件位置。由Shell加载后才能执行 |
2.如何查看内外部命令
#help
#enable
#type+命令
3.命令行使用格式
命令字:是整条命令中最关键的一部分 选项:短格式选用用“-”符号引导(用字母并且区分大小写);长格式用“–”符号引导(用单词) 参数:命令字的处理对象,可以是文件名,目录(路径)名或用户名等内容。它的个数可以是零到多个。 例如下面这条命令,ls是命令字(操作)、-l是选项(功能)、/etc/yum.repos.d/是参数(处理的对象)
# ls -l /etc/yum.repos.d/
4.编辑命令行的辅助操作
- 在工作中有时候需要输入很长的一条命令,如果从头输到尾的确是件让人头疼的事,这时候我们就可以利用Tab键来辅助我们完成更快的命令输入。
TAB键的两大作用: ①只需输入文件或目录名的前几个字符, 然后按TAB键,如无相重的,完整的文件名立即自动在命令行出现;如有相重的,再按一下TAB键,系统会列出当前目录下所有以这几个字符开头的名字。 ②在命令行下,只需输入例如"m",再连续按两次TAB键,系统将列出所有以"m"开头的命令,对查找某些记不清楚的命令特有用。例如输入"ifc",将查到ifcfg,ifconfig二个相符的命令。 - 各种快捷组合键的使用:
反斜杠“\”强制换行 | Ctrl+E光标跳到行尾 |
---|
Ctrl+U清空至行首 | Ctrl+A光标跳到行头 | Ctrl+K清空至行尾 | Ctrl+L清屏 | Ctrl+C取消本次编辑 | Ctrl+D结束当前命令窗口 |
5.获得命令帮助的方法
在 Linux 环境中,如果遇到了困难,我们可以使用帮助命令来取得帮助。常见的帮助命令有man,help等。 ①help命令用法:
#help
#--help
②man命令用法
#man cd(命令)
- 在man手册中,我们可以使用”↑“”↓“方向键滚动一行文本,也可以使用Page Up和Page Down键翻页。
- 按Q或q键可以退出阅读环境,按”\“键可以查找内容,查找参数页用n向下、N向上。
例如:
# man ls | col -b > lshelp.txt
在这个例子中,col是一个命令程序,用于过滤文本中的一些特殊控制字符,另外还使用了“|”和“>”符号,这是Shell环境中的两个特殊功能应用。 管道"|":用于将前面命令的屏幕输出结果作为后面命令的操作对象(输入) 重定向输出">":前面的命令成功执行后,其屏幕输出结果将保存到">"后面指定的文件中。而不是直接输出到屏幕,因此称为重定向
三、Linux 处理目录或文件的常用命令
我们知道Linux的目录结构为树状结构,最顶级的目录为根目录 /。其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们。想要用命令来查看和管理文件与目录之前,得先了解一下相对路径和绝对路径是什么,有什么区别。
1.相对路径和绝对路径
- 相对路径:从当前目录算起的路径叫做相对路径
例如:./grub.conf - 绝对路径:从根目录算起的路径叫做绝对路径
例如:/usr/bin 相对路径的使用更加灵活,方便更改,但是相对路径比较难找,如果找的不对容易出错;而绝对路径的话能避免这个问题,直接复制在硬盘上的路径即可,但是在使用上面的灵活性不如相对路径。
| 相对路径表现形式 | |
---|
直接使用目录名或文件名 | 表示当前工作目录中的子目录,文件的位置 | grub.conf | 以一个点号"."开头 | 表示以当前的工作目录为起点 | ./grub.conf | 以两个点号"…"开头 | 表示以当前目录的上一级目录(父目录)为起点 | …/vmlinuz | 以"~用户名"形式开头 | 表示以指定用户的宿主目录作为起点 | ~teacher |
2.目录位置的查看和切换
[root@localhost ~]# pwd
/root
格式 | 说明 |
---|
cd目标位置 | 切换到目标位置 | cd ~ | 若不指定目标位置,切换到当前用户的宿主目录 | cd | 若不指定目标位置,切换到当前用户的宿主目录 | cd - | 切换到上一次执行cd命令之前所在的目录 | cd … | 回到当前目录的上一层 | cd …/…/ | 回到上上层 |
例如: cd到指定的网卡目录
[root@localhost network-scripts]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# pwd
/etc/sysconfig/network-scripts
这是一个绝对路径
cd~
[root@localhost network-scripts]# cd ~
[root@localhost ~]#
cd -
[root@localhost ~]# cd -
/etc/sysconfig/network-scripts
3.显示目录内容
列表显示目录内容 ls
[root@localhost network-scripts]# ls
ifcfg-ens33 ifdown-ib ifdown-ppp ifdown-tunnel ifup-ib ifup-plusb ifup-Team network-functions
ifcfg-lo ifdown-ippp ifdown-routes ifup ifup-ippp ifup-post ifup-TeamPort network-functions-ipv6
ifdown ifdown-ipv6 ifdown-sit ifup-aliases ifup-ipv6 ifup-ppp ifup-tunnel
ifdown-bnep ifdown-isdn ifdown-Team ifup-bnep ifup-isdn ifup-routes ifup-wireless
ifdown-eth ifdown-post ifdown-TeamPort ifup-eth ifup-plip ifup-sit init.ipv6-global
常用的选项如下:
格式 | 说明 |
---|
-L | 将文件信息属性详细列出,通常直接使用"I I" 因为设置了别名 | -R | 递归显示,比如一个目录下还有文件,则把那个文件也一起列出 | -d | 查看目录本身信息,不显示目录下的内容 | -i | 显示inode值 | -h | 友好显示已单位为例 | -a | 遍历所有文件及目录 (ls内定将文件名或目录名称开头为"."的视为隐藏档,不会列出) | -A | 跟-a 唯一的不同是不列出当前目录和上一层目录 |
通配符
格式 | 说明 |
---|
? | 匹配文件名中的 一个未知字符 | * | 匹配文件名中的 任意多个字符 |
例如:
[root]# ls -lh /dev/sd?/
[root@localhost network-scripts]# ls -lh /etc/ns*.conf
-rw-r--r--. 1 root root 1.8K 7月 24 21:58 /etc/nsswitch.conf
4.用alias设置别名
我们可以利用alias设定命令的别名,简化常用的比较长的命令。若只输入alias,则可列出目前所有的别名设置。如果需要每次登入的时候之前设置的别名都存在,可在.bashrc中设定指令的别名。 如下,设置网卡信息命令的别名为netw,并且让它重启后依然存在
alias netw=' vim /etc/sysconfig/network-scripts/ifcfg-ens33'
wq保存退出,然后重启配置文件
[root@localhost ~]# vim /root/.bashrc
[root@localhost ~]# source /root/.bashrc
[root@localhost ~]# init 6
Connection closing...Socket close.
Connection closed by foreign host.
Disconnected from remote host(192.168.2.4) at 23:39:37.
Type `help' to learn how to use Xshell prompt.
[C:\~]$
重启后依然存在,设置成功!
如何删除别名:
unalias: 用法:unalias [-a] 名称 [名称 ...]
5.统计目录和文件空间占用情况
[root@localhost ~]# du
常用的选项如下:
格式 | 说明 |
---|
-a | 统计磁盘空间占用时包括所有的文件,而不仅仅只统计目录 | -h | 显示出每一个文件以及大小,单位是KB,MB,GB | -s | 显示文件或整个目录的大小,默认单位是KB,但不会把他们显示出来 | du - sh* | 生产环境常这样搭配使用统计当前目录下所有文件的大小并显示出来,常用于磁盘水位过高的情况 |
例如:要求统计出/var/log目录所占用空间的大小
[root@localhost ~]# du -sh /var/log/
9.6M /var/log/
6.创建新目录
[root@localhost ~]# mkdir [选项] 目标位置及名称
例①:在当前目录下创建名为public_html的子目录
[root@localhost ~]# mkdir public_html
可以看到目录创建成功!
例②:创建目录/aa,在它的目录下创建子目录bb,在/aa/bb目录下创建子目录cc
[root@localhost ~]# mkdir -p aa/bb/cc
[root@localhost ~]# tree aa
aa
└── bb
└── cc
2 directories, 0 files
这里有用到"tree"命令,这个在工作中还是很好用的,那么如何才能用这个命令呢?那我们就可以安装这个依赖包来实现tree命令的使用!命令如下:
[root@localhost ~]# yum install tree -y
这里我已经安装过了,在安装的时候一定要注意是需要有网络链接的!
7.创建空文件
例①创建一个空文件
[root@localhost ~]# touch gl
[root@localhost ~]# ls
aa anaconda-ks.cfg gl initial-setup-ks.cfg lstext.txt public_html 公共 模板 视频 图片 文档 下载 音乐 桌面
例②创建二个空文件
[root@localhost ~]# touch aa bb
[root@localhost ~]# ls -R
.:
aa anaconda-ks.cfg bb initial-setup-ks.cfg lstext.txt 公共 模板 视频 图片 文档 下载 音乐 桌面
例③创建多个文件
[root@localhost ~]# touch {1..9}
除了用touch命令创建文件,我们也可以用echo(输出)命令来创建文件:
[root@localhost GL]# echo "this is GL > demo.txt
[root@localhost GL]# ls
demo.txt
8.复制、删除、移动目录和文件
- 复制文件或目录——cp :用于复制文件或目录,将需要复制的文件或目录(源)重建一份并保存为新的文件或目录(可保存到其他目录中)需要复制多个文件或目录时,目标位置必须是目录,而且目标目录必须已经存在。
cp命令常用的几个选项如下:
格式 | 说明 |
---|
-a | 此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容 | -d | 复制时保留链接。这里所说的链接相当于 Windows 系统中的快捷方式 | -f | 覆盖已经存在的目标文件而不给出提示 | -i | 与 -f 选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答 y 时目标文件将被覆盖 | -p | 除复制文件的内容外,还把修改时间和访问权限也复制到新文件中 | -r | 若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件 | -l | 不复制文件,只是生成链接文件 |
例:使用指令cp将当前目录 text/ 下的所有文件复制到新目录 newtest 下,输入如下命令:
[root@localhost ~]# cp text/ newtest
cp: 略过目录"text/"
[root@localhost ~]#
没有成功,报错了!
原因就是复制的text/是一个目录,当复制目录时如果不加 -r 是无法复制的。
正确操作如下:
[root@localhost ~]# cp -r text/ newtest
[root@localhost ~]# tree newtest
newtest
└── text
├── 1
├── 2
├── 3
├── 4
└── 5
1 directory, 5 files
[root@localhost ~]#
- 删除文件或目录——rm
rm 命令用于删除指定的文件或目录,在Linux命令行界面中,删除的文件是难以恢复的,因此在工作中使用rm命令删除文件时要格外小心。 常用的几个选项如下:
格式 | 说明 |
---|
-f | 删除文件和目录时不进行提醒,强制删除 | -i | 删除文件或目录时提醒用户确认 | -r | 删除目录时必须使用此选项,表示递归删除整个目录树(谨慎使用) |
- 移动文件或目录——mv
mv命令用于将指定得文件或目录转移位置,如果目标位置与源位置相同,则相当于执行重命名操作。
例如:把当前目录中的mytouch文件改名为mkfile,命令如下
[root@localhost ~]# mv mytouch mkfile
如果移动一个文件或目录到一个已经存在的文件夹中,可以指定目标文件夹的位置
例如:把mkfile文件移动到public_html目录之中,文件名是mkfile,命令如下
[root@localhost ~]# mv mkfile public_html/
9.创建链接文件
在Linux文件系统中,有所谓的链接,我们可以将其视为档案的别名,而链接又可分为两种 : 硬链接与软链接。
例如:给文件创建软连接,为log11.log文件创建软连接link11,如果log11.log丢失,link11也将失效
[root@localhost ~]# ln -s log11.log link11
[root@localhost ~]# ll
总用量 24
-rw-r--r--. 1 root root 1812 7月 24 22:11 initial-setup-ks.cfg
lrwxrwxrwx. 1 root root 9 7月 29 17:52 link11 -> log11.log
-rw-r--r--. 1 root root 13540 7月 27 22:22 lstext.txt
然后我把源文件删除掉就会发现link11已经失效!
给文件创建硬链接,为log11.log创建硬链接ln11,log11.log与ln11的各项属性相同:
[root@localhost ~]# ln log11.log in11
[root@localhost ~]# ll
总用量 24
-rw-------. 1 root root 1781 7月 24 22:02 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 7月 29 17:24 GL
-rw-r--r--. 2 root root 0 7月 29 17:59 in11
-rw-r--r--. 1 root root 1812 7月 24 22:11 initial-setup-ks.cfg
-rw-r--r--. 2 root root 0 7月 29 17:59 log11.log
-rw-r--r--. 1 root root 13540 7月 27 22:22 lstext.txt
然后我把源文件log11.log给删掉再查看创建的硬链接状态
可以看出此硬链接依然有效
10.查找文件和目录
which命令用于查找Linux命令程序并显示所在的具体位置,其搜索范围主要由用户的环境变量PATH决定(可以执行“echo $PATH”命令查看),这个范围也是Linux系统在执行命令或程序时的默认所搜路径。 which命令使用要查找的命令或程序名作为参数,默认当找到第一个目标后即不再继续查找,如果希望在所有搜索路径中查找,可以添加“-a”选项。 例如:执行“which ls”命令后,可以找到名为“ls”的、位于/user/bin/ls的文件,命令如下
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]# which ls
alias ls='ls --color=auto'
/usr/bin/ls
[root@localhost ~]#
find命令是Linux系统中功能非常强大的查找命令,可以根据目标的名称、类型、大小等不同的属性进行精细的查找。在查找时采用递归的方式,其使用形式相当灵活,但是也非常复杂。
方式 | 格式 | 说明 |
---|
按名称查找 | -name | 根据目标文件的名称进行查找,允许使用“*” “?”通配符 | 按文件大小查找 | -size | 根据目标文件大小进行查找 | 按文件属主查找 | -user | 根据文件是否属于目标用户进行查找 | 按文件类型查找 | -type | 根据文件类型进行查找 | 按访问时间查找 | -atime | 根据访问文件的时间进行查找 | 按文件修改时间查找 | -mtime | 根据文件修改的时间进行查找 | 按文件属性修改时间查找 | -ctime | 根据文件属性修改的时间进行查找 |
注意:设置find命令的查找条件时,如果需要使用通配符“*” “ ?”,最好将文件名用双引号括起来,以避免当前目录下符合条件的文件干扰查找结果。
例如,在/etc目录中查找名称为“resol”开头、以“.conf”结尾的文件,命令如下:
[root@localhost ~]# find /etc -name "resol*.conf"
/etc/resolv.conf
[root@localhost ~]#
当我们需要同时使用多个查找条件时,我们可以使用逻辑运算符“-a” “-o”,分别表示而且(and)、或者(or) 例如,下面二个操作使用了二个查找条件,一个是“超过1024K”另一个是“名称以vmlinuz开头”,分别用”-a“和”-o“二个条件,前者表示二个条件必须同时满足,后者只需要满足任何一个即可:
[root@localhost ~]# find /boot -size +14k -a -name "vmlinuz*"
/boot/vmlinuz-3.10.0-693.el7.x86_64
/boot/vmlinuz-0-rescue-c2f2ada5a4e74ce18e3f2b6faf0addeb
[root@localhost ~]# find /boot -size +1024k -o -name "vmlinuz*"
/boot/grub2/fonts/unicode.pf2
/boot/System.map-3.10.0-693.el7.x86_64
/boot/vmlinuz-3.10.0-693.el7.x86_64
/boot/initrd-plymouth.img
/boot/initramfs-0-rescue-c2f2ada5a4e74ce18e3f2b6faf0addeb.img
/boot/vmlinuz-0-rescue-c2f2ada5a4e74ce18e3f2b6faf0addeb
/boot/initramfs-3.10.0-693.el7.x86_64.img
/boot/initramfs-3.10.0-693.el7.x86_64kdump.img
[root@localhost ~]#
总结
1.要想更快捷效率的完成工作任务,就需要能够熟悉使用命令 2.平时可以多用帮助命令来解决遇到的问题 3.尽量用mv命令代替 “rm -rf ”命令,以免造成不必要的损失!
|