shell_2.linux基础命令

1.链接文件命令
链接文件是 Linux 文件系统的一个优势。如果需要在系统中维护同一文件的两个或多个副本,
可以使用单个物理副本加多个虚拟副本(链接)的方法代替创建多个物理副本。链接是目录中指
向文件真实位置的占位符。在 Linux 中有两种类型的文件链接

软连接

ls -l test_file
ln -s test_file slink_test_file
ls -l *test_file

硬连接

 ls -l *test_one  
$ ln test_one hlink_test_one 
$ ls -li *test_one


2.管理目录

创建
mkdir New_Dir
批量创建
mkdir -p New_Dir/SubDir/UnderDir
删除目录
$ mkdir Wrong_Dir
$ touch Wrong_Dir/newfile
$ rmdir Wrong_Dir/

查看文件类型
file .bashrc


3.查看命令

$ cat test_file

-n 选项会给所有的行加上行号:
$ cat -n test_file

-b给文本加上行号
$ cat -b test_file

more 命令
vi oracle.cnf
more oracle.cnf

tail 命令查看部分文本
tail -n 2 log_file

查看头部命令
head log_file


4.探查进程命令ps

-A         显示所有进程
-N         显示与指定参数不符的所有进程
-a         显示除控制进程(session leader )和无终端进程外的所有进程
-d         显示除控制进程外的所有进程
-e         显示所有进程
-C         cmdlist 显示包含在 cmdlist 列表中的进程
-G         grplist 显示组 ID 在 grplist 列表中的进程
-U         userlist 显示属主的用户 ID 在 userlist 列表中的进程
-g         grplist 显示会话或组 ID 在 grplist 列表中的进程
-p         pidlist 显示 PID 在 pidlist 列表中的进程
-s         sesslist 显示会话 ID 在 sesslist 列表中的进程
-t         ttylist 显示终端 ID 在 ttylist 列表中的进程
-u         userlist 显示有效用户 ID 在 userlist 列表中的进程
-F         显示更多的额外输出(相对-f 选项而言)
-O         format 显示默认的输出列以及 format 列表指定的特定列
-M         显示进程的安全信息
-c         显示进程的额外的调度器信息
-f         显示完整格式的输出
-j         显示作业信息
-l         显示长列表
-o         format 仅显示由 format 指定的列
-y         不显示进程标志
-Z         显示安全上下文信息
-H         以层级格式显示进程(显示父进程)
-n         namelist 定义要在 WCHAN 输出列中显示的值
-w         采用宽输出格式,不限宽度显示
-L         显示进程中的线程
-V         显示 ps 命令的版本号
$ ps -ef
UID:    启动该进程的用户。
PID:    进程 ID。
PPID:   父进程的 PID(如果该进程是由另一个进程启动的)。
C:      进程生命期中的 CPU 利用率。
STIME:  进程启动时的系统时间。
TTY:    进程是从哪个终端设备启动的。
TIME:   运行进程的累计 CPU 时间。
CMD:    启动的程序名称。

BSD 风格的 ps 命令选项

T         显示与当前终端关联的所有进程
a         显示与任意终端关联的所有进程
g         显示包括控制进程在内的所有进程
r         仅显示运行中的进程
x         显示所有进程,包括未分配任何终端的进程
U         userlist 显示属于 userlist 列表中某个用户 ID 所有的进程
p         pidlist 显示 PID 在 pidlist 列表中的进程
t         ttylist 显示与 ttylist 列表中的某个终端关联的进程
O         format 除了标准列,还输出由 format 指定的列
X         以寄存器格式显示数据
Z         在输出中包含安全信息
j         显示作业信息
l         采用长格式显示
o         format 仅显示由 format 指定的列
s         采用信号格式显示
u         采用基于用户的格式显示
v         采用虚拟内存格式显示
N         namelist 定义要在 WCHAN 输出列中显示的值
O         order 定义信息列的显示顺序
S         将子进程的数值统计信息(比如 CPU 和内存使用情况)汇总到父进程中
c         显示真实的命令名称(用以启动该进程的程序名称)
e         显示命令使用的环境变量
f         用层级格式来显示进程,显示哪些进程启动了哪些进程
h         不显示头信息
k         sort 指定用于排序输出的列
n         使用数值显示用户 ID、组 ID 以及 WCHAN 信息
w         为更宽的终端屏幕生成宽输出
H         将线程显示为进程
m         在进程之后显示线程
L         列出所有的格式说明符
V         显示 ps 命令的版本

top 命令显示列的含义

