目录:
一、简单命令
1.查看命令类型、文件、文件类型,了解linux命令执行过程
type: 查看命令类型
- 使用示例 type ifconfig
- 结果显示
- is /.../... 表示外部命令 【遍历目录来找到命令调用,但是并不会遍历所用的目录,而是先看是否在环境变量中,这一点跟windows类似,我们可以通过echo命令来输出查看PATH(环境变量)】
- is shell builtin 表示内部命令【直接调用】
- is hashed (/..../...)也是外部命令,只不过是缓存下来的。
如图所示,我们可以知道 ifconfig是外部命令,而cd是内部命令。
查看环境变量: echo $PATH
那么什么是shell呢?
shell是壳的意思,而内部被调用的程序成为“核”。无论是命令行还是图形化的界面,都是壳。我们就是通过壳来调用核的。我们遇到的第一个shell终端就是bash,bash呢 是通过空格来区分命令的,(空格前面表示命令)。
同时,shell对于外部命令查找的方式:
- 在PATH记录的目录中查找
- 缓存到内存hash中
那么linux的命令行调用过程就是:
【shell】->【bash(解释器/执行器)】-> 【空白符切割,得到的第一个元素,作为命令cmd】->
- is 内部 ,直接调用
- is 外部 ,县查找PATH中是否有目录,有的话就去目录调用,然后缓存到内存的hash中用于下次调用,没有的话就说不存在。
file:查看文件的类型
如图,ifconfig是一个二进制文件(ELF表示二进制文件),而yum呢是一个python脚本文件。
cat:查看文件内容
2.帮助命令
- help 内部命令的帮助
- help :内部命令清单,附带语法格式,描述
- help + 命令 :查看具体内部命令
- man 外部命令的帮助
- 如果 man 不存在(精简版没有安装),安装命令:yum install man man-pages -y [说明:yum是包管理器命令,可通过 man yum查看]
- / xxxx 由于全文检索
- q 退出
- man很强大,可以查看如 man utf-8 、 man ascii等
- 如果man查不出来的情况下可以试着中间加个数字 如: man read ----> man 2 read
为什么要中man查不出来的情况下加数字呢?
因为man对命令进行了划分,用数字表示不同类型的命令:
- 1:用户命令(/bin, /usr/bin, /usr/local/bin)
- 2:系统调用
- 3:库用户
- 4:特殊文件(设备文件)
- 5:文件格式(配置文件的语法)
- 6:游戏
- 7:杂项(Miscellaneous)
- 8: 管理命令(/sbin, /usr/sbin, /usr/local/sbin)
如 read(2) 表示 read 为第2类:
3.其他命令
whereis : 定位命令位置
echo:打印到标准输出
- echo $$ 当前进程的id
- echo "123" >> test.log 写入文件
$LANG:当前使用的语言
ps -ef: 进程列表
hash -r 清除缓存
4.变量
定义变量,用echo $XXX 输出该变量。注意 数组的格式是用“空格”表示。
- a=3
- echo $a
- b=(1,2,3)
- echo $b
- b=(1 2 3)
- echo $b
- echo hello$agod
- echo hello${a}god
- echo ${b[2]}
二、文件系统命令
1.文件目录结构
Linux不像windows那么杂乱无章,它有一个虚拟的文件系统,特定目录下存放着特定的文件。如下方所示:
目录分区的卸载与挂载:
注意:卸载后/boot文件目录不会删除,但是里面的内容而被清除。
Filesystem Hierarchy Standard(文件系统层次化标准)
- /boot: 系统启动相关的文件,如内核、initrd,以及grub(bootloader)
- /dev: 设备文件
- /etc:配置文件
- /home:用户的家目录,每一个用户的家目录通常默认为/home/USERNAME
- /root:管理员的家目录;
- /lib:库文件
- /media:挂载点目录,移动设备
- /mnt:挂载点目录,额外的临时文件系统
- /opt:可选目录,第三方程序的安装目录
- /proc:伪文件系统,内核映射文件
- /sys:伪文件系统,跟硬件设备相关的属性映射文件
- /tmp:临时文件, /var/tmp
- /var:可变化的文件
- /bin: 可执行文件, 用户命令
- /sbin:管理命令
- usr:默认安装目录
- 剩下的目录不要动即可
2.文件系统命令
-
df:显示磁盘使用情况 df / df -h
-
du:显示文件系统使用情况 du/ du -h
-
ls:显示目录文件
-
ls -a 显示出隐藏文件
-
ls还可以多目录显示 , 如: 【ls /usr /etc】【ls / /etc】
说明:多目录显示按照树形目录结构的深浅排序,先浅层次目录后深层次目录;而同层级目录则按照首字母顺序排序。查看树形目录结构用tree命令(没有tree命令,安装:yum install tree -y)
-
ls -l 成列表显示文件 【ls -l列表内容详解】
-
-
cd:切换工作目录
-
pwd:显示当前工作目录
-
mkdir:创建目录 -p:层级创建 ; x/{a,b,c}xx: x目录下创建 axx、bxx、cxx目录
-
rm:删除 -r -f -rf
-
cp:拷贝 -r
-
mv:移动/重命名
-
ln:链接 指向同一文件 ;-s:软链接
-
stat:元数据 列出文件的各项数据
-
touch:刷新元数据访问、修改时间并保持一致,可用于文件监控;另外,文件不存在情况下也可以创建文件。
再次提示:以上所有命令可以通过 help 以及man 来查看!
- 文件类型:
- -:普通文件 (f)
- d: 目录文件
- b: 块设备文件 (block)
- c: 字符设备文件 (character)
- l: 符号链接文件(symbolic link file)
- p: 命令管道文件(pipe)
- s: 套接字文件(socket)
- 文件权限:9位,每3位一组,3组 权限(U,G,O)每一组:rwx(读,写,执行), r--
- 文件硬链接的次数
- 文件的属主(owner)
- 文件的属组(group)
- 文件大小(size),单位是字节
- 时间戳(timestamp):最近一次被修改的时间
- 访问:access
- 修改:modify,文件内容发生了改变
- 改变:change,metadata,元数据
三、文本操作命令
cat:
-
more 分屏
-
less 分屏上下翻页 ,enter 空格 b
-
head 前几行
- head -2 /etc/profile 打印前几行,默认10行,加参数表示多上行
-
tail 后几行
- tail -2 /etc/profile
- tail -f 监控文件
管道:
- shell读取用户输入的字符串
- 发现 |,代表有管道
- | 左右被理解为简单命令
- 加工:前一个(左边)简单命令的标准输出
- 指向后一个(右边)简单命令的标准输入
- 注意:后一个简单命令一定能够接受标准输入才可以
- xargs :构建并执行命令
示例:
cat b.txt | head -3 输出b.txt文件的前三行
head -3 b.txt | tail - 1 输出b.txt文件的第三行
xargs的使用情况:
如下图,ls并未从管道接收左侧的标注输入,显示的仍然是根目录下的内容。
因为ls是读取输入参数的,因此需要用xargs接收左侧标准输入作为参数,构建并执行ls命令,如下:
四、VI全屏文本编辑器
打开文件
- vim /path/to/somefile
- vim +# :打开文件,并定位于第#行
- vim +:打开文件,定位至最后一行
- vim +/PATTERN : 打开文件,定位至第一次被PATTERN匹配到的行的行首
关闭文件
末行模式:
- :q 退出 没有动过文件
- :wq 保存并退出 动过了,不后悔
- :q! 不保存并退出 动过了,后悔了
- :w 保存
- :w! 强行保存
- :wq --> :x
- ZZ(Shift键+zz): 保存并退出 不需要冒号,编辑模式
编辑器模式
编辑模式:按键具有编辑文本功能:默认打开进入编辑模式
输入模式:按键本身意义
末行模式:接受用户命令输入
模式转换:
- 编辑-->输入:
- i: 在当前光标所在字符的前面,转为输入模式;
- a: 在当前光标所在字符的后面,转为输入模式;
- o: 在当前光标所在行的下方,新建一行,并转为输入模式;
- O:在当前光标所在行的上方,新建一行,并转为输入模式;
- I:在当前光标所在行的行首,转换为输入模式
- A:在当前光标所在行的行尾,转换为输入模式
- 输入-->编辑:
- ESC
- 编辑-->末行:
- :
- 末行-->编辑:
- ESC, ESC
编辑模式命令
移动光标
-
字符
- h: 左;j: 下;k: 上;l: 右
-
单词
- w: 移至下一个单词的词首
- e: 跳至当前或下一个单词的词尾
- b: 跳至当前或前一个单词的词首
-
行内
- 0: 绝对行首
- ^: 行首的第一个非空白字符
- $: 绝对行尾
-
行间
- G:文章末尾
- 3G:第3行
- gg:文章开头
-
翻屏
- ctrl+f 下,ctrl+b 上
-
删除&替换单个字符
- x:删除光标位置字符
- 3x:删除光标开始3个字符
- r:替换光标位置字符
-
删除命令(有剪切的作用) : d
- dw:删除单词
- dd:删除行
- 3dw:删除3个单词
- 3dd:删除3行
-
复制粘贴&剪切
- yw:复制单词
- yy:复制行
- p:粘贴
-
撤销&重做
- u 撤销
- ctrl+r 重做 撤销的操作
- ‘.’ 重复上一步的操作
末行模式命令
-
set:设置
- set nu 设置上行号
- set nonu 取消行号
- set readonly 当前环境下只读
-
/:查找
- /sudo 查找sudo单词
- n 向后查找,N 向前查找
-
!:执行命令
- :!ls -l / 比如我们配置Java环境变量输入后,忘记了jdk全称,可以通过这样的命令不必退出编辑来查找jdk全称。
-
s查找并替换
- 范围s/str1/str2/gi
- /:临近s命令的第一个字符为边界字符:/,@,#
- g:一行内全部替换 不加g的话,只替换这行的第一个单词
- i:忽略大小写
- 范围
- n:行号
- .:当前光标行
- +n:偏移n行
- $:末尾行,$-3
- %:全文
- 范围s/str1/str2/gi
其他应用示例
-
删除全部 :末行模式下【.,$dd】 ; 编辑模式下【dG】
-
复制指定行【1,5yy】
-
等等 ......