# 1、什么是shell?
是一个程序,接受从键盘输入的指令,然后把命令传递给操作系统去执行。bash
指的是"Bourne Again SHell"的简称。bash
是最初UNIX
上由SteveBourne写成shell程序sh的增强版。
提示符的最后一个字母如果是#
,则表示这个终端有超级管理员权限(以root用户的身份登入)。$
表示一般管理员。
//一些简单命令
date 令显示系统当前时间和日期。
cal 默认显示当前月份的日历
df 查看磁盘剩余空间的数量
free 显示空闲内存的数
exit 结束终端会话
2
3
4
5
6
# 2、文件系统的操作
linux
只有一个单一的文件系统树,意味着就只有一个盘符。
pwd 打印当前工作目录名
cd /usr/bin 更改目录
ls 列出目录内容
ls -a 可以列出以*.*开头的隐藏文件。
ls /usr 列出指定文件夹下的所有目录内容。
file picture.jpg 确定文件类型,打印出文件内容的简单描述。
less 1.html 浏览文件内容 按住'q'键退出less程序
2
3
4
5
6
7
绝对路径。开始于根目录,紧跟着目录树的一个个分支,一直到达所期望的目录或文件。
cd /usr/bin
表示进入到/usr/bin
目录。相对路径。开始于当前工作目录。符号
.
表示当前工作目录,但是在几乎所有的情况下,都可以省略./
。..
表示工作目录的父目录。
1、ls 的乐趣
ls /usr 指定列出内容的目录
ls ~ /usr 列出多个指定目录的内容
ls -l 以长模式输出目录
ls -lt 按文件修改时间的先后排序且按长格式输出
ls -lt --reverse 按文件修改时间的先后排序且按长格式,并且按照相反的方式输出。
ls -l dir2 //查看dir2文件夹的内容
2
3
4
5
6
ls命令一些常用的选项如下:
选项 | 长选项 | 描述 |
---|---|---|
-a | --all | 列出所有文件,甚至包括文件名以圆点开头的默认会被隐藏的隐藏文件。 |
-d | --directory | 通常,如果指定了目录名,ls 命令会列出这个目录中的内容,而不是目录本身。 把这个选项与 -l 选项结合使用,可以看到所指定目录的详细信息,而不是目录中的内容。 |
-F | --classify | 这个选项会在每个所列出的名字后面加上一个指示符。例如,如果名字是 目 录名,则会加上一个'/'字符。 |
-h | --human-readabl e | 当以长格式列出时,以人们可读的格式,而不是以字节数来显示文件的大小。 |
-l | 以长格式显示结果。 | |
-r | --reverse | 以相反的顺序来显示结果。通常,ls 命令的输出结果按照字母升序排列。 |
-S | 命令输出结果按照文件大小来排序。 | |
-t | 按照修改时间来排序。 |
ls -l
长格式列表的字段表示的意思。
字段 | 含义 |
---|---|
-rw-r--r-- | 对于文件的访问权限。第一个字符指明文件类型。在不同类型之间, 开头的“-”说明 是一个普通文件,“d”表明是一个目录。其后三个字符是文件所有者的 访问权限,再其 后的三个字符是文件所属组中成员的访问权限,最后三个字符是其他所 有人的访问权 限。这个字段的完整含义将在第十章讨论。 |
1 | 文件的硬链接数目。参考随后讨论的关于链接的内容。 |
root | 文件属主的用户名。 |
root | 文件所属用户组的名字。 |
32059 | 以字节数表示的文件大小。 |
2007-04-03 11:05 | 上次修改文件的时间和日期。 |
oo-cd-cover.odf | 文件名 |
2、less命令
可以用less
命令来浏览文件内容。下面是less
程序常用的键盘命令。
命令 | 行为 |
---|---|
Page UP or b | 向上翻滚一页 |
Page Down or space | 向下翻滚一页 |
UP Arrow | 向上翻滚一行 |
Down Arrow | 向下翻滚一行 |
G | 移动到最后一行 |
1G or g | 移动到开头一行 |
/charaters | 向前查找指定的字符串 |
n | 向前查找下一个出现的字符串,这个字符串是之前所指定查找的 |
h | 显示帮助屏幕,按q 退出 |
q | 退出 less 程序 |
3、linux系统中的目录介绍
目录 | 描述 |
---|---|
/ | 根目录 |
/boot | 包含 Linux 内核,最初的 RMA 磁盘映像(系统启动时,由驱动程序所需,和 启动加载程序。 有趣的文件: • /boot/grub/grub.conf or menu.lst, 被用来配置启动加载程序。 • /boot/vmlinuz,Linux 内核。 |
/dev | 这是一个包含设备结点的特殊目录。“一切都是文件”,也使用于设备。 在这个目录里,内核维护着它 支持的设备 |
/etc | **这个目录包含所有系统层面的配置文件。**它也包含一系列的 shell 脚本, 在系统启动时,这些脚本会运行每个系统服务。这个目录中的任何文件应该是可读的文本文 件。 • /etc/crontab, 定义自动运行的任务。 • /etc/fstab,包含存储设备的列表,以及与他们相关的挂载点。 • /etc/passwd,包含用户帐号列表 |
/home | **在通常的配置环境下,系统会在/home 下,给每个用户分配一个目录。**普通用户只能在他们自己的目录下创建文件。这个限制保护系统免受错误的用户活动破坏。 |
/lib | **包含核心系统程序所需的库文件。**这些文件与 Windows 中的动态链接库相似。 |
/los t+fou nd | 每个使用 Linux 文件系统的格式化分区或设备,例如 ext3文件系统, 都会有这个目录。当部分恢复一 个损坏的文件系统时,会用到这个目录。除非文件系统 真正的损坏了,那么这个目录会是个空目录。 |
/media | 在现在的 Linux 系统中,/media 目录会包含可移除媒体设备的挂载点, 例如 USB 驱动器,CD-RO Ms 等等。这些设备连接到计算机之后,会自动地挂载到这个目录结点下。 |
/mnt | 在早些的 Linux 系统中,/mnt 目录包含可移除设备的挂载点。 |
/opt | 这个/opt 目录被用来安装"可选的"软件。这个主要用来存储可能 安装在系统中的商业软件产品。 |
/proc | 这个/proc 目录很特殊。从存储在硬盘上的文件的意义上说,它不是真正的文件系统。 反而,它是一个 由 Linux 内核维护的虚拟文件系统。它所包含的文件是内核的窥视孔。这些文件是可读的, 它们会告诉 你内核是怎样监管计算机的。 |
/root | root用户的根目录 |
/sbin | 这个目录包含“系统”二进制文件。它们是完成重大系统任务的程序,通常为超级用户保留。 |
/tmp | **是用来存储由各种程序创建的临时文件的地方。**一些配置,导致系统每次重新启动 时,都会清空这个目录。 |
/usr | 在 Linux 系统中,/usr 目录可能是最大的一个。它包含普通用户所需要的所有程序和文件。 |
/usr/bin | 包含系统安装的可执行程序 |
/usr/lib | 包含由/usr/bin 目录中的程序所用的共享库 |
/usr/l ocal | 这个/usr/local 目录,是非系统发行版自带,却打算让系统使用的程序的安装目录。 **通常,由源码编译的程序会安装在/usr/local/bin 目录下。**新安装的 Linux 系统中,会存在这个目录, 但却是空目录,直到系统管理员放些东西到它里面。 |
/usr/s bin | 包含许多系统管理程序 |
/usr/s hare | /usr/share 目录包含许多由/usr/bin 目录中的程序使用的共享数据。 其中包括像默认的配置文件,图 标,桌面背景,音频文件等等。 |
/usr/s hare/ doc | 大多数安装在系统中的软件包会包含一些文档。在/usr/share/doc 目录下, 我们可以找到按照软件包分 类的文档。 |
/var | 除了/tmp 和/home 目录之外,相对来说,目前我们看到的目录是静态的,这是说, 它们的内容不会改变。/var 目录是可能需要改动的文件存储的地方。各种数据库,假脱机文件, 用户邮件等等,都驻扎在 这里。 |
/var/l og | 这个/var/log 目录包含日志文件,各种系统活动的记录。这些文件非常重要,并且应该时时监测它 们。其中最重要的一个文件是/var/log/messages。注意,为了系统安全,在一些系统中, 你必须是超级用户才能查看这些日志文件。 |
4、操作文件和目录
mkdir 创建目录
mkdir directory... //三个原点意味着该参数可以重复 mkdir dir1 dir2 dir3 //创建三个目录 mkdir -p test/dir //-p 能保证在test文件夹不存在情况下也能创建dir文件夹
1
2
3cd 更改目录
cd 更改工作目录到根目录。 cd ~ 更改工作目录到根目录。 cd .. 返回上一级目录 cd ../.. 返回上两级目录 cd - 更改目录到先前工作目录。 cd / 进入更目录 cd -user 更改目录到当前根目录。例如cd -james表示更改工作目录到用户james的根目录。
1
2
3
4
5
6
7cp 复制文件和目录
cp item1 item2//复制单个文件或目录item1到文件或目录item2 cp item... directory //复制多个项目(文件或目录)到一个目录下。
1
2下面是cp命令的一些有用的选项
选型 意义 -a,--archive 复制文件和目录,以及它们的属性,包括所有权和权限。 通常,复本具有用户所操 作文件的默认属性。 -i, --interactive 在重写已存在文件之前,提示用户确认。如果这个选项不指定, cp 命令会默认重 写文件。 -r,--recursive 递归地复制目录及目录中的内容。当复制目录时, 需要这个选项(或者-a 选 项)。 -u, --update 当把文件从一个目录复制到另一个目录时,仅复制 目标目录中不存在的文件,或者 是文件内容新于目标目录中已经存在的文件。 -v, --verbose 显示翔实的命令操作信息 命令 运行结果 cp file1 file2 复制文件 file1 内容到文件 file2。如果 file2 已经存在, file2 的内容会被 file1 的内 容重写。如果 file2 不存在,则会创建 file2。 cp -i file1 file2 这条命令和上面的命令一样,除了如果文件 file2 存在的话,在文件 file2 被重写之 前, 会提示用户确认信息。 cp file1 file2 dir1 复制文件 file1 和文件 file2 到目录 dir1。目录 dir1 必须存在。 cp dir1/* dir2 使用一个通配符,在目录 dir1 中的所有文件都被复制到目录 dir2 中。 dir2 必须已 经存在。 cp -r dir1 dir2 复制目录 dir1 中的内容到目录 dir2。如果目录 dir2 不存在, 创建目录 dir2,操作 完成后,目录 dir2 中的内容和 dir1 中的一样。 如果目录 dir2 存在,则目录 dir1 (和目录中的内容)将会被复制到 dir2 中。 mv 移动和重命名文件
mv item1 item2 //把文件或目录 “item1” 移动或重命名为 “item2” mv item... directory //把一个或多个条目从一个目录移动到另一个目录中。
1
2选项 意义 -i --interactive 在重写一个已经存在的文件之前,提示用户确认信息。 如果不指定这个选项,mv 如果不指定这个选项,mv 命令会默认重写文件内容。 -u --update 当把文件从一个目录移动另一个目录时,只是移动不存在的文件, 或者文件内容新 于目标目录相对应文件的内容。 -v --verbose 当操作 mv 命令时,显示翔实的操作信息。 命令 运行结果 mv file1 file2 移动 file1 到 file2。如果 file2 存在,它的内容会被 file1 的内容重写。 如果 file2 存在,它的内容会被 file1 的内容重写。 如果 file2 不 存在,则创建 file2。 每种情况下,file1 不再存在。 mv -i file1 file2 除了如果 file2 存在的话,在 file2 被重写之前,用户会得到 提示信息外,这个和上 面的选项一样。 mv file1 file2 dir1 移动 file1 和 file2 到目录 dir1 中。dir1 必须已经存在。 mv dir1 dir2 如果目录 dir2 不存在,创建目录 dir2,并且移动目录 dir1 的内容到 目录 dir2 中,同时删除目录 dir1。如果目录 dir2 存在,移动目录 dir1(及它的内容)到目录 dir2。 rm 删除文件和目录
rm item...//删除一个或多个文件或目录
1选项 意义 -i, --interactive 在删除已存在的文件前,提示用户确认信息。 如果不指定这个选项,rm 会默默地 如果不指定这个选项,rm 会默默地 删除文件 删除文件 -r, --recursive 递归地删除文件,这意味着,如果要删除一个目录,而此目录 又包含子目录,那么 子目录也会被删除。要删除一个目录,必须指定这个选项。 -f, --force 忽视不存在的文件,不显示提示信息。这选项颠覆了“--interactive”选项。 -v, --verbose 在执行 rm 命令时,显示翔实的操作信息。 命令 运行结果 rm file1 默默地删除文件 rm -i file1 除了在删除文件之前,提示用户确认信息之外,和上面的命令作用一样。 rm -r file1 dir1 删除文件 file1, 目录 dir1,及 dir1 中的内容。 rm -rf file1 dir1 同上,除了如果文件 file1,或目录 dir1 不存在的话,rm 仍会继续执行。 ln 创建连接
ln file link //创建硬链接 ln -s item link //创建符号链接,item可以是文件或者目录。
1
21)硬链接
一个硬链接和文件本身没有区别。当一个硬链接被删除时,这个链接 被删除,但是文件本身的内容仍然存在(这是说,它所占的磁盘空间不会被重新分配), 直到所有关联这个文件的链接都删除掉。
硬链接的局限性
- 一个硬链接不能关联它所在文件系统之外的文件。这是说一个链接不能关联与链接本身不在同一个磁盘分区上的文件。
- 一个硬链接不能关联一个目录。只能关联文件。
2)符号链接
ln -s ../fun dir2/fun-sym //fun是跟dir2同级的.
1 创建符号链接是为了克服硬链接的局限性。符号链接生效,是通过创建一个 特殊类型的文件,这个文件包含一个关联文件或目录的文本指针。
一个符号链接指向一个文件,而且这个符号链接本身与其它的符号链接几乎没有区别。
当你删除一个符号链接时,只有这个链接被删除,而不是文件自身。如果先于符号链接 删除文件,这个链接仍然存在,但是不指向任何东西。这个链接被称为 坏链接。ls 命令会以红色,来显示坏连接的存在。
5、通配符
通配符 | 意义 |
---|---|
[[:class:]] | 匹配任意一个属于指定字符类中的字符 |
[!characters] | 匹配任意一个不是字符集中的字符 |
[characters] | 匹配任意一个属于字符集中的字符 |
? | 匹配任意一个字符(不包括零个) |
* | 匹配任意多个字符(包括零个或一个) |
字符类 | 意义 |
---|---|
[:alnum:] | 匹配任意一个字母或数字 |
[:alpha:] | 匹配任意一个字母 |
[:digit:] | 匹配任意一个数字 |
[:lower:] | 匹配任意一个小写字母 |
[:upper | 匹配任意一个大写字母 |
模式 | 匹配对象 |
---|---|
* | 所有文件 |
g* | 文件名以“g”开头的文件 |
b*.txt | 以"b"开头,中间有零个或任意多个字符,并以".txt"结尾的文件 |
Data??? | 以“Data”开头,其后紧接着3个字符的文件 |
[abc]* | 文件名以"a","b",或"c"开头的文件 |
BACKUP.[0-9][0-9][0-9] | 以"BACKUP."开头,并紧接着3个数字的文件 |
[[:upper:]]* | 以大写字母开头的文件 |
[![:digit:]] | 不以数字开头的文件 |
*[[:lower:]123] | 文件名以小写字母结尾,或以 “1”,“2”,或 “3” 结尾的文件 |
# 3、常见基本命令
• type – 说明怎样解释一个命令名
• which – 显示会执行哪个可执行程序
• man – 显示命令手册页
• apropos – 显示一系列适合的命令
• info – 显示命令 info
• whatis – 显示一个命令的简洁描述
• alias – 创建命令别名
2
3
4
5
6
7
1、type - 显示命令的类型
type 命令是 shell 内部命令,它会显示命令的类别,给出一个特定的命令名(做为参数)。常用于测试command
是否是一个命令。
type command //"command"是你要检测的命令名
2、which - 显示一个可执行程序的位置
了确定所给定的执行程序的准确位置,使用 which 命令。**这个命令只对可执行程序有效,不包括内部命令和命令别名,别名是真正的可执行程序的替代物。 **
which ls //alias ls='ls --color=auto'
/usr/bin/ls
which cd //usr/bin/cd
2
3
3、help - 得到 shell 内部命令的帮助文档
help cd//显示cd命令的帮助文档
4、--help - 显示用法信息
mkdir --help
5、man - 显示程序手册页
man program //“program”是要浏览的命令名。
6、apropos - 显示适当的命令
也有可能搜索参考手册列表,基于某个关键字的匹配项。虽然很粗糙但有时很有用。 下面是一个以"cd"为关 键词来搜索参考手册的例子:
apropos cd
//输出结果如下
cd (1) - bash built-in commands, see bash(1)
perlebcdic (1) - Considerations for running Perl on EBCDIC platforms
rsyncd.conf (5) - configuration file for rsync in daemon mode
Unicode::UCD (3pm) - Unicode character database
utf8 (3pm) - Perl pragma to enable/disable UTF-8 (or UTF-EBCDIC) i...
//输出结果每行的第一个字段是手册页的名字,第二个字段展示章节
2
3
4
5
6
7
8
9
7、whatis - 显示非常简洁的命令说明
[root@etwetrwet ~]# whatis cd
cd (1) - bash built-in commands, see bash(1)
2
3
8、info - 显示程序 Info 条目
输入"info",接着输入程序名称,启动 info。
info coreutils
//将会显示一个包含超级链接的手册页,这些超级链接指向包含在 coreutils 包中的各个程序。
2
3
命令 | 行为 |
---|---|
? | 显示命令帮助 |
PgUp or Backspace | 显示上一页 |
PgDn or Spac | 显示下一页 |
n | 下一个 - 显示下一个结点 |
p | 上一个 - 显示上一个结点 |
u | Up - 显示当前所显示结点的父结点,通常是个菜单 |
Enter | 激活光标位置下的超级链接 |
q | 退出 |
9、用别名(alias)创建你自己的命令
可以将多个命令放在同一行上。
cd /usr; ls; cd -
//首先更改目录到/usr,然后列出目录 内容,最后回到原始目录(用命令"cd ~"),结束在开始的地方
2
3
创建命令别名
alias name='string'
alias foo='cd /usr; ls; cd -'
//删除别名
unalias foo
//要查看所有定义在系统环境中的别名
alias
2
3
4
5
6
7
# 4、重定向
I/O
重定向。I
-input输入。O
-output输出。I/O 重定向允许我们可以更改输出走向和输入来向。一般地,输出送到屏幕,输入来自键盘, 但是通过 I/O 重定向,我们可以改变输入输出方向。
• cat - 连接文件
• sort - 排序文本行
• uniq - 报道或省略重复行
• grep - 打印匹配行
• wc - 打印文件中换行符,字,和字节个数
• head - 输出文件第一部分
• tail - 输出文件最后一部分
2
3
4
5
6
7
8
1、标准输入,输出,和错误
默认情况下,标准输出和标准错误都连接到屏幕,而不是 保存到磁盘文件。除此之外,许多程序从一个叫做标准输入(stdin)的设备得到输入,默认情况下,标准输入连接到键盘。
stdout //标准输出
stderr //标准错误
stdin //标准输入
2
3
4
2、重定向标准输出
使用 ">" 重定向符,其后跟着文件名,将标准输出到文件名所在的文件里。
使用">>"操作符,将导致输出结果添加到文件内容之后。如果文件不存在,文件会 被创建,就如使用了">"操作符。
ls -l /usr/bin > ls-output.txt // 把 ls 命令的运行结果输送到文件 ls-output.txt 中去, 由文件代替屏幕。
>output.txt //要删除一个文件的内容(或者创建一个新的空文件)
ls -l /usr/bin >> ls-output.txt //向ls-output.txt文件追加内容。
2
3
4
3、重定向标准错误
重定向标准错误缺乏专用的重定向操作符。把这些文件流的前三个看作标准输入,输出和错误,shell内部参考它们为文件描述符0,1和2,各自地。shell 提供 了一种表示法来重定向文件,使用文件描述符。因为标准错误和文件描述符2一样,我们用这种 表示法来重定向标准错误。**
ls -l /bin/usr 2> ls-error.txt //执行重定向标准错误到文件 ls-error.txt 任务。
2
4、重定向标准输出和错误到同一个文件
第一种方法。完成两个重定向。首先重定向标准输出到文件 ls-output.txt,然后重定向文件描述符2(标
准错误)到文件描述符1(标准输出)使用表示法2>&1。
ls -l /bin/usr > ls-output.txt 2>&1//重定向标准错误到屏幕
ls -l /bin/usr 2>&1 >ls-output.txt //重定向标准错误到屏幕
2
3
第二种方法。
ls -l /bin/usr &> ls-output.txt //
2
5、处理不需要的输出
一个特殊的叫做/dev/null
的文件。这个文件是系统设备,叫做位存储桶,它可以 接受输入,并且对输入不做任何处理。
ls -l /bin/usr 2> /dev/null
2
下面是重定向标准输入的一些指令
6、cat - 连接文件
cat 命令读取一个或多个文件,然后复制它们到标准输出。可以使用 cat 来显示文件而没有分页。可以使用cat来创建简短的文本文件。
cat //如果 cat 没有给出任何参数,它会从标准输入读入数据,因为标准输入,默认情况下,连接到键盘。 它正在等待我们输入数据。
//由于文件名参数的缺席,cat 复制标准输入到标准输出,所以我们看到文本行重复出现。 我们可以使用这种行为
来创建简短的文本文件。
1、cat > 1.txt //新建并打开1.txt
2、kjfklsgljlhdfhfj //往1.txt文件里输入文本。
3、ctrl+d //第一次输入达到文件末尾。再次输入就退出输入。
通过上面三步我们创建了1.txt文件,并在文件里输入了`kjfklsgljlhdfhfj`
cat —A foo.txt //-A选项,表示将在foo.txt文件中显示非打印字符(如tab键)
cat -ns foo.txt //-你表示显示行号,-s表示禁止输出多个空白行
2
3
4
5
6
7
8
9
10
7、管道线
命令可以从标准输入读取数据,然后再把数据输送到标准输出,命令的这种能力被 一个 shell 特性所利用,这个特性叫做管道线。使用管道操作符"|"(竖杠),一个命令的标准输出可以管道到另一个命令的标准输入。
ls -l /usr/bin | less
2
8、过滤器
管道线经常用来对数据完成复杂的操作。有可能会把几个命令放在一起组成一个管道线。 通常,以这种方式使用的命令被称为过滤器。
ls /bin /usr/bin | sort | less
//把目录/bin 和/usr/bin 中 的可执行程序都联合在一起,再把它们排序,然后浏览执行结果:
2
3
9、uniq - 报道或忽略重复行
uniq 只会删除相邻的重复行**。uniq 命令经常和 sort 命令结合在一起使用。uniq 从标准输入或单个文件名参数接受数据有序 列表(详情查看 uniq 手册页),默认情况下,从数据列表中删除任何重复行。**
ls /bin /usr/bin | sort | uniq | less
//使用 uniq 从 sort 命令的输出结果中,来删除任何重复行。如果我们想看到 重复的数据列表,让 uniq 命令带上"-d"选项
ls /bin /usr/bin | sort | uniq -d | less
2
3
4
选项 | 说明 说明 |
---|---|
-c | 输出所有的重复行,并且每行开头显示重复的次数。 |
-d | 只输出重复行,而不是特有的文本行。 |
-f n | 忽略每行开头的 n 个字段,字段之间由空格分隔,正如 sort 程序中的空格分隔 符;然而, 不同于 sort 程序,uniq 没有选项来设置备用的字段分隔符。 |
-i | 在比较文本行的时候忽略大小写。 |
-s n | 在比较文本行的时候忽略大小写。 |
-u | 只是输出独有的文本行。这是默认的。 |
10、wc - 打印行,字和字节数
wc 1.txt
2 2 9 1.txt //行数,单词数和字节数
2
3
11、grep - 打印匹配行
用来找到文件中的匹配文本。grep 有-对方便的选项:"-i"导致 grep 忽略大小写当执行搜索时(通常,搜索是大小写 敏感的),"-v"选项会告诉 grep 只打印不匹配的行。
grep pattern [file...]
2
12、head / tail - 打印文件开头部分/结尾部分
//输出output.txt的前5行
head -n 5 output.txt
//输出output.txt的最后5行
tail -n 5 ls-output.txt
//管道线
ls /usr/bin | tail -n 5
//添加-f选项实时浏览文件,按下ctrl+c退出
tail -f /var/log/messages
2
3
4
5
6
7
8
9
13、tee - 从 Stdin 读取数据,并同时输出到 Stdout 和文件
tee 程序从标准输入读入数据,并且同时复制数据到标准输出(允许数据继续随着管道线流动)和一个
或多个文件。
ls /usr/bin | tee ls.txt | grep zip
//读取ls /usr/bin里的内容,然后输出到ls.txt中,再通过grep过滤
2
3
# 5、echo操作符
1、字符展开
echo
在标准输出中打印出它的文本参数。
echo twetertyy
//twetertyy
echo * //展示当前文件夹下所有的文件或文件夹的名字
2
3
4
echo的参数详解:
echo -e "\nfile type" //-e激活转义字符。\n换行
echo -n "agsdfgsfhh" ///-n 不换行输出
2
3
2、路径名展开
上面的那种*
通配符工作机制就叫做路径名展开。echo *
跟ls
的密令的功能很像
echo D* //显示当前文件夹下以D开头的文件或文件夹的名字
echo [[:upper:]]* //显示当前文件夹下以大写字母开头的文件名或文件夹的名字
echo /usr/*/share //查看当前目录之外的目录
2
3
4
3、波浪线展开
echo ~ //没有指定用户名时,显示当前用户的根目录
echo ~foo //如果有foo用户,则显示该用户的根目录,否则打印~foo
2
3
4、算术表达式展开
使用$((expression))
来展开算术表达式。expression
由数值和算术操作符组成。算术表达式只支持整数。
echo $((3*3))//9
echo $(((3***3)/4)) //6
2
3
5、花括号展开
//花括号包含右逗号分开的字符串列表
echo {1,2} //1,2
//花括号包含两个省略号
echo {1..3}//1,2,3
//花括号嵌套
echo a{A{1,2},B{3,4}}b //aA1b aA2b aB3b aB4b
//使用花括号创建大量文件夹
mkdir {2017..2019}dir //20017dir 2018dir 2019dir
2
3
4
5
6
7
8
9
6、参数展开
$变量名
可以取出系统中的内置变量。printenv
l可以查看系统中的所有变量。
echo $USER //root
printenv //查看变量列表
2
3
7、命令替换
们把一个命令的输出作为一个展开模式来使用
echo $(ls)
ls -l $(which cp)
2
3
8、引用
echo The total is $100.00 //The total is 00.0 引用系统中的变量$1,$1不存在,所以输出0。
2
9、双引号、单引号、转义字符
把文本放在双引号("")中, shell 使用的特殊字符,除了 $,\ (反斜杠),和 `(倒引号)之外, 则失去它们的特殊含义,被当作普通字符来看待。这意味着单词分割,路径名展开, 波浪线展开和花括号展开都被禁止,然而参数展开,算术展开和命令替换仍然执行。
//单词分割被禁止
echo "this is a test" //this is a test
2
3
单引号会禁用所有的展开。在字符之前加上一个反斜杠\
,在这个上下文中叫做转义字符。
# 6、键盘高级操作技巧
1、移动光标
按键 | 功能 |
---|---|
Ctrl+a | 移动光标到行首。 |
Ctrl+e | 移动光标到行尾 |
Ctrl+f | 光标前移一个字符;和右箭头作用一样。 |
Ctrl+b | 光标后移一个字符;和左箭头作用一样。 |
Ctrl+l | 清空屏幕,移动光标到左上角。clear 命令完成同样的工作。 |
2、修改文本
按键 | 功能 |
---|---|
Ctrl+d | 删除光标处的字符。跟delete 键的功能一样。 |
Ctrl+t | 光标位置的字符和光标前面的字符互换位置。 |
Alt-u | 把从光标位置到字尾的字符转换成大写字母。 |
Alt-l | 把从光标位置到字尾的字符转换成小写字母 |
3、剪切和粘贴文本
按键 | 功能 |
---|---|
Ctrl-k | 剪切从光标位置到行尾的文本。 |
Ctrl-u | 剪切从光标位置到行首的文本。 |
Alt-d | 剪切从光标位置到词尾的文本。 |
Alt-Backspace | 剪切从光标位置到词头的文本。如果光标在一个单词的开头,剪切前一个单词。 |
Ctrl-y | 把剪切环中的文本粘贴到光标位置。 |
4、自动补全
当你敲入一个命令时, 按下 tab 键,自动补全就会发生。同时按下两次tab
键会显示所以满足自动补全的名称。
5、搜索历史命令
history //显示所有你输入过的命令
//找到历史命令中出现过的某些命令
history | grep /usr/bin
//展开搜索历史中的某一行
!233 //233表示行号
2
3
4
5
6
常见历史命令列表
按键 | 功能 |
---|---|
Ctrl-p | 移动到上一个历史条目。类似于上箭头按键。 |
Ctrl-n | 移动到下一个历史条目。类似于下箭头按键。 |
Alt-< | 移动到历史列表开头。 |
Alt-> | 移动到历史列表结尾,即当前命令行。 |
Ctrl-r | 反向递增搜索。从当前命令行开始,向上递增搜索。 |
Alt-p | 反向搜索,不是递增顺序。输入要查找的字符串,然后按下 Enter,执行搜索。 |
Alt-n | 向前搜索,非递增顺序。 |
Ctrl-o | 执行历史列表中的当前项,并移到下一个。如果你想要执行历史列表中一系列的命 令,这很方便。 |
6、历史命令展开
序列 | 功能 |
---|---|
!! | 重复最后一次执行的命令。可能按下上箭头按键和 enter 键更容易些。 |
!number | 重复历史列表中第 number 行的命令。 |
!string | 重复最近历史列表中,以这个字符串开头的命令。 |
!?string | 重复最近历史列表中,包含这个字符串的命令。 |
# 7、权限
• id – 显示用户身份号
• chmod – 更改文件模式
• umask – 设置默认的文件权限
• su – 以另一个用户的身份和组ID来运行 shell
• sudo – 以另一个用户的身份来执行命令
• chown – 更改文件所有者
• chgrp – 更改文件组所有权
• passwd – 更改用户密码
2
3
4
5
6
7
8
9
1、读取、写入和执行
>foo.txt?//创建foo.txt
ls -l foo.txt //查看文件信息
-rw-r--r-- 1 root root 0 Dec 25 14:52 foo.txt
2
3
4
上面的最后一行代码的前十个字符是文件的属性。第一个字符表明文件类型,剩下的9个字符叫做文件模式,代表文件所有者,和其他人的读、写、执行权限。
下面是常见文件类型。
属性 | 文件类型 |
---|---|
- | 普通文件 |
d | 目录 |
l | 符号链接。注意对于符号链接文件,剩余的文件属性总是"rwxrwxrwx",而且都是 虚拟 值。真正的文件属性是指符号链接所指向的文件的属性。 |
c | 字符设备文件。这种文件类型是指按照字节流,来处理数据的设备。 比如说终端机,或者 调制解调器 |
b | 块设备文件。这种文件类型是指按照数据块,来处理数据的设备,例如一个硬盘,或者 C D-ROM 盘。 |
2、chmod-更改文件模式
更改文件或目录的模式(权限),可以利用 chmod 命令。**只有文件的所有者或者超级用户才能更改文件或目录的模式。**chmod 命令支持两种不同的方法来改变文件模式:八进制数字表示法,或符号表示法。
八进制到二进制的映射有一些常见的映射关系。 7 (rwx),6 (rw-),5 (r-x),4 (r-),和 0 (---)。
**3、umask - 设置默认权限 **
当创建一个文件时,umask 命令控制着文件的默认权限。umask 命令使用八进制表示法来表达 从文件模式属性中删除一个位掩码。
umask 0000//设置默认权限,设置掩码值
2
4、su - 以其他用户身份和组 ID 运行一个 shell
如果包含-l
选项(-l可以简写为-
),那么会为指定用户启动一个需要登录的 shell。这意味着会加载此用户的 shell 环境, 并且工作目录会更改到这个用户的家目录。如果不指定用户,则默认值超级用户。
su [-[l]] [user]
su - //切换到超级管理员,需要输入密码
exit //返回到原来的shell
//使用 su 命令,也可以只执行单个命令,而不是启动一个新的可交互的 shell:把命令用单引号引起来很重要。
su -c 'command'
2
3
4
5
6
5、sudo - 以另一个用户身份执行命令
管理员能够配置 sudo 命令,从而允许一个普通用户以不同的身份(通常是超级用户),通过一种非常可控的方式 来执行命令。sudo 命令不要求超级用户的密码。 sudo 不会重新启动一个 shell,也不会加载另一个 用户的 shell 运行环境。命令不必用单引号引起来。
6、chown - 更改文件所有者和用户组
chown [owner][:[group]] file...
sudo cp myfile.txt ~tony //将文件复制到根目录下的通用目录
sudo chown tony: ~tony/myfile.txt // 把文件所有者 从 root(使用 sudo 命令的原因)改到 tony
2
3
4
chown命令的第一个参数。
参数 | 结果 |
---|---|
bob | 把文件所有者从当前属主更改为用户 bob |
bob:users | 把文件所有者改为用户 bob,文件用户组改为用户组 users。 |
:admins | 把文件用户组改为组 admins,文件所有者不变。 |
bob: | 文件所有者改为用户 bob,文件用户组改为,用户 bob 登录系统时,所属的用户组。 |
# 8、进程
• ps – 报告当前进程快照
• top – 显示任务
• jobs – 列出活跃的任务
• bg % 1 – 把一个任务放到后台执行,1为工作序号
• fg % 1 – 把一个任务放到前台执行,1为工作序号
• ctrl+c - 中断一个进程
• ctrl+z - 停止一个进程,将进程从前台移动到后台等待
• kill – 给一个进程发送信号
• killall – 杀死指定名字的进程
• shutdown – 关机或重启系统
2
3
4
5
6
7
8
9
10
11
1、查看进程
ps
ps x
ps aux //查看进程的详细情况
2
3
4
标题 | 意思 |
---|---|
TTY(Teletype) | 指进程的控制终端。"?" 表示没有控制终端。 |
STAT(state) | 揭示了进程当前状态。 R:运行。这意味着,进程正在运行或准备运行。 S:正在睡眠。 进程没有运行,而是,正在等待一个事件, 比如说,一个按键或者网络数据包。 D:不可中断睡眠。进程正在等待 I/O,比方说,一个磁盘驱动器的 I/O。 T:已停止. 已经指示进程停止运行。稍后介绍更多。 Z:一个死进程或“僵尸”进程。这是一个已经终止的子进程,但是它的父进程还没有清空它。 (父进程没有把子进程从进程表中删除) <:一个高优先级进程。这可能会授予一个进程更多重要的资源,给它更多的 CPU 时间。 进程的 这种属性叫做 niceness。具有高优先级的进程据说是不好的(less nice), 因为它占用了比 较多的 CPU 时间,这样就给其它进程留下很少时间。 N:低优先级进程。 一个低优先级进程(一个“好”进程)只有当其它高优先级进程执行之后,才 会得到处理器时间。 |
TIME | 表示 进程所消耗的 CPU 时间数量 |
USER | 用户 ID. 进程的所有者。 |
%CPU | 以百分比表示的 CPU 使用率 |
%MEM | 以百分比表示的内存使用率 |
VSZ | 虚拟内存大小 |
RSS | 进程占用的物理内存的大小,以千字节为单位。 |
START | 进程运行的起始时间。若超过24小时,则用天表示 |
2、用 top 命令动态查看进程
top 程序接受一系列从键盘输入的命令。两个最有趣的命令是 h 和 q。h,显示程序的帮助屏幕,q, 退出 top 程序。
3、将一个进程放置到后台
xlogo & //xlogo表示程序名称
jobs //列出从终端启动的任务
2
3
4、通过 kill 命令给进程发送信号
kill [-signal] PID...
kill -1 13546 //挂起
2
3
如果在命令行中没有指定信号,那么默认情况下,发送 TERM(终止)信号。kill 命令被经常 用来发送以下命令:
编号 | 名字 | 含义 |
---|---|---|
1 | HUP | 挂起。 |
2 | INT | 中断。实现和 Ctrl-c 一样的功能,由终端发送。通常,它会终止一个程序。 |
3 | QUIT | 退出 |
9 | KILL | 杀死。 |
15 | TERM | 终止。这是 kill 命令发送的默认信号。如果程序仍然“活着”,可以接受信号,那么 这个 信号终止。 |
18 | CONT | 继续。在停止一段时间后,进程恢复运行。 |
19 | STOP | 停止。这个信号导致进程停止运行,而没有终止。像 KILL 信号,它不被 发送到目标进 程,因此它不能被忽略。 |
5、通过 killall 命令给多个进程发送信号
给匹配特定程序或用户名的多个进程发送信号。和 kill 命令一样,你必须拥有超级用户权限才能给不属于你的进程发送信号。
killall [-u user] [-signal] name...
2