Linux零碎学习

来源:互联网 发布:淘宝天下小二是真的吗 编辑:程序博客网 时间:2024/06/05 00:45

环境变量:

在Linux中,环境变量是一个很重要的概念。环境变量可以由系统、用户、Shell以及其他程序来设定。

变量就是一个可以被赋值的字符串,赋值范围包括数字、文本、文件名、设备以及其他类型的数据。

下面的例子,我们将为变量 TEST 赋值,然后使用 echo 命令输出:
$TEST="Linux Programming"
$echo $TEST
Linux Programming

注意:变量赋值时前面不能加 $ 符号,变量输出时必须要加 $ 前缀。退出 Shell 时,变量将消失。

登录系统后,Shell会有一个初始化的过程,用来设置环境变量。这个阶段,Shell会读取 /etc/profile 和 .profile 两个文件,过程如下:
Shell首先检查 /etc/profile 文件是否存在,如果存在,就读取内容,否则就跳过,但是不会报错。
然后检查你的主目录(登录目录)中是否存在 .profile 文件,如果存在,就读取内容,否则就跳过,也不会报错。

读取完上面两个文件,Shell就会出现 $ 命令提示符:
$
注意:上面是Bourne Shell的初始化过程,bash 和 ksh 在初始化过程中还会检查其他文件。
/etc/profile文件包含了通用的Shell初始化信息,由Linux管理员维护,一般用户无权修改。

但是你可以修改主目录下的 .profile 文件,增加一些“私人定制”初始化信息,包括:
设置默认终端类型和外观样式;
设置 Shell 命令查找路径,即PATH变量;


设置终端类型

一般情况下,我们使用的终端是由 login 或 getty 程序设置的,可能会不符合我们的习惯。
对于没有使用过的终端,可能会比较生疏,不习惯命令的输出样式,交互起来略显吃力。所以,一般用户会将终端设置成下面的类型:
$TERM=vt100
$
vt100 是 virtual terminate 100 的缩写。虚拟终端是一种假的终端,真正有自己的显示器和键盘的终端,会通过特殊电缆(如串口)连到计算机主机。vt100 是被绝大多数Linux系统所支持的一种虚拟终端规范,常用的还有ansi、xterm等。

设置PATH变量

在命令提示符下输入一个命令时,Shell 会根据 PATH 变量来查找该命令对应的程序,PATH变量指明了这些程序所在的路径。
一般情况下PATH变量的设置如下:
$PATH=/bin:/usr/bin$
多个路径使用冒号(:)分隔。如果用户输入的命令在PATH设置的路径下没有找到,就会报错,例如:
$hellohello: not found$

常用环境变量

下表列出了部分重要的环境变量,这些变量可以通过上面提到的方式修改。



变量描述DISPLAY用来设置将图形显示到何处。HOME当前用户的主目录。IFS内部域分隔符。LANGLANG可以让系统支持多语言。例如,将LANG设为pt_BR,则可以支持(巴西)葡萄牙语。PATH指定Shell命令的路径。PWD当前所在目录,即 cd 到的目录。RANDOM生成一个介于 0 和 32767 之间的随机数。TERM设置终端类型。TZ时区。可以是AST(大西洋标准时间)或GMT(格林尼治标准时间)等。UID以数字形式表示的当前用户ID,shell启动时会被初始化。
下面的例子中使用了部分环境变量:
$ echo $HOME/root]$ echo $DISPLAY$ echo $TERMxterm$ echo $PATH/usr/local/bin:/bin:/usr/bin:/home/amrood/bin:/usr/local/bin$


文件系统:

 常用文件管理命令

你可以通过下面的命令来管理文件:
Command Description
cat filename              查看文件内容。
cd dirname                改变所在目录。
cp file1 file2              复制文件或目录。
file filename              查看文件类型(binary, text, etc)。
find filename dir       搜索文件或目录。
head filename          显示文件的开头,与tail命令相对。
less filename           查看文件的全部内容,可以分页显示,比more命令要强大。
ls dirname                遍历目录下的文件或目录。
mkdir dirname         创建目录。
more filename         查看文件的全部内容,可以分页显示。
mv file1 file2             移动文件或重命名。
pwd                            显示用户当前所在目录。
rm filename              删除文件。
rmdir dirname          删除目录。
tail filename              显示文件的结尾,与head命令相对。
touch filename         文件不存在时创建一个空文件,存在时修改文件时间戳。
whereis filename    查看文件所在位置。
which filename        如果文件在环境变量PATH中有定义,那么显示文件位置。

df命令

管理磁盘分区时经常会使用 df (disk free) 命令,df -k 命令可以用来查看磁盘空间的使用情况(以千字节计),H是常用格式MB

挂载文件系统
MOUNT:
一般约定,/mnt 为临时挂载目录,例如挂载CD-ROM、远程网络设备、软盘等。
$ mount -t iso9660 /dev/cdrom /mnt/cdrom
可以通过 umount 命令来卸载文件系统。例如,卸载 cdrom:
$ umount /dev/cdrom

