linux查漏补缺

查漏补缺,打好基础

一、linux系统目录

img

/bin:binaries二进制文件的缩写,里面都是二进制文件,且都是普通用户可以使用的命令

/boot:引导程序,内核存放的目录

/sbin:与bin类似,但是里面存放的都是超级(root)用户可以使用的命令

/lib:根目录下所有程序所需的共享库

/dev:设备文件目录(Linux中设备以文件形式存在,实体设备以设备文件的形式被Linux得知,并通过设备驱动被linux使用)

/home:此目录下存放所有普通用户的主目录,一般每个用户都在/home下有一个子目录,目录名为用户名

/root:root用户的主目录

/etc:全局的配置文件存放目录,当程序在用户主目录下时,会将配置文件在用户主目录下生成,系统也会优先去用户主目录下加载配置,若没有再去/etc下加载。

/opt:optional的简称,可以将自定义软件包或第三方软件安装在此目录下

/mnt:临时挂载目录,用于挂载存储设备的,比如磁盘光驱网络文件系统等,例如WSL2的目录/mnt/c就是我们Windows下的c盘。

/media:用于挂载媒体设备,比如u盘等。

/proc:这是一个虚拟文件系统,以文件系统目录和文件形式,提供一个指向内核数据结构的接口,通过它能够查看和改变各种系统属性,详细信息可以参考这个链接 /proc目录介绍

/sys:该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。与/dev相似却不同,/sys是更偏内核方面的。

/tmp:存放临时文件,定期清理。

/var:variable的缩写,/var 包括系统运行时要改变的数据。var目录存在的目的是把usr目录在运行过程中需要更改的文件或者临时生成的文件及目录提取出来,由此可以使usr目录挂载为只读的方式。隐含要求var目录必须挂载为可以读写的方式。

/run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。/var/run是个指向/run的链接。

