Linux打开shell时读取配置文件的顺序

合集下载

linuxsh命令详解

linuxsh命令详解

linux sh命令详解linux sh命令时linux下的一个命令,那么它是用来干吗的呢?下面由店铺为大家整理了linux sh命令的相关知识,希望大家喜欢!linux sh命令sh命令是shell命令语言解释器,执行命令从标准输入读取或从一个文件中读取。

通过用户输入命令,和内核进行沟通!Bourne Again Shell (即bash)是自由软件基金会(GNU)开发的一个Shell,它是Linux 系统中一个默认的Shell。

Bash不但与Bourne Shell兼容,还继承了C Shell、Korn Shell等优点。

linux sh命令语法bash [options] [file]linux sh命令选项-c string:命令从-c后的字符串读取。

-i:实现脚本交互。

-n:进行shell脚本的语法检查。

-x:实现shell脚本逐条语句的跟踪。

linux sh命令实例使用-x选项跟踪脚本调试shell脚本,能打印出所执行的每一行命令以及当前状态:[root@AY1307311912260196fcZ satools]# sh -x check_ssh_login.sh + DEFINE=30+ cat /var/log/secure+ awk '/Failed/ {++ip[$(NF-3)]} END {for (i in ip) print i"="ip[i]}'++ cat /root/satools/black.txt+ for i in '`cat /root/satools/black.txt`'++ echo 121.42.0.16=1427 ++ awk -F= '{print $1}'+ IP=121.42.0.16++ echo 121.42.0.16=1427++ awk -F= '{print $2}'+ NUM=1427+ '[' 1427 -gt 30 ']'+ grep 121.42.0.16 /etc/hosts.deny + '[' 1 -gt 0 ']'+ echo sshd:121.42.0.16+ echo vsftpd:121.42.0.16+ for i in '`cat /root/satools/black.txt`' ++ echo 121.42.0.72=276++ awk -F= '{print $1}'+ IP=121.42.0.72++ awk -F= '{print $2}'++ echo 121.42.0.72=276+ NUM=276 + '[' 276 -gt 30 ']'+ grep 121.42.0.72 /etc/hosts.deny + '[' 1 -gt 0 ']'+ echo sshd:121.42.0.72+ echo vsftpd:121.42.0.72。

Linux引导与配置文件加载过程

Linux引导与配置文件加载过程

Linux引导及配置文件加载过程解读文章分类:操作系统??本文包括3部分内容1、 Linux的引导过程2、 Linux 的运行级别3、 /etc/inittab与/etc/rc.d/ 与/etc/rc.d/init.d的关系关键词:Linux引导过程、运行级别、inittab与 init.d 与 rc.d一、 Linux的引导过程系统加电之后,首先进行的硬件自检,然后是bootloader对系统的初始化,加载内核。

内核被加载到内存中之后,就开始执行我们的系统设置了。

一旦内核启动运行,对硬件的检测就会决定需要对哪些设备驱动程序进行初始化。

从这里开始,内核就能够挂装根文件系统(这个过程类似于Windows识别并存取C盘的过程)。

内核挂装了根文件系统,并已初始化所有的设备驱动程序和数据结构等之后,就通过启动一个叫init的用户级程序,完成引导进程。

二、运行级别(run level)Init进程是系统启动之后的第一个用户进程,所以它的pid(进程编号)始终为1。

init 进程上来首先做的事是去读取/etc/目录下 inittab文件中initdefault id值,这个值称为运行级别(run-level)。

它决定了系统启动之后运行于什么级别。

运行级别决定了系统启动的绝大部分行为和目的。

这个级别从0到 6 ,具有不同的功能。

不同的运行级定义如下:# 0 - 停机(千万别把initdefault设置为0,否则系统永远无法启动)# 1 - 单用户模式# 2 - 多用户,没有 NFS# 3 - 完全多用户模式(标准的运行级)# 4 –系统保留的# 5 - X11 (x window)# 6 - 重新启动(千万不要把initdefault 设置为6,否则将一直在重启)三、 /etc/rc.d/与/etc/rc.d/init.d的关系先解释一下init.d。

这个目录存放的是一些脚本,一般是linux以rpm包安装时设定的一些服务的启动脚本。

linuxshell之终端读写文件数据流和重定向,,《,》

linuxshell之终端读写文件数据流和重定向,,《,》

linuxshell之终端读写⽂件数据流和重定向,,《,》终端实现⽂件中数据流的读写;重定向命令列表如下:命令说明command > file将输出重定向到 file。

将终端数据写到⽂件file中command < file将输⼊重定向到 file。