PID:       进程的 PID。
USER:      进程属主的用户名。
PR:        进程的优先级。
NI:        进程的谦让度。
VIRT:      进程占用的虚拟内存总量。
RES:       进程占用的物理内存总量。
SHR:       进程和其他进程共享的内存总量。
S:         进程的状态(D 代表可中断的休眠,R 代表运行,S 代表休眠,T 代表被跟踪或停止,Z 代表僵化 )。
%CPU:      进程使用的 CPU 时间比例。
%MEM:      进程使用的可用物理内存比例。
TIME+:     自进程启动到目前为止所占用的 CPU 时间总量。
COMMAND:   进程所对应的命令行名称,也就是启动的程序名。


5.结束进程

信 号         名 称         描 述
1             HUP          挂起
2             INT          中断
3             QUIT         结束运行
9             KILL         无条件终止
11            SEGV         段错误
15            TERM         尽可能终止
17            STOP         无条件停止运行,但不终止
18            TSTP         停止或暂停,但继续在后台运行
19            CONT         在 STOP 或 TSTP 之后恢复执行

6.挂载存储设备

mount 命令            
$ mount -t ext4


mount 命令提供了 4 部分信息。
(1)设备文件名
(2)设备在虚拟目录中的挂载点
(3)文件系统类型
(4)已挂载设备的访问状态

mount 命令选项

-a         挂载/etc/fstab 文件中指定的所有文件系统
-f         模拟挂载设备,但并不真正挂载
-F         和-a 选项一起使用时,同时挂载所有文件系统
-v         详细模式,显示挂载设备的每一步操作
-i         不使用/sbin/mount.filesystem 下的任何文件系统协助文件
-l         自动给 ext2、ext3、ext4 或 XFS 文件系统添加文件系统标签
-n         挂载设备,但不在/etc/mtab 已挂载设备文件中注册
-p         num 进行加密挂载时从文件描述符 num 中获得口令
-s         忽略该文件系统不支持的挂载选项
-r         将设备挂载为只读
-w         将设备挂载为可读写(默认选项)
-L         label 将设备按指定的 label 挂载
-U         uuid 将设备按指定的 uuid 挂载
-O         和-a 选项一起使用,限制其所作用的文件系统
-o         给文件系统添加特定的选项


7.使用 df 命令

$ df -t ext4 -t vfat

该命令的输出如下。
(1)设备文件位置
(2)包含多少以 1024 字节为单位的块
(3)使用了多少以 1024 字节为单位的块
(4)还有多少以 1024 字节为单位的块可用
(5)已用空间所占的百分比
(6)设备挂载点


8.数据搜索
你经常需要在大文件中查找位于文件中间部分某处的数据行。与其手动翻找整个文件,
(1)不如使用 grep 命令来帮助查找。grep 命令的格式如下:

grep [options] pattern [file]
$ grep three file1

(2)如果要进行反向搜索(输出不匹配指定模式的行),可以使用-v 选项

$ grep -v t file1

(3)如果要显示匹配指定模式的那些行的行号,可以使用-n 选项:

$ grep -n t file1

(4)如果只想知道有多少行含有匹配的模式,可以使用-c 选项:

$ grep -c t file1

(5)如果要指定多个匹配模式,可以使用-e 选项来逐个指定:

$ grep -e t -e f file1

(6)输出了包含字符串 t 或字符串 f 的所有行

$ grep [tf] file1


9.数据压缩
gzip 软件包是 GNU 项目的产物,旨在编写一个能够替代原先 Unix 中 compress 工具的免费版本。
这个软件包包括以下文件。
(1)gzip:用于压缩文件。
(2)gzcat:用于查看压缩过的文本文件的内容。
(3)gunzip:用于解压文件

$ gzip myprog

数据归档
tar 命令最开始是用于将文件写入磁带设备以作归档,但它也可以将输出写入文件,这种用法成了在 Linux 中归档数据的普遍做法。
tar 命令的格式如下。

tar function [options] object1 object2 ..

-A         --concatenate            将一个 tar 归档文件追加到另一个 tar 归档文件末尾
-c         --create                 创建新的 tar 归档文件
-d         --diff                   检查归档文件和文件系统的不同之处
           --delete                 从 tar 归档文件中删除文件
-r         --append                 将文件追加到 tar 归档文件末尾
-t         --list 列出              tar 归档文件的内容
-u         --update                 将比 tar 归档文件中已有的同名文件更新的文件追加到该归档文件
-x         --extract                从 tar 归档文件中提取文件
-C         dir                      切换到指定目录
-f         file                     将结果输出到文件(或设备)
-j                                  将输出传给 bzip2 命令进行压缩
-J                                  将输出传给 xz 命令进行压缩
-p                                  保留文件的所有权限
-v                                  在处理文件时显示文件名
-z                                  将输出传给 gzip 命令进行压缩
-Z                                  将输出传给 compress 命令进行压缩


zxvf

该命令创建了一个名为 test.tar 的归档文件,包含目录 test 和 test2 的内容

tar -cvf test.tar test/ test2/