/usr:usr不是user,而是unix System resources(系统资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于C:/windows 目录。

/usr下比较重要的几个目录:

/usr/bin:与/bin类似,也是存放二进制文件命令,但是/bin下一般为系统自带的,/usr/bin一般为用户后来安装的

/usr/sbin:root用户的命令

/usr/include:存放c程序的头文件

/usr/local:用户的程序目录,相当于C:/windows:Program Files。/usr/local下也有/bin/lib /sbin等。

比较一下/bin /usr/bin /usr/local/bin

  • /bin 放置系统的关键程序,比如 ls cat ,对于“关键”的定义,不同的发行版会有不同的理解;
  • /usr/bin 放置发行版管理的程序,比如 Ubuntu 自带 md5sum ,这个 binary 就会在这个目录下;
  • /usr/local/bin 放置用户自己的程序,比如你编译了一个 gcc,那么 gcc 这个可执行 binary 应该在这个目录下;

二、环境变量

一、环境变量文件介绍

Linux 中环境变量包括系统级和用户级,系统级的环境变量是每个登录到系统的用户都要读取的系统变量,而用户级的环境变量则是该用户使用系统时加载的环境变量,所以管理环境变量的文件也分为系统级和用户级的。

二、Linux 的变量种类

按变量的生存周期来划分,Linux 变量可分为两类:

  1. 永久的:需要修改配置文件,变量永久生效

  2. 临时的:使用 export 命令声明即可,变量在关闭 shell 时失效

三、Linux 环境变量文件

linux 变量文件有 / etc/environment 或 /etc/profile 或 /.profile 或 /etc/bash.bashrc 或 ~/.bashrc, 以及/.bash_profile(一般是用户在自己目录下新建的),~/.bash_logout.

系统级:

1./etc/environment: 是系统在登录时读取的第一个文件,该文件设置的是整个系统的环境,只要启动系统就会读取该文件,用于为所有进程设置环境变量。系统使用此文件时并不是执行此文件中的命令,而是根据而是根据 KEY=VALUE 模式的代码,对 KEY 赋值以 VALUE,因此文件中如果要定义 PATH 环境变量,只需加入一行形如 PATH=$PATH:/xxx/bin 的代码即可

2./etc/profile: 此文件是系统登录时执行的第二个文件。 为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。并从 / etc/profile.d 目录的配置文件中搜集 shell 的设置。(/etc/profile 可以用于设定针对全系统所有用户的环境变量,环境变量周期是永久性)

3./etc/bashrc: 是针对所有用户的 bash 初始化文件,在此中设定的环境变量将应用于所有用户的 shell 中,此文件会在用户每次打开 shell 时执行一次。(即每次新开一个终端,都会执行 / etc/bashrc)。

用户级(这些文件处于家目录下):

  1. ~/.profile: 对应当前登录用户的 profile 文件,用于定制当前用户的个人工作环境 (变量是永久性),每个用户都可使用该文件输入专用于自己使用的 shell 信息, 当用户登录时, 该文件仅仅执行一次! 默认情况下, 他设置一些环境变量, 执行用户的. bashrc 文件。这里是推荐放置个人设置的地方

2./.bashrc: 该文件包含专用于你的 bash shell 的 bash 信息,当登录时以及每次打开新的 shell 时,该文件被读取。(/.bashrc 只针对当前用户,变量的生命周期是永久的)

不推荐放到这儿,因为每开一个 shell,这个文件会读取一次,效率肯定有影响。

3./.bash_profile or ~./bash_login:_**/.bash_profile 是交互式 login 方式进入 bash 运行的,/.bashrc 是交互式 non-login 方式进入 bash 运行的通常二者设置大致相同,所以通常前者会调用后者**_。每个用户都可使用该文件输入专用于自己使用的 shell 信息,当用户登录时,该文件仅仅执行一次。默认情况下,他设置一些环境变量,执行用户的. bashrc 文件。(如果/ 目录下没有. bash_profile 则新建立一个)这里是推荐放置个人设置的地方

当一个 shell 关闭时,在 bash_profile 中定义的系统变量则会失效。因此,每打开一个新的 shell 时都要运行一次 source bash_profile. 而且针对当前用户。

4.~/.pam_environment: 用户级的环境变量设置文件,没有做测试,不知道管不管用。

5./.bash_logout: 当每次退出系统(退出 bash shell)时,执行该文件。另外,/etc/profile 中设定的变量 (全局) 的可以作用于任何用户, 而/.bashrc 等中设定的变量 (局部) 只能继承 /etc/profile 中的变量, 他们是 “父子” 关系。

四、Linux 环境变量文件执行顺序

  1. 在登录 Linux 时要执行文件的过程如下:

在刚登录 Linux 时,

首先启动 /etc/profile 文件,

然后再启动用户目录下的 ~/.bash_profile、 ~/.bash_login 或 ~/.profile 文件中的其中一个,用户主目录下文件的执行的顺序为:

          ~/.bash_profile -> ~/.bash_login -> ~/.profile。

如果 ~/.bash_profile 文件存在的话,一般还会执行 ~/.bashrc 文件。

因为在 ~/.bash_profile 文件中一般会有下面的代码:

1
2
3
if [ -f ~/.bashrc ] ; then
. ./bashrc
fi

~/.bashrc 中,一般还会有以下代码:

1
2
3
if [ -f /etc/bashrc ] ; then
. /etc/bashrc
fi

所以,~/.bashrc 会调用 /etc/bashrc 文件。最后,在退出 shell 时,还会执行 ~/.bash_logout 文件。

执行顺序为: /etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc -> /etc/bashrc -> ~/.bash_logout

/etc/profile 和 / etc/environment 等各种环境变量设置文件的用处

1)先将 export LANG=zh_CN 加入 / etc/profile,退出系统重新登录,登录提示显示英文。

2)先将 / etc/profile 中的 export LANG=zh_CN 删除,将 LNAG=zh_CN 加入 / etc/environment,退出系统重新登录,登录提示显示中文。

用户环境建立的过程中总是先执行 / etc/profile,然后再读取 / etc/environment。

为什么会有如上所叙的不同呢?而不是先执行 / etc/environment,后执行 / etc/profile 呢?

