学习Shell

1、什么是Shell

常用命令

  • date
  • cal
  • df——report file system disk space usage
  • free——display amount of free and used memory in the system
  • exit——退出终端

Ctrl-Alt-F1 到 Ctrl-Alt-F6 访问后台终端会话,Alt+F7返回图形桌面

2、文件系统中跳转

  • pwd - Print name of current working directory
  • cd - Change directory
  • ls - List directory contents

Linux总是只有一个单一的文件系统树,其他设备挂在到树的各个节点上。

  • cd Changes the working directory to your home directory.
  • cd -Changes the working directory to the previous working directory.
  • cd ~user_nameChanges the working directory to the home directory of user_name.

For example, cd ~bob will change the directory to the home directory of user “bob.”

3、探究操作系统

  • ls – List directory contents

  • file – Determine file type

  • less – View file contents

command -options arguments

ls常用选项

ls -a 全部输出

ls -d 目录本身

ls -F 加上指示符

ls -h 人可读格式

ls -l 长格式

ls -r 反顺序

ls -S 按文件大小排序

ls -t 按修改时间排序

less命令操作(less is more)

Command Action
Page UP or b Scroll back one page
Page Down or space Scroll forward one page
UP Arrow Scroll Up one line
Down Arrow Scrow Down one line
G Move to the end of the text file
1G or g Move to the beginning of the text file
/charaters Search forward for the next occurrence of characters
n Search forward for the next occurrence of the previous search
h Display help screen
q Quit less

4、操作文件和目录

  • cp – Copy files and directories

  • mv – Move/rename files and directories

  • mkdir – Create directories

  • rm – Remove files and directories

  • ln – Create hard and symbolic links

通配符

Wildcard Meaning
* Matches any characters
? Matches any single character
[characters] Matches any character that is a member of the set characters
[!characters] Matches any character that is not a member of the set characters
[[:class:]] Matches any character that is a member of the specified class

字符类

Character Class Meaning
[:alnum:] Matches any alphanumeric character
[:alpha:] Matches any alphabetic character
[:digit:] Matches any numeral
[:lower:] Matches any lowercase letter
[:upper:] Matches any uppercase letter
  • mkdir directory...

  • cp item1 item2

  • cp item... directory

Option Meaning
-a, --archive Copy the files and directories and all of their attributes, including ownerships and permissions. Normally, copies take on the default attributes of the user performing the copy
-i, --interactive Before overwriting an existing file, prompt the user for confirmation. If this option is not specified, cp will silently overwrite files.
-r, --recursive Recursively copy directories and their contents. This option (or the -a option) is required when copying directories.
-u, --update When copying files from one directory to another, only copy files that either don't exist, or are newer than the existing corresponding files, in the destination directory.
-v, --verbose Display informative messages as the copy is performed.
  • mv item1 item2
  • mv item... directory
  • rm item...

  先用 ls 命令来测试通配符

  • ln file link      硬链接
  • ln -s item link    符号链接

硬链接不能关联文件系统之外的文件,不能关联目录

5、使用命令

  • type command    显示命令的类别

  • which command      显示可执行程序的位置

help - 得到 shell 内建命令的帮助文档

--help - 显示用法信息

man - 显示程序手册页         【man 分章节】

apropos - 显示适当的命令  【man -k】

whatis - 显示非常简洁的命令说明

info - 显示程序 Info 条目

Command Action
? Display command help
PgUp or Backspace Display privious page
PgDn or Space Display next page
n Next - Display the next node
p Previous - Display the previous node
u Up - Display the parent node of the currently displayed node, usually a menu.
Enter Follow the hyperlink at the cursor location
q Quit

README 和其它程序文档        /usr/share/doc

别名:alias name='string'   unalias name 【在命令行中定义别名有点儿小问题。当你的 shell 会话结束时,它们会消失】

6、重定向

  • >                 重定向标准输出
  • > ls-output.txt       清空或者创建一个新文件夹
  • >>                                        重定向结果追加到文件内容后面
  • 2>               重定向标准错误
  • &>                                       来重定向标准输出和错误 【旧版本:ls -l /bin/usr > ls-output.txt 2>&1
  • 2> /dev/null         处理不需要的输出

  • cat movie.mpeg.0* > movie.mpeg      连接几个文件

  • <                                                                 重定向标准输入

  • |                                                             管道线