该命令列出了(但不提取)tar 文件 test.tar 的内容。

tar -tf test.tar 

该命令从 tar 文件 test.tar 中提取内容。如果创建的时候 tar 文件含有目录结构,则在当前目录中重建该目录的整个结构。

tar -xvf test.tar

查找命令

$ which bash


10.进程列表
可以在单行中指定要依次运行的一系列命令。这可以通过命令列表来实现,只需将命令之间以分号(;)分隔即可:

$ pwd ; ls test* ; cd /etc ; pwd ; cd ; pwd ; ls my*

在上面的例子中,所有命令依次执行,没有任何问题。不过这并不是进程列表。要想成为进程列表,命令列表必须将命令放入圆括号内:

$ (pwd ; ls test* ; cd /etc ; pwd ; cd ; pwd ; ls my*)

下面这个例子先后使用了命令列表和 echo $BASH_SUBSHELL:

$ pwd ; ls test* ; cd /etc ; pwd ; cd ; pwd ; ls my* ; echo $BASH_SUBSHELL

在输出结果的最后是数字 0。这表明并未创建子 shell 来执行这些命令。如果改用进程列表,则结果就不一样了。在列表最后加入 echo $BASH_SUBSHELL:

$ (pwd ; ls test* ; cd /etc ; pwd ; cd ; pwd ; ls my* ; echo $BASH_SUBSHELL)

可以在进程列表中嵌套圆括号来创建子 shell 的子 shell:

$ (pwd ; echo $BASH_SUBSHELL)

注意: 进程列表是命令分组(command grouping)的一种。另一种命令分组是将命令放入花括号内,并在命令列表尾部以分号(;)作结。
语法为:{ command; }

使用花括号进行命令分组并不会像进程列表那样创建子 shell。


11.探究后台模式
在后台模式中运行命令可以在处理命令的同时让出 CLI,以供他用。演示后台模式的一个典型命令是 sleep。
sleep 命令会接受一个参数作为希望进程等待(睡眠)的秒数。该命令在 shell 脚本中常用于引入一段暂停时间。
命令 sleep 10 会将会话暂停 10 秒,然后返回 shell CLI 提示符:

$ sleep 10
sleep 3000&
ps -f

除了 ps 命令,也可以使用 jobs 命令来显示后台作业信息。jobs 命令能够显示当前运行在后台模式中属于你的所有进程(作业)

利用 jobs 命令的-l(小写字母 l)选项,还可以看到更多的相关信息。除了默认信息,-l选项还会显示命令的 PID。

$ jobs -l

在上面的例子中,出现了 2 秒的暂停,显示的数字 1 表明只有一个子 shell,在返回提示符之前又经历了另一个 2 秒的暂停。没什么大事。

$ (sleep 2 ; echo $BASH_SUBSHELL ; sleep 2)

进程列表置入后台会产生一个作业号和进程 ID,然后会返回提示符。不过,奇怪的是表明一级子 shell(single-level subshell)的数字 1 竟然出现在了提示符的右边。
别慌,按一下 Enter键,就会得到另一个提示符

$ (sleep 2 ; echo $BASH_SUBSHELL ; sleep 2)& 

协程
协程同时做两件事:一是在后台生成一个子 shell,二是在该子 shell 中执行命令。
要进行协程处理,可以结合使用 coproc 命令以及要在子 shell 中执行的命令:

$ coproc sleep 10 
[1] 2689 
$ 


除了会创建子 shell,协程基本上就是将命令置入后台。当输入 coproc 命令及其参数之后,你会发现后台启用了一个作业。
屏幕上会显示该后台作业号(1)以及进程 ID(2689)。
jobs 命令可以显示协程的状态

使用命令的扩展语法来自己设置名字:

$ coproc My_Job { sleep 10; }

你可以发挥才智,将协程与进程列表结合起来创建嵌套子 shell。只需将命令 coproc 放在进程列表之前即可:

$ coproc ( sleep 10; sleep 2 )
$ jobs
$ ps --forest


12.理解外部命令和内建命令
外部命令(有时也称为文件系统命令)是存在于 bash shell 之外的程序。也就是说,它并不属于 shell 程序的一部分。
外部命令程序通常位于/bin、/usr/bin、/sbin 或/usr/sbin 目录中

内建命令
与外部命令不同,内建命令无须使用子进程来执行。内建命令已经和 shell 编译成一体,作为 shell 的组成部分存在,无须借助外部程序文件来执行。

使用 history 命令
要查看最近用过的命令列表,可以使用不带任何选项的 history 命令


13.使用命令别名
alias 命令是另一个实用的 shell 内建命令

使用 alias 命令以及选项-p 可以查看当前可用的别名:

$ alias -p

可以使用 alias 命令创建自己的别名:

$ alias li='ls -i'

你可能感兴趣的:(linux)