Linux基础知识day-8

shell简介:

  shell是核心程序kernel之外的指令解析器,是一个程序,同时是一种命令语言和程序设计语言。

  shell是命令解析器,用户输入命令,它去解析,然后交给内核执行命令,内核便可以操作硬件。

变量:

  命名规则:

    以字母或者下划线开头,剩下的内容可以是字母、数字、下划线。

  变量赋值:

    [变量名]=[变量值]

    echo $[变量名]     //显示变量值

    unset [变量名]     //删除变量

  export定义的变量和普通变量的区别:

    注意:子bash中的export变量,不会被父bash继承。父bash中的export定义的变量会被子bash继承。

[[email protected] ~]# name=ldsly    //普通方式定义变量
[[email protected] ~]# echo $name    //在父bash中显示变量
ldsly
[[email protected]-3 ~]# bash        //重新打开一个子bash
[[email protected] ~]# echo $name    //显示变量,发现并不存在这个变量

[[email protected]-3 ~]# exit        //退回父bash
exit
[[email protected]-3 ~]# export name=ldsly  //使用export定义变量
[[email protected] ~]# echo $name      //在父bash中显示变量
ldsly
[[email protected]-3 ~]# bash        //打开一个子bash
[[email protected] ~]# echo $name    //在子bash中显示变量,正常显示
ldsly
[[email protected]-3 ~]#

[[email protected] ~]# export name2=y   //在子bash中继续定义变量 name2
  [[email protected] ~]# echo $name2    //子bash中显示变量
  y
  [[email protected] ~]# exit        //退回父bash
  exit
  [[email protected] ~]# echo $name2    //在父bash中显示变量


[[email protected] ~]#            //父bash中不存在变量 name2

 

命令执行的优先级:

==> alias
  ==> Compound Commands
    ==> function 
      ==> build_in
        ==> hash
          ==> $PATH
            ==> error: command not found

默认的变量存放位置:(此文件顺序为开机登陆系统时,系统加载的顺序) 

  /etc/profile

  ~/.bash_profile

  ~/.bashrc

  /etc/bashrc

各种情况下变量文件加载情况:

[[email protected] ~]# su - ldsly       //完全切换用户时,四个变量文件按顺序全部加载
Last login: Sat Jun  3 00:40:14 CST 2017 on tty1
/etc/profile
/home/ldsly/.bash_profile
/home/ldsly/.bashrc
/etc/bashrc
[[email protected]-3 ~]$ exit
logout
[[email protected]-3 ~]# su ldsly    //不完全切换时,只加载对应用户家目录下的.bashrc和系统下的 bashrc文件/home/ldsly/.bashrc
/etc/bashrc
[[email protected]-3 root]$ exit
exit
[[email protected]-3 ~]# bash    //开启子bash时,加载当前登录用户家目录下的.bashrc和系统下的bashrc文件
/root/.bashrc
/etc/bashrc
[[email protected]-3 ~]#

PATH的查看和添加:

[[email protected] ~]$ echo $PATH      //查看PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ldsly/.local/bin:/home/ldsly/bin
[[email protected]-3 ~]$ export PATH=/usr/local/nginx/sbin:$PATH    //临时添加/usr/local/nginx/sbin到PATH中
[[email protected]-3 ~]$ echo $PATH
/usr/local/nginx/sbin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ldsly/.local/bin:/home/ldsly/bin
[[email protected]-3 ~]$

  想永久生效就添加就在/etc/bashrc文件中添加export PATH=/usr/local/nginx/sbin:$PATH

元字符

  ~:家目录,可使用cd ~ 快速返回家目录

[[email protected] ~]$ pwd
/home/ldsly
[[email protected]-3 ~]$

  ``:取命令执行结果

[[email protected] ~]$ echo `ls`
Desktop Documents Downloads Music Pictures Public Templates Videos

  $():同上但是弥补了``嵌套的缺陷

[[email protected] ~]$ a=`echo `ls``       //使用``发现$a的值并不是我们要的ls的显示结果
[[email protected]-3 ~]$ echo $a
ls
[[email protected]-3 ~]$ a=$(echo `ls`)    //使用$()
[[email protected]-3 ~]$ echo $a
Desktop Documents Downloads Music Pictures Public Templates Videos
[[email protected]-3 ~]$ a=$(echo $(ls))     //全部使用$()
[[email protected]-3 ~]$ echo $a
Desktop Documents Downloads Music Pictures Public Templates Videos
[[email protected]-3 ~]$

  !:取反

[[email protected] ~]$ ls
Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos
[[email protected]-3 ~]$ ls D[!e]*
Documents:

Downloads:
[[email protected]-3 ~]$

  !:取历史命令

   57  ls
   58  history
[[email protected]-3 ~]$ !57
ls
Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos
[[email protected]-3 ~]$

  !:取最近的一次命令匹配