信号:

信号(signal)是Linux进程间通信的一种机制,全称为软中断信号,也被称为软中断。信号本质上是在软件层次上对硬件中断机制的一种模拟。

与其他进程间通信方式(例如管道、共享内存等)相比,信号所能传递的信息比较粗糙,只是一个整数。但正是由于传递的信息量少,信号也便于管理和使用,可以用于系统管理相关的任务,例如通知进程终结、中止或者恢复等。
每种信号用一个整型常量宏表示,以SIG开头,比如SIGCHLD、SIGINT等,它们在系统头文件<signal.h>中定义。

通过 kill -l 命令可以查看系统支持的所有信号
每种信号都会有一个默认动作。默认动作就是脚本或程序接收到该信号所做出的默认操作。常见的默认动作有终止进程、退出程序、忽略信号、重启暂停的进程等

SIGHUP  1   终端挂起或控制进程终止。当用户退出Shell时,由该进程启动的所有进程都会收到这个信号,默认动作为终止进程。
SIGINT   2  键盘中断。当用户按下<Ctrl+C>组合键时,用户终端向正在运行中的由该终端启动的程序发出此信号。默认动作为终止进程。
SIGQUIT   3   键盘退出键被按下。当用户按下<Ctrl+D>或<Ctrl+\>组合键时,用户终端向正在运行中的由该终端启动的程序发出此信号。默认动作为退出程序。
SIGFPE   8  发生致命的运算错误时发出。不仅包括浮点运算错误,还包括溢出及除数为0等所有的算法错误。默认动作为终止进程并产生core文件。
SIGKILL   9  无条件终止进程。进程接收到该信号会立即终止,不进行清理和暂存工作。该信号不能被忽略、处理和阻塞,它向系统管理员提供了可以杀死任何进程的方法。
SIGALRM   14  定时器超时,默认动作为终止进程。
SIGTERM  15  程序结束信号,可以由 kill 命令产生。与SIGKILL不同的是,SIGTERM 信号可以被阻塞和终止,以便程序在退出前可以保存工作或清理临时文件等。

kill 命令

可以通过 kill 命令发送信号,语法为:
$ kill -signal pid
signal为要发送的信号,可以是信号名称或数字;pid为接收信号的进程ID。例如:
$ kill -1 1001
将SIGHUP信号发送给进程ID为1001的程序,程序会终止执行。

又如,强制杀死ID为1001的进程:
$ kill -9 1001

捕获信号

通常情况下,直接终止进程并不是我们所希望的。例如,按下<Ctrl+C>,进程被立即终止,不会清理创建的临时文件,带来系统垃圾,也不会保存正在进行的工作,导致需要重做。

可以通过编程(C/C++)来捕获这些信号,当终止信号出现时,可以先进行清场和保存处理,再退出程序

Linux命令捕获信号

通过 trap 命令就可以捕获信号,语法为:
$ trap commands signals
commands为Linux系统命令或用户自定义命令;signals为要捕获的信号,可以为信号名称或数字。

捕获到信号后,可以有三种处理:
执行一段脚本来做一些处理工作,例如清理临时文件;
接受(恢复)信号的默认操作;
忽略当前信号。
1) 清理临时文件

脚本捕获到终止信号后一个常见的动作就是清理临时文件。例如:
$ trap "rm -f $WORKDIR/work1$$ $WORKDIR/dataout$$; exit" 2
当用户按下<Ctrl+C>后,脚本先清理临时文件 work1$$ 和 dataout$$ 再退出。

注意:exit 命令是必须的,否则脚本捕获到信号后会继续执行而不是退出。

修改上面的脚本,使接收到 SIGHUP 时进行同样的操作:
$ trap "rm $WORKDIR/work1$$ $WORKDIR/dataout$$; exit" 1 2
几点注意:
如果执行多个命令,需要将命令用引号包围;
只有脚本执行到 trap 命令时才会捕获信号;
再次接收到信号时还会执行同样的操作。

上面的脚本,执行到 trap 命令时就会替换 WORKDIR 和 $$ 的值。如果希望接收到 SIGHUP 或 SIGINT 信号时再替换其值,那么可以将命令放在单引号内,例如:
$ trap 'rm $WORKDIR/work1$$ $WORKDIR/dataout$$; exit' 1 2
2) 忽略信号

如果 trap 命令的 commands 为空,将会忽略接收到的信号,即不做任何处理,也不执行默认动作。例如:
$ trap '' 2
也可以同时忽略多个信号:
$ trap '' 1 2 3 15
注意:必须被引号包围,不能写成下面的形式:
$ trap 2
3) 恢复默认动作

如果希望改变信号的默认动作后再次恢复默认动作,那么省略 trap 命令的 commands 即可,例如:
$ trap 1 2
将恢复SIGHUP 和 SIGINT 信号的默认动作。


0 0
原创粉丝点击