linux_shell笔记(一)

 

 

自由软件:更注重对软件的解放,而非价格上的免费。

人工智能:AI--artificial intelligence

 

麻省理工学院:MIT

公共许可协议:General Public License,GPL

 

POSIX: 可移植计算机操作系统接口。Portable System Interface for computer Environments

ANSI: 美国国家标准协会,American National Standards Institute

 

ACL: 访问控制列表。Access Control List

 

在文本环境下,shell 作为命令解释器,建立了用户和操作系统之间的接口。bashtcsh

shell 除了具有解释键盘命令的作用外,还是一种高级编程语言。shell 命令可以组织在一个文件中供以后执行,shell 脚本,批处理文件

 

shell 处理命令时可以使用对shell 具有特殊意义的字符来构造模式。这种特殊字符称为通配符。模式称为模糊文件引用。

 

输入输出都是设备无关的,可被重定向

 

shell 可以作为一种编程语言来使用。因为是一解释器 所以不能对为它编写的程序进行编译,而是每次重磁盘加载这些程序时,对他进行解释。Shell 函数

 

Job Control :作业控制,允许用户同时运行多个作业,并且根据需求可将前后台的作业进行切换。

 

Linux 包括很多工具程序,这些程序通常被称为命令,可以提供用户普通需求的功能。

 

管道(pipe )和过滤器(filter )管道是可以将程序的输出作为另一个程序的输入。过滤器,作为管道的一种特殊形式,对输入数据流处理以后得到输出数据流。

 

X window 系统(也称为X ) 的一部分是由MIT 的研究人员开发的,这位linux 中的图形用户界面(Graphical User Interface GUI )奠定了基础。X 是一种跨网络协议。桌面管理器 窗口管理器,GNOMEKDE 是比较流行的桌面控制器

 

bison 工具生成的解析代码使得编译器的开发工作变得容易。

make 工具和GNU 中进行的自动配置的configure 工具使得复杂项目的开发管理变得容易。

 

显示 TERM 变量

> echo $TERM

显示 PATH 变量

> echo $PATH

回到 home 目录

> cd ~

terry@terry-pc:~$

用户名 系统名:路径名 $

 