将⽂件command >> file将输出以追加的⽅式重定向到 file。

n > file将⽂件描述符为 n 的⽂件重定向到 file。

n >> file将⽂件描述符为 n 的⽂件以追加的⽅式重定向到 file。

n >& m将输出⽂件 m 和 n 合并。

n <& m将输⼊⽂件 m 和 n 合并。

<< tag将开始标记 tag 和结束标记 tag 之间的内容作为输⼊。

需要注意的是⽂件描述符 0 通常是标准输⼊(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。

这⾥可以⽤于⽇志打印到⽂件;输出重定向重定向⼀般通过在命令间插⼊特定的符号来实现。

特别的,这些符号的语法如下所⽰:command1 > file1上⾯这个命令执⾏command1然后将输出的内容存⼊file1。

注意任何file1内的已经存在的内容将被新内容替代。

如果要将新内容添加在⽂件末尾,请使⽤>>操作符。

实例执⾏下⾯的 who 命令,它将命令的完整的输出重定向在⽤户⽂件中(users):$ who > users执⾏后,并没有在终端输出信息,这是因为输出已被从默认的标准输出设备(终端)重定向到指定的⽂件。

你可以使⽤ cat 命令查看⽂件内容:$ cat users_mbsetupuser console Oct 31 17:35tianqixin console Oct 31 17:35tianqixin ttys000 Dec 1 11:33输出重定向会覆盖⽂件内容,请看下⾯的例⼦:$ echo "菜鸟教程:" > users$ cat users菜鸟教程:$如果不希望⽂件内容被覆盖,可以使⽤ >> 追加到⽂件末尾,例如:$ echo "菜鸟教程:" >> users$ cat users菜鸟教程:菜鸟教程:$输⼊重定向和输出重定向⼀样,Unix 命令也可以从⽂件获取输⼊,语法为:command1 < file1这样,本来需要从键盘获取输⼊的命令会转移到⽂件读取内容。

Linux系统服务启动顺序Shell脚本

Linux系统服务启动顺序Shell脚本

Linux系统服务启动顺序Shell脚本在Linux操作系统中,有许多系统服务需要在启动时按照一定的顺序进行启动。

为了确保这些服务能够正确地依赖关系启动,我们可以使用Shell脚本来管理它们的启动顺序。

本文将介绍一种用Shell脚本来实现Linux系统服务启动顺序的方法。

一、背景介绍在Linux系统中,服务是一种在后台运行的程序,用于提供特定功能或服务。

在系统启动时,许多服务需要按照一定的顺序启动,以满足它们之间的依赖关系。

例如,数据库服务可能需要在网络服务启动之后才能正常工作。

通过Shell脚本管理服务启动顺序可以确保它们能够按照正确的依赖关系启动,避免冲突和错误。

二、Shell脚本的编写编写Shell脚本来管理服务的启动顺序需要遵循一定的规范。

下面是一种常用的方法:1. 定义服务启动顺序首先,我们需要定义每个服务的启动顺序。

可以将服务按照其依赖关系进行排序,确保依赖关系较低的服务先启动。

这样可以避免启动时的冲突和错误。

例如,假设我们有三个服务需要启动:A、B和C。

服务A不依赖于其他服务,服务B依赖于服务A,而服务C依赖于服务B。

因此,启动的顺序应为A、B、C。

2. 编写Shell脚本创建一个新的Shell脚本文件,例如`startup.sh`,并使用文本编辑器打开它。

在脚本中,先使用`#!/bin/bash`指定脚本使用的Shell解释器。

然后,按照定义的服务启动顺序,逐个启动每个服务。

下面是一个示例脚本,用于按照上述定义的服务启动顺序启动服务:```#!/bin/bash# 启动服务Aservice A start# 等待一段时间,确保服务A已经启动完成sleep 5# 启动服务Bservice B start# 等待一段时间,确保服务B已经启动完成sleep 5# 启动服务Cservice C start```在脚本中,使用`service`命令来启动每个服务。

在每个服务启动之后,可以使用`sleep`命令来等待一段时间,以确保服务已经完全启动。

linux中read的用法

linux中read的用法

linux中read的用法一、read命令的介绍Linux系统中的read命令是一个用于从标准输入设备中读取行的命令,它通常用于Shell脚本中获取用户输入的信息,例如读取用户的用户名和密码等。

它还可以用于将命令行参数读入变量。

read命令语法如下:```bashread [-options] [var]```参数说明:- `-a var`:将输入的数据按照空格分割后存入数组变量var中;- `-d delim`:指定输入结束符,如果输入的字符是delim中的字符,则read命令停止读取,否则继续读取,默认值为回车符;- `-e`:允许使用readline库中的快捷键进行输入;- `-n nchars`:最多只读取nchars个字符,然后结束读取;- `-p prompt`:在读取数据之前显示提示信息prompt;- `-r`:禁止反斜杠(\)的转义作用,即内容中的反斜杠将作为普通字符;- `-s`:静默输入,即不把读取到的数据显示在屏幕上;- `-t timeout`:设置输入的超时时间,单位为秒;- `-u fd`:从指定的文件描述符fd中读取数据,默认为0,即从标准输入设备中读取数据;- `var`:变量名,用于保存读取到的数据。

二、read命令的常见用法1. 读取用户输入我们通常在Shell脚本中使用read命令读取用户的输入,例如获取用户的用户名和密码,其语法如下:```bash#!/bin/bashread -p "请输入用户名:" user_nameread -s -p "请输入密码:" passwdecho -e "\n用户名:$user_name,密码:$passwd"```这段代码中,我们使用read -p选项指定提示信息,使用read -s选项静默输入密码,最后通过echo命令输出获取到的用户名和密码信息。

2. 读取命令行参数在Shell脚本中,我们可以使用$1、$2等变量来获取命令行参数,但是当命令行参数比较多时,这种方式就会显得比较麻烦。

sh文件用法

sh文件用法

sh文件用法
sh文件是Shell脚本文件的扩展名,它是一种可以包含命令序列的文本文件。

要运行sh文件,可以按照以下步骤进行操作:
1. 打开终端:在Linux系统中,可以通过按下Ctrl + Alt + T组合键来打开终端。

2. 切换到sh文件所在的目录:使用cd命令来导航到包含sh文件的目录。

例如,如果sh文件在/home/user/scripts目录下,可以输入以下命令切换到该目录:`cd /home/user/scripts`。

3. 赋予sh文件执行权限:在终端中,使用chmod命令赋予sh 文件执行权限。

例如,如果sh文件的文件名为script.sh,可以输入以下命令赋予其执行权限:`chmod +x script.sh`。

4. 运行sh文件:在终端中,输入以下命令来运行sh文件:`./script.sh`。

注意,在运行sh文件时,需要使用./(点表示当前目录)来指定sh文件所在的目录。

如果sh文件不在当前目录下,需要指定完整的文件路径来运行它。

以上是运行sh文件的基本步骤。

在编写和运行sh文件时,需要注意以下几点:
1. sh文件中的命令序列必须是合法的Shell命令,否则无法正常运行。

2. 在sh文件中可以使用变量、条件判断、循环等Shell脚本编程元素来构建复杂的命令序列。

3. 在运行sh文件时,需要注意环境变量、当前工作目录等因素对脚本执行的影响。

4. 为了避免脚本中的命令或变量被外部环境干扰,可以将sh文件的执行路径和环境变量设置为固定的值。

5. 在编写和调试sh脚本时,可以使用echo、printf等命令来输出调试信息,以便于排查问题。

linuxshell字符串操作详解(长度,读取,替换,截取,连接,对比,删除,位置)

linuxshell字符串操作详解(长度,读取,替换,截取,连接,对比,删除,位置)

linuxshell字符串操作详解(长度,读取,替换,截取,连接,对⽐,删除,位置)1.Linux shell 截取字符变量的前8位实现⽅法有如下⼏种:1. expr substr “$a” 1 82. echo $a|awk ‘{print substr(,1,8)}’3. echo $a|cut -c1-84. echo $5. expr $a : ‘\(.\\).*’6. echo $a|dd bs=1 count=8 2>/dev/null2.按指定的字符串截取(1)第⼀种⽅法:从左向右截取最后⼀个string后的字符串${varible##*string}从左向右截取第⼀个string后的字符串${varible#*string}从右向左截取最后⼀个string后的字符串${varible%%string*}从右向左截取第⼀个string后的字符串${varible%string*}“*”只是⼀个通配符可以不要请看下⾯的例⼦:$ MYVAR=foodforthought.jpg$ echo ${MYVAR##*fo}rthought.jpg$ echo ${MYVAR#*fo}odforthought.jpg(2)第⼆种⽅法:${varible:n1:n2}:截取变量varible从n1开始的n2个字符,组成⼀个⼦字符串。

可以根据特定字符偏移和长度,使⽤另⼀种形式的变量扩展,来选择特定⼦字符串。

试着在 bash 中输⼊以下⾏:$ EXCLAIM=cowabunga$ echo ${EXCLAIM:0:3}cow$ echo ${EXCLAIM:3:7}abunga这种形式的字符串截断⾮常简便,只需⽤冒号分开来指定起始字符和⼦字符串长度。

3.按照指定要求分割:⽐如获取后缀名ls -al | cut -d “.” -f2⼩结:shell对应字符串的处理⽅法很多,根据需求灵活选择。

在做shell批处理程序时候,经常会涉及到字符串相关操作。

Linux命令行使用技巧如何查看和管理系统进程优先级

Linux命令行使用技巧如何查看和管理系统进程优先级

Linux命令行使用技巧如何查看和管理系统进程优先级在Linux操作系统中,进程优先级是指操作系统对运行中的进程进行调度和分配资源的重要参数之一。

通过合理地设置进程优先级,能够有效地提高系统的性能和稳定性。

本文将介绍一些Linux命令行使用技巧,帮助你查看和管理系统进程优先级。

一、查看系统进程1. top命令:top命令是Linux下常用的查看系统进程的命令。

通过top命令,你可以实时地查看各个进程的运行情况、进程ID、CPU使用率等信息。

2. ps命令:ps命令也是查看系统进程的常用命令。

通过ps命令,你可以查看当前用户的进程情况、各个进程的状态、进程ID等信息。

二、了解进程优先级在Linux系统中,进程的优先级用一个范围为-20到19的数值表示,其中-20表示最高优先级,19表示最低优先级。

默认情况下,普通用户创建的进程的优先级为0,系统进程的优先级通常较高。

三、修改进程优先级1. renice命令:renice命令用于修改已经运行的进程的优先级。

通过renice命令,你可以提高或降低进程的优先级。

假设你想将进程ID为12345的进程的优先级提高到10,你可以使用以下命令:```renice 10 12345```2. nice命令:nice命令用于在启动进程时指定进程的优先级。

通过nice命令,你可以创建一个具有较高或较低优先级的进程。

假设你想在运行一个新的进程时将其优先级设置为5,你可以使用以下命令:```nice -n 5 command```其中,command表示你要运行的命令或程序。

四、管理系统进程优先级1. taskset命令:taskset命令用于将进程绑定到指定的CPU或CPU 集。

通过taskset命令,你可以管理进程的调度情况。

假设你想将进程ID为12345的进程绑定到CPU 0上,你可以使用以下命令:```taskset -p 0x1 12345```2. chrt命令:chrt命令用于修改进程的调度策略和优先级。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

之前安装Linux的一些软件时,总要修改Linux的配置文件。

当时也是一知半解。

而且,网上有些安装教程,会说,修改配置文件后要重启Linux。

但事实上是不需要重启的。

Linux安装时可能要修改的配置文件:/etc/profile、/etc/bashrc(ubuntu 没有这个文件,对应地,其有/etc/bash.bashrc文件。

我用的是ubuntu系统,所以下面将一律使用/etc/bash.bashrc来叙述)、~/.bash_profile、~/.bash_login、~/.profile、~/.bashrc。

我的ubuntu系统(版本为10.04)默认情况下,只有/etc/profile、/etc/bash.bahsrc、~/.profile、~/.bashrc这四个文件。

其他文件可以创建。

现在来简单说一下这些配置文件。

这些文件的作用
这些文件的作用有很多,比如环境变量的设定、定制符合自己风格的shell、还可以设置缩写功能,那个ll命令是 ls –alF命令的缩写。

相信大家最关心这些文件在安装软件时候的作用。

为什么要配置这些文件?配置后,要不要重启Linux才能使得生效。

要弄清这些问题。

首先要知道打开一个终端或者打开一个新shell时(注意,两者是不同的。

比如在终端里输入bash,会进入一个新shell。

此时并没有打开新终端),会读取到哪些文件。

之所以是要配置这些文件,是因为这些软件要在环境变量中添加属于自己的信息,或者新建一个属于自己的环境变量(如安装JDK时要新建一个JAVA_HOME 环境变量)。

系统会根据环境变量里的值,找到软件的一些文件的路径。

这些文件的访问顺序
测试
如果对测试过程没兴趣的,直接跳过这一步,到结论部分看结论。

分别在这个四个文件的最后,加入一个新的环境变量TESTBASH。

每一个文件都为这个环境变量加入不同的值。

如下图所示:
/etc/profile
/etc/bash.bashrc
~/.profile
~/.bashrc
都保存后,在原来这个终端输入$export(这个命令可以用来导入和查看环境变量),并没有在输出中看到这个TESTBASH。

现在输入$bash,打开一个新的shell。

再输入$export可以看到输出已经有这个环境变量了(如果在一大串输出中没有找到这个TESTBASH,那么就用命令$echo $TESTBASH)。

并且,该环境变量的值为: /etc/bash.bashrc:/home/luotuo/.bashrc。

现在打开一个新的终端。

输入$export 可以看到其结果和输入$bash命令,再输入$export一样。

只有其中两项。

现在输入$su root 切换到root用户。

再输入$export其结果是在原来的基础上加上了 /home/luotuo/.bashrc:/etc/bash.bashrc。

输入$exit退出root。

然后再输入$su –l root切换到root用户,此时输入$export看到其结果仅仅为 /etc/bash.bashrc:/etc/profile。

(这两种方式是不同的。

分别叫做non login shell和login shell。

另外,在终端输入bash打开一个新的shell也是non login )
现在是时候重启Linux了。

重启之后,在终端输入 $export ,其结果为:
已经有/etc/profile和/etc/bash.bashrc了。

此时,输入$bash打开一个新的shell 。

再输入$export .可以看到:
是在原来的基础上加入了 /etc/bash.bashrc:/home/luotuo/.bashrc
输入$exit退出这个shell(注意,此时这个终端是没有被关闭了。

因为在这个终端打开了两个shell。

一个exit只能退出一个).
此时,输入$su root切换到root用户。

然后再输入$export。

可以看到输出为:
在原来的基础上加入了/home/luotuo/.bashrc:/etc/bash.bashrc。

这个加入的顺序和前面的打开一个新shell是相反的。

现在输入$pwd,可以看到其路径为:
现在输入$exit 退出这个root。

然后输入$su –l root切换到root用户。

此时再输入$export其结果为:
现在输入$pwd,可以看到其路径为:
两者有不同的路径。

后者是转到了root用户的用户目录下,而前者还是在之前所在的目录。

结论
从测试过程可以看到。

打开一个新的shell(包括打开一个新终端和在终端上输入bash),都会重新读取 /etc/bash.bashrc 和 ~/.bashrc文件里面的内容。

而Linux启动登录时会读取/etc/profile 和~/.profile文件的内容。

所以,在测试的时候,重启登录时会读取/etc/profile和~/.profile文件的内容(此时并不读取/etc/bash.bashrc和~/.bashrc文件)。

然后再打开终端时,会去读取/etc/bash.bashrc 和 ~/.bashrc文件。

这就出现了那种结果。

使用login和non login术语来说,就是使用login 方式是会读取/etc/profile 和~/.profile文件。

使用non login方式的话,会读取/etc/bash.bashrc 和 ~/.bashrc文件的内容。

也就是说/etc/profile 和 ~/.profile文件是在login时才会读取。

所以,在不使用su命令的情况下,只有在Linux启动登录的时候才会被读取(这也就导致了有些软件安装后,要重启才能生效)。

因为我的ubuntu没有 ~/.bash_profile 和 ~/.bash_login文件。

如果有这两个文件的话,那么用login方式登录,将只读取 ~/.bash_profile 、~/.bash_login、~/.profile三个中的一个。

其读取顺序在上面的排序顺序。

说了这么多。

到讲安装软件时的修改这些文件的配置信息了。

安装软件修改这个文件,一般是为了在这个文件中添加用于那些软件的环境变量。

在这些配置文件中都可以添加环境变量。

但由于,有些文件会被读取,有些文件却不会被读取(这个上面已经说了),所以在不同文件下的配置信息的有效性或者说生效日期就有所不同了。

这也导致了在这些文件添加配置信息,要不要重启的问题。

如果是在/etc/bash.bashrc 和 ~/.bashrc文件中添加配置信息,那么打开一个新的shell,就生效了,可以用了(因为打开新的shell会读取这个两个文件)。

也可以输入$source /etc/bash.bashrc 或者$. /etc/bash.bashrc命令( .和/之间还有一个空格)来使得在本shell中,也可以生效使用。

如果是在/etc/profile 和 ~/.profile 文件中添加配置信息。

那么就只能重启了。

因为这个两个文件只会在login 下才会读取。

当然,也是可以使用$source /etc/profile命令的。

但也只能在使用过这个命令的shell才能使用。

总结
如果为了一完成配置信息就能使用,那么就不用在/etc/profile 和~/.profile文件中添加关于软件的配置信息。

而是在/etc/bash.bashrc 或者~/.bashrc 中添加,这样就能马上使用了。

欢迎您的下载,资料仅供参考!。

相关文档
最新文档