目录
概述
很多人可能在电视或电影中看到过类似的场景,黑客面对一个黑色的屏幕,上面飘着密密麻麻的字
符,梆梆一顿敲,就完成了窃取资料的任务。Linux 刚出世时没有什么图形界面,所有的操作全靠
命令完成,就如同电视里的黑客那样,充满了神秘与晦涩。
近几年来,尽管 Linux 发展得非常迅速,图形界面越来越友好,但是在真正的开发过程中,Linux
命令行的应用还是占有非常重要的席位。可以说不会命令行,就不算会 Linux。Linux 提供了大量
的命令,利用它可以有效地完成大量的工作,如磁盘操作、文件存取、目录操作、进程管理、文件
权限设定等。Linux 发行版本最少的命令也有 200 多个,这里只介绍比较重要和使用频率最多的命
令。
一、Shell的介绍
Shell是Linux系统中运行的一种特殊程序;
Shell在用户和内核之间充当“翻译官";
用户在登录Linux系统时,自动加载一个Shell程序;
Bash是Linux系统中默认使用的Shell程序;文件位于/bin/bash
二、Linux命令的分类
Linux命令分类包括内部命令和外部命令
内部命令 | 外部命令 |
集成于Shell解释器程序内部的一些特殊指令,也称为内建指令(Built-in) | Linux系统中能够完成特定功能的脚本文件或二进制程序 |
属于Shell的一部分 | 属于Shell解释器程序之外的命令 |
没有单独对应的系统文件 | 每个外部命令对应了系统中的一个文件 |
自动载入内存,可以直接使用 | 必须知道其对应的文件位置,由Shell加载后才能执行 |
例如:
[root@wudan ~]# type cd
cd 是 shell 内嵌 ##### 内嵌代表内部命令
[root@wudan ~]# type -a ls
ls 是 `ls --color=auto' 的别名 ####别名代表外部命令
ls 是 /usr/bin/ls
[root@wudan ~]# whereis ls #### whereis可以查找命令具体的位置所在
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
[root@wudan ~]# type -a echo
echo 是 shell 内嵌
echo 是 /usr/bin/echo
外部命令存放于echo $PATH 一个一个找,找到为止,找不到就报无命令
[root@wudan ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
外部命令使用过后会被记录在内存(缓存,但是会占用内存,临时的)加快读取速度
三、Linux命令行的格式
3.1 通用的命令行使用的格式
命令字 【选项 】 【参数】
3.1.1 命令字
是整条命令中最关键的一部分
唯一确定一条命令
3.1.2 选项
短格式选项:使用“-”符号引导
长格式选项:使用“--”符号引导
3.1.3 参数
命令字的处理对象
可以是文件名,目录(路径)名或用户名等内容
个数可以是零到多个
四、编辑Linux命令行
4.1 编辑Linux命令行的辅助操作
Tab键 | 自动补齐 |
反斜杠 / | 强制换行 |
Ctrl+U | 清空至行首 |
Ctrl+K | 清空至行尾 |
Ctrl+L | 清屏 |
Ctrl+C | 取消本次命令编辑 |
Ctrl+A | 跳到行头 |
Ctrl+E | 跳到行尾 |
4.2 获得命令帮助的方法
4.2.1 内部命令help
查看Shell内部命令的帮助信息
4.2.2 命令的“--help”选项
适用于大多数Linux外部命令
4.2.3 使用man命令阅读手册页
使用“↑”,“↓”方向键滚动一行文本
使用Page UP 和Page Down键翻页
按Q或q键退出阅读环境
按“\"键查找内容
小结:
Shell在用户和内核之间充当"翻译官”
Linux命令分为内部命令和外部命令
获得Linux命令帮助的方法
五、Linux基础命令
5.1 查看当前的工作目录-pwd
显示用户当前所在的工作目录位置
示例:
[root@wd ~]# pwd
/root ###当前工作目录
5.2 切换工作目录-cd
将用户的工作目录更改到其他位置
格式 | 说明 |
cd 目标位置 | 切换到目标位置 |
cd ~ | 若不指定目标位置,切换到当前用户的宿主目录 |
cd | |
cd - | 切换到上一次执行cd命令之前所在的目录 |
5.2.1 绝对路径
以根“/"开头的都是绝对路径
5.2.2 相对路径
表现形式 | 说明 | 示例 |
直接使用目录名或文件名 | 表示当前工作目录中的子目录,文件位置 | grub.conf |
以一个点号“.”开头 | 表示以当前的工作目录作为起点 | ..grub.conf |
以两个点号”..”开头 | 表示以当前目录的上一级(父目录)作为起点 | ../vmlinuz |
以“~用户名”形式开头 | 表示以指定用户的宿主作为起点 | ~teacher |
示例:
cd /home 后面跟绝对路径,切换到home目录
cd ~ 切换到某一个用户家目录,只有root才行,别的用户只能在自己家
cd .. / 切换到上一层目录(父目录)
cd ../ ../ 切换到父目录的父目录
5.3 列表显示目录内容-ls
显示目录中内容,包括子目录和文件相关属性信息
ls 【选项】 【文件或目录】
5.3.1 常用选项
-l #将文件信息属性详细列出,通常直接使用ll,因为设置了别名
-R #递归显示,比如一个目录下还有文件,把这个文件一起列出
-d #查看目录本身信息,不显示目录下的内容
-i #显示inode值
-h #友好显示文件大小
-a #遍历所有文件及目录(ls内定将文件或目录名称开头为"."的视为隐藏档,不会列出)
-A #跟-a 唯一不同的是不列出当前目录和上一层目录
示例:
5.3.1 结合通配符
“?”匹配文件名中的一个未知字符
“*”匹配文件命中的任意多个字符
符号 | 效果 |
? | 匹配一个字符 f?.txt |
* | 匹配所有非隐藏的字符无论长短,但不匹配”.”开头的文件,即吟唱文件 |
{1..10} | 1到10 |
{a..z} | a b c . . . z |
{A..Z} | A B C . . .Z |
[123} | 取其中之一有就显示,没有也无所谓 |
[a-z] | 范围需要注意 |
[0-9] | 匹配数字范围 |
\ | 转义符,表示原来的意思 |
[ [:lower:] ] | 小写字母:a---z |
[ [:upper:] ] | 大写字母:A---Z |
[^zhou] | 匹配列表中的所有字符以外的字符 |
[ [:digit:] ] | 任意数字,相当于0--9 |
5.3.2 颜色区别
白色 数据文件TXT
绿色 可执行文件
黄色 块设备文件
红色 压缩包
蓝色 文件夹
天蓝色 连接文件(快捷方式)
5.3.3 扩充
- 普通文件
d 目录文件 directory
b 块设备文件 block
p 管道文件 pipe
s 套接字文件 socket
l 符号连接文件 link
5.4 设置别名-alias
通过别名机制简化的常用命令,比较长的命令
alias 命令别名=命令
unalias ###删除别名
vim /root/.bashrc ###永久生效
修改
- 在/etc/bashrc 会影响全部
- /root/.bashrc 只影响当前用户
补充:别名>内部>hash>外部命令 (先查找别名再找内部命令,缓存最后外部)
示例:
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
注意:在定义别名时,等号两边不能有空格,否则shell不能决定您需要什么,仅在命令中包含空格或特殊字符时才需要
5.5 统计指定目录及空间占用情况-du
du是统计目录(或文件)所占用磁盘空间的大小
du 【选项】 【文件或目录】
5.5.1 常用选项
-a 统计空间占用时包括所有的文件,而不仅仅统计目录
-h 以更人性化的方式(默认以kb计数,但不显示单位)显示出统计结果
-s 只统计所占空间的总大小(Summary),而不是统计每个子目录,文件的大小
示例:统计出/var/log目录所占用空间的大小
du -sh /var/log/
du -sh * ###表示当前目录下所有
5.6 创建新目录-mkdir
5.6.1 创建新的空目录
mkdir 【选项】 目录位置及名称
mkdir /opt/sj ###创建目录,注意父目录必须存在
5.6.2 常用命令
-p 一次性创建嵌套的多层目录
示例:
在当前目录创建名为wudan 的子目录
创建目录/aa , 在/aa目录下创建子目录bb,在/aa/bb目录下创建目录cc
或者创建50个子目录的时候:使用通配符表示{1..50}
5.7 创建文件touch
更新文件的时间标记:修改文件或者目录的时间属性,包括存取时间和更改时间
经常用于创建多个新的空文件
touch 文件
示例:
创建两个空文件,文件名分别为aa和bb
touch aa bb
touch的高级用法:
扩展
touch f{A..Z}.log
-[123]取其中之一有就显示,没有也无所谓
touch f【zhou】.log
ls f【zhou】.log 四个其中之一有就全显示
5.8 创建连接文件-ln
为文件或目录建立链接文件,类似于Windows系统的快捷方式,提高用户定位文件或定位目录的效率链接文件包括软链接和硬链接两种类型,其中软链接又称为符号链接
5.8.1 链接文件类型
软连接(又称为符号链接):相当于创建一个快捷方式
ln 【-s】 源文件或目录... 链接文件或目标位置
硬链接:相当于复制了一份副本 ln
5.8.2 区别
软连接可以跨设备,可以支持文件夹,软连接删除源文件不能访问:
硬链接不能跨分区建立连接,无法对文件夹创建,删除硬件连接可以继续访问硬链接。
一般情况下,文件名和inode号码是一一对应关系,每个inode号码对应一个文件名。但是,Unix/Linux系统允许,多个文件名指向同一个inode号码。这意味着,可用不同的文件名访问同样的内容:对文件内容进行修改,会影响到所有的文件名:但是,删除一个文件名,不影响另一个文件名的访问。
除了硬链接以外,还有一种特殊情况。文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A 时,系统会自动将访问者导向文件B。因此无论打开哪个文件,最终读取的都是文件B。这是文件A就称为文件B的“软链接”(soft link)或者符号链接(symbolic link)。这意味着,文件A依赖于文件B存在,如果删除了文件B,打开文件A就会报错:“No such file or directroy"。这是软链接与硬链接最大的不同:文件A指向文件B的文件名,而不是文件B的inode号码,文件B的inode”链接数“不会因此发生变化。
案例:
创建a.txt 的软链接tset.txt和硬链接tset2.txt
硬链接的inode的值是一样的,软链接的inode值是不一样的
a.txt和tset2.txt 硬链接 a.txt和tset.txt是软连接
5.9 复制文件或目录-cp
将需要的复制文件或目录(源)重建一份,并保存为新的文件或目录
5.9.1 常用选项
-f 覆盖目标同名文件或目录时不进行提醒,直接强制复制
-i 覆盖目标同名文件或目录时提醒用户确认
-p 复制时保持源文件的权限,属主及时间标记等属性不变
-r 复制目录时必须使用此选项,表示递归复制所有的文件及子目录
-a 保留权限,复制软链接本身,递归复制
cp 的高级用法:cp -v filel。txt{,.bak} 常用于备份
示例:
[root@wd home]# cp -v a.txt {,.bak}
"a.txt" -> ".bak"
[root@wd home]# cp a.txt{,.bak}
[root@wd home]# ls
a.txt a.txt.bak demo2.txt ky19 ky19.txt test,txt test.txt
[root@wd home]# cat a.txt.bak
123456
[root@wd home]# ls
a.txt a.txt.bak demo2.txt ky19 ky19.txt test,txt test.txt
[root@wdhome]# cat a.txt.bak
123456
[root@wd home]# cat a.txt
123456
cat a.txt.bak和cat a.txt.bak里面的数据一样
5.10 删除文件或目录-rm
-i 删除文件或目录时提醒用户确认
-r 删除目录时必须使用此选项,表示递归删除整个目录树(应谨慎使用)
-f 删除目录或文件时不进行提醒,而直接强制删除
常见用法:rm -rf ./*
删除空目录:rmdir
示例:
5.11 移动文件或目录-mv
将指定的文件或目录转移位置
如果目标位置与源位置相同,则相当于执行重命名操作
mv 【选项】... 源文件或目录... 目标文件或目录
-i 若指定目录已有同名文件,则先询问是否覆盖旧文件
-f 在mv操作要覆盖某已有的目标文件时不给任何指示
当在同一目录下用mv就是改名,如果是跨目录使用mv的就是移动,相当于剪切的操作
示例:
5.12 查找命令,文件存放目录which
which命令用于查找Linux命令程序并显示所在的具体位置,其搜索范围主要是由用户的环境变量PATH决定(echo $PATH)
which 命令|程序 或 which -a 命令|程序
示例:which ls which cd
1.[root@wd /]# which ls
alias ls='ls --color=auto'
/usr/bin/ls
2.[root@wd /]# which cd
/usr/bin/cd
3.[root@wd /]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
5.13 查找文件或目录-find
采用递归的方式,根据目标的名称,类型,大小等不同的属性进行精细查找
格式: find 【查找范围】 【查找条件表达式】
5.13.1 查找范围:查找文件或子目录的目录位置
查找类型 | 关键字 | 说明 |
按名称查找 | -name | 根据目标文件的名称进行查找,允许使用“*”及“?”通配符 |
按文件大小查找 | -size | 根据目标文件的大小进行查找,一般使用+,- 号设置超过或小于指定大小作为查找条件 常用的容量单位包括kB(注意k是小写的),MB,GB |
按文件属主查找 | -user | 根据文件是否属于目标用户进行查找 |
按文件类型查找 | -type | 根据文件的类型进行查找 文件类型包括普通文件(f),目录(d),块设备文件(b) 字符设备文件(C)等 |
注:块设备指的是读取数据的设备(如硬盘,内存等);
字符设备指的是按单个字符读取数据的设备(如键盘,鼠标等)
5.14 使用find命令实现多个查找条件
5.14.1 各表达式之间使用逻辑运算符
-a 表示而且(and)
-o 表示或者(or)
示例:find /boot -size +1024k -a -name "vmlinuz*"
find /boot -size +1024k -o -name "vmlinuz*"
查找etc下面的目录只要有root并且大于1M的显示出来
如下:
注:find /boot -size +1024k -a/-o -name "vmlinuz *"
使用“-a”和“-o”组合的两个条件,前者表示两个条件必须满足,后者表示只需要满足一个条件即可
扩展命令:在生产中常用的命令
1. find /backup/ -type f -name "*.log" -exec rm {} \ ; ###删除备份文件
2. find /backup/ -type f -name "*.dmp" -exec rm {} \ ;### 删除日志文件
3. find /backup/ -type f -name "*.tar.gz" -mtime +5 -exec rm -rf {} \ ;
删除五天前的备份
六、总结:
Shell是一种特殊的程序,在用户和内核之间充当翻译官
Linux命令的分类,格式及使用方法
Linux常用命令:
查看及切换目录(pwd,cd,ls ,du);
创建目录和文件(mkdir, touch, ln);
复制,删除,移动目录和文件(cp, rm, mv);
查找目录和文件(which,find)