Shell命令
linux主要由四部分组成:
- linux内核
- shell
- 图形化界面
- 应用软件
可以看出,shell非常重要。
1. Shell版本众多,如何知道你使用的是哪一个shell版本?
一般来说,系统默认的shell就是bash shell, 但是使用的shell取决于你用户登录时的shell.
因为root用户id配置的shell是bash,所以使用root用户登录时,使用的就是bash.
2. 如何查询所有系统的账户列表
在/etc/passwd文件中包含了所有系统的账户列表和每个用户的基本配置信息
root:x:0:0:root:/root:/bin/bash
rebatch:x:1001:100::/home/rebatch:/bin/bash
参数解析
- 用户名
- 用户密码,使用x占位符
- 用户的系统用户ID编号,创建时由系统默认分配,root用户是0
- 用户的系统组ID编号,创建时由系统默认分配,root用户组是0
- 用户的名称
- 用户的默认主目录
- 用户的默认shell程序
3. shell提示符
在登录shell之后,会跳出一行,通常是当前目录+$,提示你输入:
tyhddb:/home/rebatch #
这个就是shell CLI提示符。
-
tyhddb
:表示当前主机 -
/home/rebatch
:表示当前目录 -
#
:表示当前是root用户登录,$
为普通用户登录
问题:如果你使用不同的linux系统,或者切换其他用户时,你可能会发现提示符会出现不同的格式,这个是怎么控制的?
控制命令提示符的环境变量有两个:
- PS1:控制默认命令行提示符的格式
- PS2:控制第二层命令行提示符的格式
在shell中输入使用默认的PS1提示符,如果需要输入附加的信息,才使用PS2,一般很少用到PS2.
既然是环境变量,我就可以在设置环境变量的地方设置它。
export PS1='$PWD>'
-
$PWD>
表示当前路径后加上>
/home/rebatch/batch-home/env>
我们也可以使用echo $PS1
来看看PS1的规则:
tyhddb:~ # echo $PS1
\[\]\h:\w #\[\]
这个root用户的PS1看起来有点奇怪,解释一下
每一个指令都是 /
+字符 表示
-
\[
:控制码序列的开头 -
\]
:控制码序列的结尾 -
\h
:本地主机名 -
\w
:当前工作目录
还有一些其他常用的: -
\u
:当前用户的用户名 -
\$
:如果是普通用户,则为美元符号,如果是超级用户,则为英镑符号 -
\s
: shell的名称 -
\\
:斜杠
示例:
主机名/用户名:当前目录 (普通用户使用,root用户使用#)
export PS1='\h/\u:\w \$\[\]'
tyhddb/rebatch:~ $
tyhddb/rebatch:~ $su root
密码:
tyhddb/root:/home/rebatch #
注意:一定要在头尾加上单引号'
,否则/
转义不起作用
4. bash手册
bash有自己的帮助文档,如果有命令不是很了解时可以查询,只要使用man 命令名称
即可。
man cp
NAME
cp - copy files and directories
SYNOPSIS
cp [OPTION]... [-T] SOURCE DEST
DESCRIPTION
Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.
-a, --archive
same as -dR --preserve=all
AUTHOR
REPORTING BUGS
COPYRIGHT
SEE ALSO
- name: 命令的简单描述
- synopsls: 命令的格式
- description: 描述每个命令选项,主要了解内容
- author: 命令开发人员的信息
- reporting bug: 提供报告bug的信息
- copyright: 命令代码的版权信息
- see also: 提供类似命令
5. 文件系统
我们在登录shell的时候,一般当前的位置都是主目录,需要进入其他目录进行操作。了解一下linux的文件系统。
5.1 根目录
linux中只有一个目录,存贮所有的文件,这个目录是虚拟目录,而最基本最开始的一个是根目录。
一般使用cd /
即可进入根目录
5.2 常用目录
在根目录下有很多目录,而且系统中这些目录都相同
-
/
: 虚拟目录的根目录,通常此处没有文件 -
/bin
: 二进制目录,存放用户的实用程序,bash shell就在这个目录中 -
/boot
: 引导目录,存储引导文件 -
/dev
: 设备目录,在该目录中创建设备节点 -
/etc
: 系统配置文件目录 -
/home
: 普通用户主目录 -
lib
: 库目录,存储系统和应用程序库文件 -
media
: 媒体目录,可移动媒体设备的常用挂载点 -
mnt
: 挂载目录,也是常用的媒体设备的挂载点 -
opt
: 可选目录,存储可选软件包 -
root
: 根主目录 -
sbin
: 二进制目录,存储管理级别的实用程序 -
tmp
: 临时目录,可以在该目录创建和销毁临时工作文件 -
usr
: 用户安装软件的目录 -
var
: 可变目录,用于经常更改的文件,比如日志文件
5.3 浏览目录命令
更改目录命令:cd 路径
路径可以是绝对路径,也可以相对路径
-
.
:表示当前目录 -
..
:表示父目录
5.4 文件和目录列表
查看文件和目录命令:ls
- ls命令以最基本的形式显示当前目录中的文件和目录。
- ls -F 区分文件和目录,目录后面+
/
,文件后面+*
- ls -F 区分文件和目录,目录后面+
- ls -a 查看所有文件,包括以
.
开头的隐藏文件
- ls -a 查看所有文件,包括以
- ls -R 显示当前目录下所有目录中的文件,内容会很长
- ls -l 以列表形式显示每个文件的详细信息
文件列表详细信息解析:- 文件类型:(d)目录,(-)文件,(c)字符设备,(b)块设备
- 文件的权限
- 指向该文件的硬连接的数据
- 文件所有者的用户名称
- 文件所属的组的名称
- 文件的字节大小
- 上次修改文件的时间
- 文件或目录的名称
- ls -l 以列表形式显示每个文件的详细信息
- ls -i 列出每个文件的索引节点,索引节点是每一个文件的标识
ls
命令可以查看某些文件
-
ls -l file1
:查看file1这一个文件
也可以使用通配符查看多个文件,支持正则表达式 -
?
表示一个字符 -
*
表示表示零个或多个字符
5.5 文件处理
5.5.1 创建文件
创建空文件使用touch
命令: touch 文件名
-
touch -a filename
: 更改文件访问时间 -
touch -m filename
: 更改文件修改时间 -
touch -t 时间戳 filename
:加上指定时间戳
5.5.2 复制文件
复制文件使用cp
命令:cp src dest
若文件已存在,会提示是否覆盖
将文件复制到当前所在目录,可以使用.
cp /home/test .
-
cp -p src dest
: 复制的文件访问时间和修改时间与源文件一致。 -
cp -R dir1 dir2
: 复制整个目录的内容 -
cp -f test* dir2
: 使用通配符复制筛选的文件,-f 会强制重写已存在的文件
5.5.3 链接文件
链接文件有两种:
- 软链接:使用
cp -s
或ln -s
- 硬链接:使用
cp -l
或ln
硬链接创建的文件索引号相同,实际上是同一个文件。
软链接创建的文件索引号不相同,是不同的文件,而且软链接文件至存储源文件的相关信息,而不是文件中的实际数据。
5.5.4 重命名文件
重命名文件也是移动文件,使用mv src dest
如果在同一个目录,就是文件重命名的功能
移动带有链接的文件会有问题,链接的文件不再有效。
5.5.5 删除文件
删除文件使用rm file
rm删除的文件无法还原
如果删除带有软链接和硬链接的文件,软链接无法打开文件,但可以打开硬链接。
5.6 目录处理
5.6.1 创建目录
创建目录使用mkdir dir
5.6.2 删除目录
删除目录使用rmdir dir
,但只能删除空目录,目录下有文件不能删除
所以一般使用rm -r dir
删除目录
但一般会出现很多删除提示,所以使用rm -rf dir
强制删除所以目录
5.7 查看文件内容
5.7.1 查看文件系统中文件的完整摘要
使用ls不能查看出所有信息,使用stat file
命令查看完整摘要信息
5.7.2 查看文件类型
stat命令查询的信息少了文件类型信息,查看文件类型使用file test
命令。
file命令将文件分为3类:
- 文本文件
- 可执行文件
- 数据文件:不可执行,不可打印的二进制字符文件
5.7.3 查看整个文件
5.7.3.1 cat命令
cat file
直接显示所有的文件内容。
cat -n file
:为所有行添加编号,在查看脚本很有用
cat -b file
:为带文本的行添加编号
cat -T file
: 去掉所有的跳格字符
cat命令对于大的文件不好用,查找某些数据需要不停的滚动,建议大文件使用more
命令
5.7.3.2 more 命令
more file
也是显示文本文件,但显示完一页数据就停止,可以手动翻页或查询。
在more程序中,可以使用提示符进行一些操作
-
z
: 翻页 -
enter
: 下一行 -
q
: 退出 -
f
: 向前跳过一页 -
b
: 向后跳过一页 -
/expression
: 在文件中搜索expression代表的文本,常用于搜索 -
=
:显示当前行号 -
v
:在当前打开vi编辑器 -
!cmd
:执行shell命令
5.7.3.3 less命令
less命令比more命令更加高级,可以在命令读完整个文件之前显示文件内容,可以轻松应对大型文件。
less命令操作和more命令操作基本相同,而且可以识别向上向下,翻页键等。
5.7.4 查看部分文件
5.7.4.1 tail命令
tail命令显示最后一组文件行,默认显示最后10
行。
-
tail -f file
: 保持tail激活状态,继续显示添加的文本的新行。 -
tail -n 300 file
:显示文件最后300行 -
tail -c 300 file
:显示文件最后300个字节
5.7.4.2 head 命令
与tail命令类似,head命令显示开头的一组文件行,默认显示10行,也支持-c
和-n
命令。
因为文件开头不会更改,所以没有-f
命令