显示 PS1 变量 (设置用户提示符格式如:‘ terry@terry-pc:~$ ’

> echo $PS1

> echo $PS2

 

通过网络登录: telnet (不安全),显示文本的方式发送登录时的用户名和密码, ssh (安全) 将所有的信息进行加密发送。

> ssh terry-pc

 

工作在文本界面下, shell 将作为命令解释器运行。由 shell 来显示提示符,当输入命令后, shell 执行该命令并显示另一个提示符

 

查询系统正在运行的工具或命令

> ps

> pstree

> ps -elf

 

>ps

>xclock

CONTROL+Z ( 程序挂起键,停止程序的作业 ) 挂起 xclock 进程

查看当前作业

>jobs

将作业转为后台执行

>bg %1

查看当前运行命令

>ps

将作业 1 转为前台执行

>fg %1

CONTROL+C 杀死当前进程(前台作业相关的 xclock ,该命令向正在运行的程序和 shell 发送终端中断信号,效果与运行的具体程序有关)

>jobs

后台运行 xclock

>xclock &

>ps

杀死 xclock 进程( ps 查看进程 ID 号)

>kill 11701

 

>jobs

>xclock

CONTORL+Z

杀死标号 1 作业

>kill -KILL %1

 

>jobs

>xclock

CONTORL+Z

杀死标号 1 作业

>kill %1

上述两种方式的区别在于:第一种利用 kill 发送信号 - KILL ,而第儿种采用默认的 kill 发送的是- TERM 信号,- KILL 信号对于任何运行的程序都不能突略

 

shell 输入命令模式下 COUTROL W 删除单词 COUTROL U 删除整行

显示所有终端参数

>stty -a

将字符擦除 和 行删除设置为默认值 (erase & kill)

>stty ek

 

按下方向键中的 向上 向下键可以得到以前输入的命令,然后 Return 可再次运行该命令。

 

用户可以通过 man info 工具获得 man 页(用户手册)和 info 页内容

 

GNU 工具都有 – help 选项,用来显示工具的一些信息

>cat –help

通过管道用 less 分页程序进行分屏显示。

>ls –help | less

 

man 工具用于显示系统文档中的 man 页内容。

列出 who man 页内容。

>man who

显示登录用户信息

>who -a

 

清除屏幕显示内容。

>clear

 

less 使得用户可以分屏浏览一个文件。当以这种方式显示手册页时, less 工具将在显示完一屏之后,在屏幕底部显示提示符 ':' ,并等待键盘输入,按下 SPACE 键可以显示下一屏的文本信息;按下 h 键可显示 less 命令列表,按下 q 键就退出 less 文本显示并返回 shell 提示符。用 man 显示命令 man 页的时候 man 工具通过分页程序(通常是 less )自动发送输出结果。

 

FHS Filesystem Hierarchy Standard 文件系统层次标准。

linux 系统的手册页和 man 页分为 10 个部分,每个部分描述了相关工具的使用方法。

1 :用户命令

2 :系统调用

3 :子程序

4 :设备

5 :文件格式

6 :游戏

7 :其他

8 :系统管理

9 :本地

10 :最新

默认显示的手册页中最早出现的相关内容。

>man write

显示第 2 部分中的 write 工具对应页内容。

>man 2 write

可以利用- a 选项浏览相关主题的所有 man 页,通过 q 键转到下一部分

浏览 write 所有的 man 页内容。

>man -a write

 

man 工具显示非 GNU 工具的信息经常是唯一的。 Info 显示的非 GNU 工具的信息通常是 man 页内容的副本,与 man 相比 info 可显示 GNU 工具更完整的最新信息。

 

得到 sleep info 页内容。

>info sleep

info 页中如果 行最左边利用*作为菜单项的开始,其后为菜单项名称,每个菜单项可以链接到描述该菜单项的 info 页。将光标移动到菜单项上并 RETURN 跳到描述该菜单项目的页。 p 得到前一个节点, d 可返回到初始菜单页面。

 

CONTROL D 组合键,或者在 shell 提示符下 利用 exit 命令即可从字符界面退出。

 

按下 CONTROL ALT 和要浏览控制台对应的功能键即可在控制台之间切换。

我们称第一次启动时( CONTROL ALT F1 )调用的控制台为系统控制台。

 

修改密码

>passwd

 

 

 

 

 

 

 

在命令行下的工作过程就是使用 shell 的过程。

关机

>shutdown -P 0

 

最好不要将特殊字符作为文件名中的字符,如果要将特殊字符作为普通字符来使用,需要对他们进行转义:反斜杠,‘ /*/*’ 对‘ **’ 的转义。‘ //’ 对‘ /’ 的转义;单引号,‘ This is a special character:>’ 其中的普通字符仍将被视为普通字符,而特殊字符将被解释为普通字符。

 

输入下面命令(试图用单引号对控制字符进行转义),由于含有‘ CONTROL U’ (删除行) , 将使得命令在输入过程中被整行删除。

>echo 'xxxxxxxxCONTROL+U'

利用 'CONTROL+V' 对控制字符进行转义:

>echo xxxxxxxxCONTROL+V CONTROL+U

echo 输出通过管道将其作为 od 的输入,然后 od 用八进制显示。

>echo xxxxxxxxCONTROL+V CONTROL U od -c

 

linux 优点是它的成千上万的工具可以完成许多功能,在使用 linux 时将一直以直接 ( 通过命令行 ) 或间接(通过图标和菜单)的方式使用这些工具。

 

显示当前目录下的所有文件列表

>ls

显示文本文件 practice 内容

>cat practice

显示文件 example.c 标准输入 ( 需要利用 CTRL+D 表征 EOF 结束标准输入的显示 ) 和 文件 example2.c

>cat example.c – example2.c

删除 practice 文件

>rm practice

显示当前目录下的所有文件列表

>ls

显示文本文件 practice 内容(由于上面命令将该文件删除,所以这行命令将提示该文件不存在)。

>cat practice

 

复制当前目录下 example.c 到 当前目录下 example2.c

>cp example.c example2.c

采用交互式删除 example2.c (将询问是否删除 y 删除 n 不删除)--创建别名并保存到初始文件中,那么以后运行 rm 时均采用交互方式。

>rm -i example2.c

 

less more 分屏显示文件:分页程序, less 到文件末尾处,显示 EOF end of file )信息等待输入 q 来返回到 shell more 直接退出到 shell

>more example.c

>less example.c

 

文件名补齐:在命令行上的命令之后输入文件名的一个或几个字符,再按 TAB 键, shell 将尽可能的补全文件名。若文件名没有补齐(多个可匹配文件存在时,部分补齐)再按 TAB 键将显示完整的可补齐文件名列表。

 

显示正在使用的系统名

>hostname

 

cp :文件复制,可对任何文件进行复制,文本文件和程序的可执行文件等。

>ls

>cp example.c example.c.copy

>ls

如果 cp 命令的目标文件是一个已经存在的文件,执行结果会重写目标文件。重写时没有警告信息,- i 选项交互方式执行 cp ,这种情况下将提示重写警告。

>rm example.c.copy

复制 example.c example.c.copy

>cp example.c example.c.copy

直接重写

>cp example.c example.c.copy

提示是否重写?

>cp -i example.c example.c.copy

 

cp 命令用来对文件进行备份,副本命名可以在后加 '. 日期 '

 

 

mv :可以对文件重命名,与 cp 命令一样, mv 也会覆盖文件,也有‘- i’ 选现进行交互式操作。

>ls

>mv example.c example.c.mv

>ls

>mv example.c.mv example.c

 

 

lpr: 打印文件

使用默认的打印机打印文件

>lpr example.c

使用打印机 mailroom 打印文件

>lpr -Pmailroom example.c

>lpr -Pmailroom example.c example.sh

查看打印作业

>lpq

删除作业号 86 的打印作业

>lprm 86

 

grep: global regular expression print ,全局正则表达式及打印)查找字符串。在一个或多个文件中搜索是否包含某给定字符串。只是显示包含查找字符串的文件行,并不修改搜索出的文件。

>cat example.c

example.c 中搜索含有 'u' 字符串的文件行。

>grep 'u' example.c

example.c 中单词匹配搜索含有 'return' 字符串的文件行,结果输出到当前默认输出文件(默认控制终端显示设备)。

>grep -w 'return' example.c

查找并显示行号。

>grep -n -w 'return' example.c

显示以 'example' 为文件名起始字符串的文件列表

>ls example*

example.c 中搜索含有 'u' 字符串的文件行。输出被重定向到文件 example.gerp ,即结果将被输出到 example.grep 文件中,如果该文件不存在将被创建,存在将被重写。 '&' 表示该命令将在后台执行。

>grep -w 'return' example.c > example.grep &

>ls example*

 

head: 显示文件的前 10 行信息,可以帮助我们回忆起文件的内容。 '-' 和数字可指定显示的行数。

>cat example.c

显示文件的前 10

>head example.c

显示文件的前 3 (参数指定)行

>head -3 example.c

 

 

tail: 显示文件尾部。默认显示文件的最后 10 行,利用 '-' 和数字可以指定显示的行数。

显示文件的最后 10 (默认)行

>tail example.c

显示最后 4 (参数指定)行

>tail -4 example.c

监视逐渐增长的文件 logfile 的增加行的内容。

>tail -f logfile

 

sort: 按顺序显示文件的内容。并不改变文件内容。

>cat example.c

按照顺序显示文件的内容 ...

>sort example.c

选项 u 使得每行显示都是唯一的,没有重复

>cat example.c

 

uniq : 忽略文件中的重复行,不会改变原文件的内容。

>cat example.c

>unqi example.c

 

diff: 比较两个文件,显示两者所有的不同之处,不该变任何一个文件的内容。对比较两个版本的源代码很有帮助 , 选项‘- u’ unified output format , 统一输出格式),执行结果将首先说明要比较的两个文件,其中一个用正号表示,一个用负号表示。 @@ 中间的数字表明了块在两个文件中开始的行号和后续的行数。

>diff -u example.c example.sh

 

file :测试文件内容

不通过打开文件查看内容的情况下,直接获得 linux 系统中任何文件的内容信息。

>file example.c

>file example.sh

>file example.c example.sh

 

|( 管道 ): 实现进程间的通信,进程在 linux 中是指某个命令的执行,进程间通信是 linux 的特点之一。管道(在命令行上用竖线‘|’表示)为这种通信的最简单方式。管道接收一个工具的输出并将其作为另一个工具的输入。管道是将一个进程的标准输出重定向为另一个进程的标准输入。

Cat 显示 example.c 输出到标准输出,管道的存在使得其标准输出被重定向到 head 命令的标准输入,所以 head 工具显示其标准输入的文件( cat 的标准输出被重定向到该标准输入)第一行内容到其标准输出(打印到屏幕)上。通过管道显示程序输出的前 1 行。

>cat example.c | head -1

通过管道打印程序的输出。

>tail example.c | lpr

>cat -n example.c > example.c.cp

'-n' 选项将输出列出行号。

 

echo: 显示文本。可复制其后跟的任何内容,并输出到标准输出上。复制自身参数并输出到标准输出上。

在标准输出上显示‘ Hi’

>echo Hi

在标准输出上显示 'star:*'

>echo star:*

在标准输出上显示‘ star: 当前目录下所有文件列表’。注意于上一个命令行的区别

>echo star: *

利用管道向文件 'example.echo' 写入字符串 'example.echo'

>echo example.echo > example.echo

 

 

显示当前登录用户主目录。

>echo ~

显示 PATH 包含路径

>echo $PATH

显示当前目录下所有文件列表

>echo *

 

利用管道将显示的控制字符 CONTROL M (显示的 ^M 是利用 CONTROL V CONTROL M 进行转义)转成 8 进制形式输出到 od 的标准输出上

>echo ^M | od -c

 

cat 为显示文本文件(参数给定文件名)内容, echo 为显示输入的参数(参数给定文件名的话则显示文件名本身而不是内容)注意两者之间的区别。

在标准输出上显示字符串 'example.c'

>echo example.c

在标准输出上显示文件 example.c 的内容。

>cat example.c

 

date :显示日期和时间

 

script :记录 linux 会话信息,该工具可记录登录会话的部分或全部信息,如输入和系统的响应。只对基于文本的设备有效,如终端或终端模拟器。默认情况下捕捉的内容被保存到 typescript 文件中,可参数指定文件命, -a 选项表示以追加方式写入文件,否则会重写已经存在的文件。

开始 script 记录会话到文件 example.script

>script example.script

>date

>ls -l example.*

>file example.*

>echo *

>apropos mtools

>w

>who

退出 script 记录会话。

>exit

>cat example.script

如果需要利用编辑器( vim emacs 或其他编辑器)编辑上面得到的文件,需要利用 dos2uinx 将文件中每行末尾的 ^M( 回车符 /r) 去掉。

 

unix2dos: linux 文件转换为 windows 格式,

将文件转换为 dos 格式,不带选项将直接重写原文件。

>unix2dos example.script

dos2unix: dos 格式文件转换为 linux 格式。

 

tr 也可实现 dos 格式的文本文件向 linux 格式的转换。

产生文件副本时通过 -d 选项删除了其中的回车符(‘ /r’

>cat example.script | tr -d '/r' >example.scriptdos

 

bzip2: 压缩文件,通过分析和有效记录文件内容的方法来压缩文件。

选项 '-k' 保留原来文件,如果没有该选项者默认会删除原有文件; '-v' verbose )显示节省空间的百分比;‘ -f’ 选项强制压缩文件,当已经存在该文件的压缩包时可以利用该选项强制重写压缩包;文件被压缩后被重命名为原文件加后缀 .bz2 ,压缩文件并不改变文件的修改日期;

>bzip2 -kv example.jpg

>bzip2 -kvf example.jpg

>ls *JPG

压缩当前目录下所以以‘ JPG’ 作为文件名末尾字符的文件 ( 当然也可以在命令行输入多个要压缩的文件名,效果相同 ) ,并保留原文件,压缩结果是生成多个压缩包与每个 'JPG' 文件对应。

>bzip2 -kv *JPG

>rm *bz2

 

bunzip2 bzcat: 解压缩文件, bunzip2 可以将 bzip2 压缩的文件解压缩恢复为原来文件。 bzcat 用来显示 bzip2 压缩文件的内容,首先将压缩数据解压然后显示解压后文件的内容,和 cat 一样 bzcat 并不改变文件的内容,文件仍然以压缩包的形式存在,方便在不解压缩的情况下查看压缩包的文件内容。

>ls *JPG

>bzip2 -kv example.JPG

>bzcat example.JPG.bz2 | head -1

>rm example.JPG

>bunzip2 -k example.JPG.bz2

>bunzip2 -kf example.JPG.bz2

>rm *.bz2

 

gzip,gunzip zcat bzip2 bunzip2 bzcat 使用方式相同。不要于 zip uzip 混淆,后两个是 windows 下对归档文件进行打包和解包,将多个文件归档;而前者是将一个文件进行压缩。

 

tar: 打包和解包文件;常用来将多个文件或多个目录归档为一个 tar 文件,或将某个 tar 文件分解开。

选项 '-c'(creat 创建 ),'-v'(verbose 显示详细信息 ),'-f'(file 从文件进行读写 ),'-t'(table 列出归档文件的内容而并不解包 ) '-x'(extract 取出归档文件中的文件,解包处理 ) ;选项 '-c''-x' 在创建或解包处理过程中并不删除原有文件,这与 bzip2 bunzip2 (需要利用 '-k' 避免原文件的删除)不同。

>ls example*

将当前目录下所有的以 'example' 最为文件名开头字符的文件归档到 all.tar 归档文件中,并显示操作提示。

>tar -cvf all.tar example*

列出归档文件中的文件信息

>tar -tvf all.tar

对归档文件进行解压,如果当前目录中有文件和归档包中文件同名,该文件将被重写。可以将归档文件移到一个新的目录下解压缩,避免文件重写。

>rm *tar

>tar -cvf all.tar example*

>tar -tvf all.tar

>tar -xvf all.tar

>mkdir example

>mv all.tar example/example.tar

>cd example

>tar -xvf example.tar

>ls -l

>cd ..

递归删除目录和目录下的文件。

>rm -r example

 

利用 tar 归档多个文件到归档文件中,然后使用 bzip2 压缩归档文件;利用 bunzip2 解压压缩文件,然后利用 tar 提取归档文件。

>rm *tar *bz2

>tar -cvf example.tar example*

>bzip2 -kv example.tar

>mkdir example

>mv example.tar.bz2 example/example.tar.bz2

>cd example

>bunzip2 -kv example.tar.bz2

>tar -xvf example.tar

>ls

>cd ..

>rm -r example

>rm *tar *bz2

 

通过管道可将 bunzip2 tar 命令放在一个命令行上。利用 '-j' 选项使得 tar 直接调用 bunzip2

>tar -cvf example.tar example*

>bzip2 -v example.tar

>mkdir example

>mv example.tar.bz2 example/example.tar.bz2

>cd example

-c’ 选项使得 bunzip2 输出送到管道而不再创建文件。

>bunzip2 -c example.tar.bz2 | tar -xvf -

>ls

>mv example.tar.bz2 all.tar.bz2

>rm example*

'-j' 选项使得 tar 直接调用 bunzip2 '-z' 选项则调用 gunzip

>tar -xvjf all.tar.bz2

>ls

>cd ..

>rm -r example

 

工具 whereis apropos 用来找不知道名字或确切位置的命令。当某个工具或程序有多个副本时, which 来识别哪个副本在运行。

Which whereis 定位工具,当输入一个命令时 shell 将在一组目录中查找该名字的程序,并运行第一个找到的程序。这一组目录被称为搜索路径( PATH )。通过 which 可确定 shell 运行了程序的哪个副本;当感觉某个命令运行异常时可利用该命令来确定是哪一个程序运行异常; whereis 搜索于工具相关的文件; which 报告在搜索路径下搜索到的第一个程序; whereis 显示所有搜索到的文件 ( 可执行文件,手册页,对应源码等 )

>which tar

>whereis tar

注意 ,which whereis 只能报告在磁盘上搜索到的命令名,而不能搜索到 shell 的内置命令。在 bash 下,使用 type 内置命令可确定命令是否为内置命令。

Which 显示运行的 echo 程序路径,因为实际运行的 echo shell 内置命令,所以该显示是一个错误的路径。

>which echo

>whereis echo

>type echo

 

apropos :搜索关键字,当需要完成某个特定任务但是又不知道命令名时,可使用关键字和 apropos 工具进行搜索。 whatis apropos 类似,只是搜索完全匹配的信息,

>apropos tar

>whatis tar

>apropos who

>whatis who

 

who 列出系统上的用户,将登录到系统上的用户列出,可以确定某个用户是否再线然后利用 write 立即与该用户建立连接。

>who

>who am I

>who | grep -w 'terry'

 

finger: 列出系统上的用户,比 who 显示的内容更加丰富 . 列出信息中的设备列前面的 '*' 表示该用户阻止其他用户直接向她的终端发送消息 . finger 后跟用户名可以获得用户的更多消息 .

>finger

>finger terry

finger 搜索 terry 用户主目录下的 .plan 文件并显示其中的内容,类似的也会显示主目录下的 .project 文件的内容。

 

w: 列出系统上的用户。与 'who''finger' 不同在于显示信息的关注点不同。

Who ,显示登录用户的信息; w ,显示登录用户详细信息; finger ,显示用户的详细信息,包括他们的全名。

 

Write: 与其他用户通信,用来给一个已登录用户发送消息。两个用户利用 write 发送消息是一个双向通信

的方式。

 

CONTROL+ALT+F2 切换到第二个虚拟控制台,然后利用 root 用户名登录:

>mesg

>mesg y

>w

>write terry pts/0

hi,i am root,are you here?o

CONTROL+ALT+F7 切换到第七个虚拟控制台:

>w

>write root

hi,im here,o

以后就可以进行双向通信了,要使通信结束,双方利用 CONTROL+D(EOF) 结束通信。 Mesg 拒绝或接收其他用户由 write 发来的消息。

 

 

 

 

 

你可能感兴趣的:(linux_shell笔记(一))