这是因为: /etc/environment 是设置整个系统的环境,而 / etc/profile 是设置所有用户的环境,前者与登录用户无关,后者与登录用户有关。

系统应用程序的执行与用户环境可以是无关的,但与系统环境是相关的,所以当你登录时,你看到的提示信息,如日期、时间信息的显示格式与系统环境的 LANG 是相关的,缺省 LANG=en_US,如果系统环境 LANG=zh_CN,则提示信息是中文的,否则是英文的。

对于用户的 shell 初始化而言是先执行 / etc/profile,再读取文件 / etc/environment;对整个系统而言是先执行 / etc/environment。这样理解正确吗?

登陆系统时的顺序应该是:

/etc/enviroment –> /etc/profile –>HOME/._profile_−−>HOME/.env (如果存在)

/etc/profile 是所有用户的环境变量

/etc/enviroment 是系统的环境变量

登陆系统时 shell 读取的顺序应该是:

/etc/profile ->/etc/enviroment –>HOME/._profile_−−>HOME/.env

原因应该是用户环境和系统环境的区别了,如果同一个变量在用户环境 (/etc/profile) 和系统环境 (/etc/environment) 有不同的值,那应该是以用户环境为准了。

五、Linux 中常见的环境变量及其作用

Linux 中常见的环境变量有:

1.PATH:指定命令的搜索路径

2.HOME:指定用户的主工作目录(即用户登陆到 Linux 系统中时,默认的目录)

3.HISTSIZE:指保存历史命令记录的条数。

4.LOGNAME:指当前用户的登录名。

5.HOSTNAME:指主机的名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来取得的。

6.SHELL:指当前用户用的是哪种 Shell。

7.LANG/LANGUGE:和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。

8.MAIL:指当前用户的邮件存放目录。

9.PS1:命令基本提示符,对于 root 用户是 #,对于普通用户是 $。

10.PS2:附属提示符,默认是 “>”。

备注:可以通过修改此环境变量来修改当前的命令符,比如下列命令会将提示符修改成字符串 “Hello,MyNewPrompt”。

1
PS1="Hello,My NewPrompt"

注意:上述变量的名字并不固定,如 HOSTNAME 在某些 Linux 系统中可能设置成 HOST

当然,我所列举的上述环境变量并非穷尽列出!

Linux 也提供了修改和查看环境变量的命令!下面通过几个实例来说明:

1.echo 显示某个环境变量值 echo $PATH

2.export 设置一个新的环境变量 export HELLO=”hello” (可以无引号),在 shell 的命令行下直接使用 [export 变量名 = 变量值] 定义变量,该变量只在当前的 shell(BASH) 或其子 shell(BASH)下是有效的,shell 关闭了,变量也就失效了,再打开新 shell 时就没有这个变量,需要使用的话还需要重新定义。

3.env 显示所有环境变量

4.set 显示本地定义 (系统中已经存在) 的 shell 变量以及设置 shell 变量的新变量值, 如果未指定值,则该变量值将被设为 NULL。

5.unset 清除环境变量 unset HELLO

6.readonly 设置只读环境变量 readonly HELLO , 如果使用了 readonly 命令的话,变量就不可以被修改或清除了

三、常用技巧

1.输入光标移动快捷键

  • ctrl+左右键 : 在单词之间跳转
  • ctrl+a : 跳到本行的行首
  • ctrl+e : 跳到页尾
  • Ctrl+u :删除当前光标前面的文字 (还有剪切功能)
  • ctrl+k :删除当前光标后面的文字(还有剪切功能)
  • Ctrl+L:进行清屏操作
  • Ctrl+y : 粘贴Ctrl+u或ctrl+k剪切的内容
  • Ctrl+w : 删除光标前面的单词的字符(以空格隔开的字符串)
  • Alt – d :由光标位置开始,往右删除单词,往行尾删
  • Ctrl+r : 搜索执行过的命令
  • ! + 最近执行过的命令中的某个字符 :可快速执行最近执行过的命令
  • fs -l :显示部分历史命令