[[email protected] ~]$ !ls
ls /tmp/
anaconda.log         storage.log
hsperfdata_ldsly     systemd-private-51ecaa2f4af14852be58a7b018bae8fb-cups.service-DR3a4Y
hsperfdata_root      systemd-private-51ecaa2f4af14852be58a7b018bae8fb-vmtoolsd.service-qkylGu
ifcfg.log            systemd-private-b3d2522c2a1641249fba9275ac0c283a-cups.service-fCjOWS
ks-script-JUZxd9     systemd-private-b3d2522c2a1641249fba9275ac0c283a-vmtoolsd.service-DRnv3k
nginx-1.12.0.tar.gz  tracker-extract-files.0
packaging.log        tracker-extract-files.1000
program.log          yum.log
sensitive-info.log
[[email protected]-3 ~]$

  !:命令的返回值取反

[[email protected] ~]$ ls      
Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos
[[email protected]-3 ~]$ echo $?      //取上一次命令的结果返回值
0                      //0为真  非0为假,一般可理解为,上一条命令执行成功了返回0,执行失败返回非0值。范围:0-255
[[email protected]-3 ~]$ ! ls
Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos
[[email protected]-3 ~]$ echo $?
1
[[email protected]-3 ~]$

  #:注释,井号后的内容不会被执行,仅用于注释

  ^:取反的意思,跟!差不多。但还是有区别

[[email protected] ~]# ls D[^e]*
Documents:

Downloads:
[[email protected]-3 ~]#

  &:后台运行的意思

[[email protected] ~]# firefox &
[1] 5484
[[email protected]-3 ~]#

  ():在子进程中运行

[[email protected] ~]# a=1
[[email protected] ~]# echo $a
1
[[email protected]-3 ~]# (a=10;echo $a)
10
[[email protected]-3 ~]#

  =:赋值

  &&:逻辑与

  ||:逻辑或

  |:管道符

  >:重定向符

  >>:追加重定向符

  \:转义符 

  ‘‘: 硬引用,引号内所有内容当 字符串输出处理

  "" :软引用,引号内字符有自己的含义

  : :执行结果,永远为真

  *:通配符,任意字符

  

一些快捷键

  TAB键:命令补全功能,防止一些输入错误

  Ctrl+A:光标移到行首

  Ctrl+E:光标移到行尾

  Ctrl+L:清空当前屏幕

  Ctrl+U:删除光标当前位置到行首的内容

  Ctrl+K:删除光标当前位置到行尾的内容

grep命令的常用参数:

  -n:显示行号

  -o:只显示匹配的内容

  -q:静默模式,没有任何输出,可以使用echo $?来判断是否成功执行。

  -l:如果匹配成功,打印出文件名,失败不打印

  -A:匹配成功,将匹配行及其后n行一起打印出来

  -B:匹配成功,将匹配行及其前n行一起打印出来

  -C:匹配成功,将匹配行及其前后n行一起打印出来

  -c:匹配成功,只打印匹配的行数(一共匹配到多少行的数量)打印出来

  -i:忽略大小写

  -v:取反,不匹配

  -w:匹配单词(连续的字母组成的单词)

正则表达式

  正则表达式跟通配符不同,通配符是由shell解释的,正则表达式是由命令解释的。

  

  ^:行首

[[email protected] ~]# grep -n ‘root‘ /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
[[email protected]-3 ~]# grep -n ‘^root‘ /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
[[email protected]-3 ~]#

  $:行尾

[[email protected] ~]# grep -n ‘bash$‘ /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
43:ldsly:x:1000:1000:ldsly:/home/ldsly:/bin/bash
[[email protected]-3 ~]#

  []:中括号内任一字符

[[email protected] ~]# grep [bc] 1.txt
abc
abccc
a/bc
apobc
[[email protected]-3 ~]#

  [^]:中括号内每个字符取反

[[email protected] ~]# grep [^bc] 1.txt
a
abc
abccc
a/bc
apobc
[[email protected]-3 ~]#

  [a-z]:小写字母

  [A-Z]:大写字母

  [a-Z]:小写和大写字母

[[email protected] ~]# grep [A-Z] 1.txt
Abc
aBC
ABC
[[email protected]-3 ~]#

  [0-9]:数字

[[email protected] ~]# grep [0-9] 1.txt
ab2ccc
a1/bc
Abc4
aBC6
ABC7
[[email protected]-3 ~]#

  |:交替匹配|两边的任意一项

[[email protected] ~]# egrep  ‘ABC|abc‘ 1.txt
abc1
abc2
ABC1
ABC2
[[email protected]-3 ~]#
时间: 2024-10-12 08:04:13

Linux基础知识day-8的相关文章

1、linux基础知识

第一天linux基础知识 1:linux操作系统组成 linux内核+GNU工具=完整的类UNIX系统 GNU工具(GNU软件是通过GNU项目发布的软件,它是一种根据GNU软件包的README手册以及自由软件指南开发的软件,大多数GNU软件是免费分发的,但不是所有的都这样,然而,所有的GNU软件必须是自由软件.) 2:linux发行版  slackware debian  reehad  Gentoo等 3:linux哲学思想 一切皆文件(硬件也已文件的形式展现在操作系统中) 小型,单一用途程序