过滤器

  • ls /bin /usr/bin | sort | less

  • ls /bin /usr/bin | sort | uniq | less

  • ls /bin /usr/bin | sort | uniq | wc -l

  • grep pattern [file...] 找到文件中的匹配文本

  • head 打印文件的前十行

  • tail 打印文件的后十行【"-f"选项,tail 命令继续监测这个文件】

  • tee 【从标准输入读入数据,并且同时复制数据 到标准输出(允许数据继续随着管道线流动)和一个或多个文件】
 

 7、从Shell眼中看世界

字符展开:

echo *

路径名展开:

echo D*

隐藏文件路径名展开   ls -d .[!.]?*

波浪线展开:

echo ~

算术表达式展开:

$((expression))

花括号展开:

echo Number_{1..5}

最常见的应用,创建一系列的文件或目录列表。

参数展开:

echo $USER

printenv | less

命令展开:

把一个命令的输出作为一个展开模式

echo $(ls) 

ls -l $(which cp)

引用:

shell 提供了一种 叫做引用的机制,来有选择地禁止不需要的展开。

双引号:

如果你把文本放在双引号中, shell 使用的特殊字符,都失去它们的特殊含义,被当作普通字符来看待。单词分割被禁止

在双引号中,参数展开、算术表达式展开和命令替换仍然有效 

单引号:

禁止所有的展开

转义字符:

注意在单引号中,反斜杠失去它的特殊含义,它 被看作普通字符。

使用转义字符来消除文件名中一个字符的特殊含义

反斜杠除了作为转义字符外,也可以构成一种表示法,来代表某种 特殊字符

随着我们继续学习 shell,你会发现使用展开和引用的频率逐渐多起来,所以能够很好的 理解它们的工作方式很有意义。事实上,可以这样说,它们是学习 shell 的最重要的主题。

8、键盘高级操作技巧【后续再查】

光标移动命令

按键 行动
Ctrl-a 移动光标到行首。
Ctrl-e 移动光标到行尾。
Ctrl-f 光标前移一个字符;和右箭头作用一样。
Ctrl-b 光标后移一个字符;和左箭头作用一样。
Alt-f 光标前移一个字。
Alt-b 光标后移一个字。
Ctrl-l 清空屏幕,移动光标到左上角。clear 命令完成同样的工作。

修改文本

按键 行动
Ctrl-d 删除光标位置的字符。
Ctrl-t 光标位置的字符和光标前面的字符互换位置。
Alt-t 光标位置的字和其前面的字互换位置。
Alt-l 把从光标位置到字尾的字符转换成小写字母。
Alt-u 把从光标位置到字尾的字符转换成大写字母。

剪切和粘贴文本

按键 行动
Ctrl-k 剪切从光标位置到行尾的文本。
Ctrl-u 剪切从光标位置到行首的文本。
Alt-d 剪切从光标位置到词尾的文本。
Alt-Backspace 剪切从光标位置到词头的文本。如果光标在一个单词的开头,剪切前一个单词。
Ctrl-y 把剪切环中的文本粘贴到光标位置。

 

自动补全:

tab

自动补全也能对变量(如果 字的开头是一个"$")、用户名字(单词以"~"开始)、命令(如果单词是一行的第一个单词) 和主机名(如果单词的开头是"@")起作用。

按键 行动
Alt-? 显示可能的自动补全列表。在大多数系统中,你也可以完成这个通过按 两次 tab 键,这会更容易些。
Alt-* 插入所有可能的自动补全。当你想要使用多个可能的匹配项时,这个很有帮助。

 

 

利用历史命令

bash 维护着一个已经执行过的命令的历史列表。这个命令列表 被保存在你家目录下,一个叫做 .bash_history 的文件里。

history | less
history | grep /usr/bin

历史命令展开的方式,来调用“88”所代表的这一行命令:

!88

 

启动增量搜索

Ctrl-r

Ctrl-j

再次输入 Ctrl-r,来找到下一个 匹配项

Ctrl-g 或者 Ctrl-c,退出搜索

 

按键 行为
Ctrl-p 移动到上一个历史条目。类似于上箭头按键。
Ctrl-n 移动到下一个历史条目。类似于下箭头按键。
Alt-< 移动到历史列表开头。
Alt-> 移动到历史列表结尾,即当前命令行。
Ctrl-r 反向增量搜索。从当前命令行开始,向上增量搜索。
Alt-p 反向搜索,非增量搜索。(输入要查找的字符串,按下 Enter来执行搜索)。
Alt-n 向前搜索,非增量。
Ctrl-o 执行历史列表中的当前项,并移到下一个。如果你想要执行历史列表中一系列的命令,这很方便。

 

历史命令展开

序列 行为
!! 重复最后一次执行的命令。可能按下上箭头按键和 enter 键更容易些。
!number 重复历史列表中第 number 行的命令。
!string 重复最近历史列表中,以这个字符串开头的命令。
!?string 重复最近历史列表中,包含这个字符串的命令

 

9、权限

用户帐户 定义在/etc/passwd 文件里面,用户组定义在/etc/group 文件里面。

/etc/shadow 包含了关于用户密码的信息

 

文件属性:

属性 文件类型
- 一个普通文件
d 一个目录
l 一个符号链接。注意对于符号链接文件,剩余的文件属性总是"rwxrwxrwx",而且都是 虚拟值。真正的文件属性是指符号链接所指向的文件的属性。
c 一个字符设备文件。这种文件类型是指按照字节流来处理数据的设备。 比如说终端机或者调制解调器
b 一个块设备文件。这种文件类型是指按照数据块来处理数据的设备,例如一个硬盘或者 CD-ROM 盘。

权限属性:

属性 文件 目录
r 允许打开并读取文件内容。 允许列出目录中的内容,前提是目录必须设置了可执行属性(x)。
w 允许写入文件内容或截断文件。但是不允许对文件进行重命名或删除,重命名或删除是由目录的属性决定的。 允许在目录下新建、删除或重命名文件,前提是目录必须设置了可执行属性(x)。
x 允许将文件作为程序来执行,使用脚本语言编写的程序必须设置为可读才能被执行。 允许进入目录,例如:cd directory 。

 

更改文件模式——chmod

只有文件的所有者或者超级用户才 能更改文件或目录的模式

chmod 命令支持两种不同的方法来改变文件模式:八进制数字表示法或 符号表示法。

chmod 命令符号表示法

u "user"的简写,意思是文件或目录的所有者。
g 用户组。
o "others"的简写,意思是其他所有的人。
a "all"的简写,是"u", "g"和“o”三者的联合。

执行的操作可能是一个“+”字符,表示加上一个权限, 一个“-”,表示删掉一个权限,或者是一个“=”,表示只有指定的权限可用,其它所有的权限被删除。

权限由 “r”、“w”和 “x” 来指定。

 

umask

0002

先忽略掉开头的三个零,掩码中若出现一个数字1,则删除文件模式中和这个1在相同位置的属性

其中之一是 setuid 位(八进制4000),这种操作通常会应用到 一些由超级用户所拥有的程序。

第二个是 setgid 位(八进制2000),这个相似于 setuid 位,把有效用户组 ID 从真正的 用户组 ID 更改为文件所有者的组 ID。

如果设置了一个目录的 setgid 位,则目录中新创建的文件 具有这个目录用户组的所有权,而不是文件创建者所属用户组的所有权。

第三个是 sticky 位(八进制1000)。这个继承于 Unix,在 Unix 中,它可能把一个可执行文件 标志为“不可交换的”。

在 Linux 中,会忽略文件的 sticky 位,但是如果一个目录设置了 sticky 位, 那么它能阻止用户删除或重命名文件,除非用户是这个目录的所有者,或者是文件所有者,或是 超级用户。

 

chmod u+s program  授予一个程序 setuid 权限。

chmod g+s dir            授予一个目录 setgid 权限。

chmod +t dir              授予一个目录 sticky 权限

 

su [-[l]] [user]