Linux基础知识题解答(五)

题目来自老男孩BLOG:http://oldboy.blog.51cto.com/2561410/1709569,比较适合新手,空余的时候做一下,可以巩固Linux基础知识,有不对的地方欢迎指正. (1)155729 -rw-r--r--.  1 root root   35 Oct 28 2011  oldboy 请解析上面的每一列内容 文件inode号,文件访问权限,硬链接数,文件所属用户,文件所属组,文件最后修改时间,文件名 (2)描述下硬链接和软连接的区别 1.硬链接原文件/链接文件共用

linux基础知识第一节

用户接口: 是一种独特的应用程序,能够为用户提供启动其它应用程序的的机制 cli:命令提示符,用户输入要执行的命令即可, shell: 外壳 sh ,csh ,ksh ,   bash, zsh , tcsh gui: 通过点击操作来启动应用程序 gnome,  mainframe  大型机 多用户操作系统    多终端   终端:设备,显示器,鼠标,键盘 虚拟终端 表示:/dev/tty# ctrl-alt-f(1-6) 物理终端(控制终端)console 串行终端 伪终端 /dev/pts#

Linux基础知识(2)

Linux基础知识: 一.程序管理: (1)程序的组成部分: (2)二进制程序: (3)配置文件: (4)库文件: (5)帮助文件: 二.程序包管理器: X: (1)程序的组成文件打包成一个或有限几个文件: (2)安装: (3)卸载: (4)查询: 三.安装Linux: 虚拟机安装Linux系统 需要设置计算机的CPU, 内存, IO等 四.虚拟化软件程序: vmwareworkstation和virtualbox虚拟机都可以安装系统 五.CentOS的镜像站点: http://mirrors.

第二天linux基础知识

第二天linux基础知识 1:终端(用户与主机交互必然用到的设备) 物理终端:直接接入本机的设备 虚拟终端:以软件的方法虚拟实现的终端. 图形终端:属于虚拟终端 模拟终端:图形打开的命令行或基于远程登录协议打开的终端. 查看当前终端设备命令:tty 2:交互式接口(启动终端后,在终端附加的一个交互式程序) GUI:Graphic User Interface CLI:Command Line Interface 3:SHELL(shell是linux系统的用户界面,提供了用户与内核进行交互操作的

linux基础知识题解答(九)

题目来自老男孩BLOG:http://oldboy.blog.51cto.com/2561410/1709569,比较适合新手,空余的时候做一下,可以巩固Linux基础知识,有不对的地方欢迎指正. (Linux用户权限-磁盘-网络) (1)列出 IPv4 的网络地址的分类,各分类容纳的网络数和主机数,以及前三类中的私有地址. A类:1~126,私有地址10.0.0.0~10.255.255.255 B类:128~191,私有地址172.16.0.0~172.31.255.255 C类:192~2

linux基础知识的总结

例如以下内容是我对linux基础知识的总结,由于本人在初期学习linux的时候走了不少的弯路,对于基础的掌握耗费了不少的时间,所以为了后来者对linux的基础部分有个清晰的了解,特对基础知识进行了总结,由于水平有限.难免有疏忽或者不准确的地方.希望大家可以直接指出来,我会及时改正.一切为了知识的传播.^_^ ? *********************************************************************************************

linux基础知识---用户

用户和组 一.用户和组的概念 随着计算机对多用户需求越来越多,才引入了用户和组的概念.所谓的用户就是操作系统用来标识登陆系统的.就是用户和组是实现计算机资源分配的核心要素.组:是具有相同计算机资源(主要指权限)用户的一个集合. 在计算机内核中,用户和组都是一个数字,我们称之为UID和GID.UID和GID在系统中具有唯一性.实现这个过程进行名称解析才能完成,在Linux系统中使用glib库中的系统调用来完成. 二.用户识别 识别用户通过3A(Authentication,Authorizatio

linux基础知识——————逻辑卷管理器(lvm)

*****什么是lvm:           lvm就是将几个物理的分区通过软件组合成为一块看起来是独立的大磁盘(vg),然后将这块大磁盘分成可使用的分区. 然后就可以格式化创建文件系统,最终可以挂载使用啦.   *****我们该如何创建lvm呢? 一.首先创建分区,将其id设为8e,如下图   二.然后创建pv      pv阶段有如下常用的命令 pvcreate : 将物理的分区创建为pv pvscan  : 查看磁盘里的所有pv的信息 pvdiplay :查看pv的状态 pvremove

Linux基础知识题解答(三)

题目来自老男孩BLOG:http://oldboy.blog.51cto.com/2561410/1709569,比较适合新手,空余的时候做一下,可以巩固Linux基础知识,有不对的地方欢迎指正. 1.  存放系统的二进制命令的目录是(/bin) 超级用户二进制命令的目录是(/sbin) /dev指的是什么(设备文件目录) /etc指的是什么(配置文件目录) /mnt指的是什么(文件挂载目录) /proc指的是什么(内存的映射,是系统内核和进程的虚拟文件目录) 2.  开机自动挂载设备的文件是(