如果包含"-l"选项,那么会为指定用户启动一个需要登录的 shell。这意味着会加载此用户的 shell 环境, 并且工作目录会更改到这个用户的家目录。

选项"-l"可以缩写为"-",这是经常用到的形式。

如果不指定用户,那么就假定是 超级用户。

 输入"exit",则返回到原来的 shell

 

su -c 'command'

使用这种模式,命令传递到一个新 shell 中执行。把命令用单引号引起来很重要,因为我们不想 命令在我们的 shell 中展开,但需要在新 shell 中展开。

 

sudo - 以另一个用户身份执行命令

su 和 sudo 之间的一个重要区别是 sudo 不会重新启动一个 shell,也不会加载另一个 用户的 shell 运行环境。

 

chown - 更改文件所有者和用户组

chown [owner][:[group]] file...

chown 命令被用来更改文件或目录的所有者和用户组。

参数 结果
bob 把文件所有者从当前属主更改为用户 bob。
bob:users 把文件所有者改为用户 bob,文件用户组改为用户组 users。
:admins 把文件用户组改为组 admins,文件所有者不变。
bob: 文件所有者改为用户 bob,文件用户组改为用户 bob 登录系统时所属的用户组。

 

chgrp - 更改用户组所有权

 

更改用户密码

passwd [user]

 

10、进程

ps命令

ps x

加上 "x" 选项(注意没有开头的 "-" 字符),告诉 ps 命令,展示所有进程,不管它们由什么 终端(如果有的话)控制。

在 TTY 一栏中出现的 "?" ,表示没有控制终端。使用这个 "x" 选项,可以 看到我们所拥有的每个进程的信息。

 

进程状态

状态 含义
R 运行中。这意味着,进程正在运行或准备运行。
S 正在睡眠。进程没有运行,而是,正在等待一个事件, 比如说,一个按键或者网络分组。
D 不可中断睡眠。进程正在等待 I/O,比方说,一个磁盘驱动器的 I/O。
T 已停止. 已经指示进程停止运行。稍后介绍更多。
Z 一个死进程或“僵尸”进程。这是一个已经终止的子进程,但是它的父进程还没有清空它。 (父进程没有把子进程从进程表中删除)
< 一个高优先级进程。这可能会授予一个进程更多重要的资源,给它更多的 CPU 时间。 进程的这种属性叫做 niceness。具有高优先级的进程据说是不好的(less nice), 因为它占用了比较多的 CPU 时间,这样就给其它进程留下很少时间。
N 低优先级进程。 一个低优先级进程(一个“nice”进程)只有当其它高优先级进程被服务了之后,才会得到处理器时间。

 

ps aux

这个选项组合,能够显示属于每个用户的进程信息。通过这些选项,我们得到 这些额外的列。

标题 含义
USER 用户 ID. 进程的所有者。
%CPU 以百分比表示的 CPU 使用率
%MEM 以百分比表示的内存使用率
VSZ 虚拟内存大小
RSS 进程占用的物理内存的大小,以千字节为单位。
START 进程启动的时间。若它的值超过24小时,则用天表示。

 

top命令

top

top 程序以进程活动顺序显示连续更新的系统进程列表。

行号 字段 意义
1 top 程序名。
  14:59:20 当前时间。
  up 6:30 这是正常运行时间。它是计算机从上次启动到现在所运行的时间。 在这个例子里,系统已经运行了六个半小时。
  2 users 有两个用户登录系统。
  load average: 加载平均值是指,等待运行的进程数目,也就是说,处于可以运行状态并共享 CPU 的进程个数。 这里展示了三个数值,每个数值对应不同的时间段。第一个是最后60秒的平均值, 下一个是前5分钟的平均值,最后一个是前15分钟的平均值。若平均值低于1.0,则指示计算机 工作不忙碌。
2 Tasks: 总结了进程数目和这些进程的各种状态。
3 Cpu(s): 这一行描述了 CPU 正在进行的活动的特性。
  0.7%us 0.7% 的 CPU 被用于用户进程。这意味着进程在内核之外。
  1.0%sy 1.0%的 CPU 时间被用于系统(内核)进程。
  0.0%ni 0.0%的 CPU 时间被用于"nice"(低优先级)进程。
  98.3%id 98.3%的 CPU 时间是空闲的。
  0.0%wa 0.0%的 CPU 时间来等待 I/O。
4 Mem: 展示物理内存的使用情况。
5 Swap: 展示交换分区(虚拟内存)的使用情况。

两个最有趣的命令是 h 和 q。h,显示程序的帮助屏幕,q, 退出 top 程序。

 

把命令放到后台运行

xlogo &

jobs 【查看任务】

 

 

进程返回前台

fg %1

输入 Ctrl-c 来终止 xlogo 程序

 

停止一个进程

xlogo

 Ctrl-z

如果我们从命令行启动一个图形程序,但是忘了在命令后加字符 “&”, 将一个进程从前台移动到后台也是很方便的。

信号

kill PID/jobspec

在使用 Ctrl-c 的情况下,会发送一个叫做 INT(Interrupt,中断)的信号;

当使用 Ctrl-z 时,则发送一个叫做 TSTP(Terminal Stop,终端停止)的信号。

kill [-signal] PID...

如果在命令行中没有指定信号,那么默认情况下,发送 TERM(Terminate,终止)信号

编号 名字 含义
1 HUP 挂起(Hangup)。这是美好往昔的残留部分,那时候终端机通过电话线和调制解调器连接到 远端的计算机。这个信号被用来告诉程序,控制的终端机已经“挂断”。 通过关闭一个终端会话,可以展示这个信号的作用。在当前终端运行的前台程序将会收到这个信号并终止。

许多守护进程也使用这个信号,来重新初始化。这意味着,当一个守护进程收到这个信号后, 这个进程会重新启动,并且重新读取它的配置文件。Apache 网络服务器守护进程就是一个例子。

2 INT 中断。实现和 Ctrl-c 一样的功能,由终端发送。通常,它会终止一个程序。
9 KILL 杀死。这个信号很特别。尽管程序可能会选择不同的方式来处理发送给它的 信号,其中也包含忽略信号,但是 KILL 信号从不被发送到目标程序。而是内核立即终止 这个进程。当一个进程以这种方式终止的时候,它没有机会去做些“清理”工作,或者是保存工作。 因为这个原因,把 KILL 信号看作最后一招,当其它终止信号失败后,再使用它。
15 TERM 终止。这是 kill 命令发送的默认信号。如果程序仍然“活着”,可以接受信号,那么 这个它会终止。
18 CONT 继续。在一个停止信号后,这个信号会恢复进程的运行。
19 STOP 停止。这个信号导致进程停止运行,而不是终止。像 KILL 信号,它不被 发送到目标进程,因此它不能被忽略。

其他常用信号列表

编号 名字 含义
3 QUIT 退出
11 SEGV 段错误(Segmentation Violation)。如果一个程序非法使用内存,就会发送这个信号。也就是说, 程序试图写入内存,而这个内存空间是不允许此程序写入的。
20 TSTP 终端停止(Terminal Stop)。当按下 Ctrl-z 组合键后,终端发送这个信号。不像 STOP 信号, TSTP 信号由目标进程接收,且可能被忽略。
28 WINCH 改变窗口大小(Window Change)。当改变窗口大小时,系统会发送这个信号。 一些程序,像 top 和 less 程序会响应这个信号,按照新窗口的尺寸,刷新显示的内容。

 

通过 killall 命令给多个进程发送信号

killall [-u user] [-signal] name...

给匹配特定程序或用户名的多个进程发送信号。

其他与进程相关的命令

命令名 命令描述
pstree 输出一个树型结构的进程列表(processtree),这个列表展示了进程间父/子关系。
vmstat 输出一个系统资源使用快照,包括内存,交换分区和磁盘 I/O。 为了看到连续的显示结果,则在命令名后加上更新操作延时的时间(以秒为单位)。例如,“vmstat 5”。 ,按下 Ctrl-c 组合键, 终止输出。
xload 一个图形界面程序,可以画出系统负载随时间变化的图形。
tload terminal load与 xload 程序相似,但是在终端中画出图形。使用 Ctrl-c,来终止输出。

猜你喜欢

转载自www.cnblogs.com/songdechiu/p/9537485.html