浅谈Linux(二)

发表于 2019-06-01  2.13k 次阅读


环境是基于Centos 7.6 1810 版本,本章讲解基础

首先先说下shell与操作系统的关系

   shell(壳)是用户与操作系统底层(通常是内核--用来实现上层服务、命令和应用等基本操作,但用户没办法直接控制它)之间交互的中介程序,负责将用户指令、操作传递给操作系统底层,翻译成kernel可以识别的代码

   Shell一般分为:图形化ShellGUI---Graphcal User Interface)、命令行ShellCLI---Command Line Interface)在实际使用中,Linux中一般默认GUI为:GNOMEThe GUN Network Object Mode Environment ---GNU[the GNU’s Not Unix]网络对象模型环境 ),默认CLI为:BASHBourne-Again ShellBASH提示符以#$起始,#代表当前用户为root用户,$代表当前用户为普通用户

[Linuxcast@Linuixcast ~ ]$     [root@Linuixcast ~ ]#

  • 用户名           主机名     目录 提示符                                 提示符
  • 命令的组成部分:命令  参数  命令选项 <--------> Command Option Arguments
  • [root@Linuixcast ~ ]#uname -a[--all]
  • [root@Linuixcast ~ ]#firefox &
  • 在一个命令行中还可以置入多个命令,用分号将各个命令隔开.例如:
  • $ ls -F;cp -i mydata newdata
  • 也可以在几个命令行中输入一个命令,用反斜杠将一个命令行持续到下一行.
  • $ cp –i \
  • mydata \
  • newdata
  • 选项我们可以通过键盘上的Tab按键对命令或文件名进行自动补全,连续按Tab按键两次,可以列出前部的命令或以输入字符开头的命令或文件名,BASH会记录我们以往操作的命令,但不能对参数补齐;可以通过history命令查看使用过的命令,BASH可以通过以下方式调用历史记录以简化操作:
  •   !!          重复前一个命令,等同于↑键
  •   !字符   重复前一个以指定字符开头的命令
  •   !Num    按历史记录序号执行命令
  •   !?Abc    重复之前包含abc的命令
  •   !-n      重复之前的第n个命令
  • 我们可以通过 ctrl + r 来对历史记录进行搜索查询,先按Esc后再按点调用前一个命令的参数
  • 命令su可以切换用户:
  •           su - 用户名   切换到指定的用户
  •           su -            切换到root用户,并启用全新的终端,进入root的家目录
  •           su             切换到root用户,但不启用全新的终端,仍在原来用户目录下
  •           Sudo 命令    普通用户以管理员的身份运行命令
  • 命令passwd可以修改当前用户的密码,当设置的明码太简短或不符合规则则不让你改的,比如密码不能与用户名相同、简单的单词或全数字等;命令id可以显示当前用户的信息;通过在命令后追加一个&,可以将该命令放入后台运行;sleep 时间 可以停止操作时间秒数
  • BASH下的通配符:
  • *      匹配零个或多个字符;
  • ?      匹配任意一个字符 ;
  • [0—9]  匹配一个数字范围 ;
  • [abc]    匹配列表里任意字符 ;
  • [^abc]   匹配列表意外任意字符
  • 通过以下命令可以管理后台作业:
  • jobs         显示后台作业
  • fg 进程号   将后台作业调到前台执行
  • bg 进程号   继续执行一个后台作业
  • 引号
  • 在shell中引号分为三种:单引号,双引号和反引号.
  • 单引号 '
  • 由单引号括起来的字符都作为普通字符出现.特殊字符用单引号括起来以后,也会失去原有意义,而只作为普通字符解释.例如:
  • $ string='$PATH'
  • $ echo $string
  • $PATH
  • $
  • 可见$保持了其本身的含义,作为普通字符出现.
  • 双引号 "
  • 由双引号括起来的字符,除$、\、'、和"这几个字符仍是特殊字符并保留其特殊功能外,其余字符仍作为普通字符对待.对于$来说,就是用其后 指定的变量的值来代替这个变量和$;对于\而言,是转义字符,它告诉shell不要对其后面的那个字符进行特殊处理,只当作普通字符即可.可以想见,在双 引号中需要在前面加上\的只有四个字符$,\,'和"本身.而对"号,若其前面没有加\,则Shell会将它同前一个"号匹配.
  • 例如,我们假定PATH的值为.:/usr/bin:/bin,输入如下命令:
  • $ TestString="$PATH\\\"\$PATH"
  • $ echo $TestString
  • .:/usr/bin:/ bin\"$PATH
  • $
  • 读者可以自己试一下在第二个双引号之前不加\会产生什么结果.
  • 反引号 `
  • 反引号(`)这个字符所对应的键一般位于键盘的左上角,不要将其同单引号(')混淆.反引号括起来的字符串被shell解释为命令行,在执行时,shell

执行该命令行,并以它的标准输出结果取代整个反引号(包括两个反引号)部分.例如:

  • $ pwd
  • /home/xyz
  • $ string="current directory is `pwd`"
  • $ echo $string
  • current directour is /home/xyz
  • $
  • shell执行echo命令时,首先执行`pwd`中的命令pwd,并将输出结果/home/xyz取代`pwd`这部分,最后输出替换后的整个结果.
  • 利用反引号的这种功能可以进行命令置换,即把反引号括起来的执行结果赋值给指定变量.例如:
  • $ today=`date`
  • $ echo Today is $today
  • Today is Mon Apr 15 16:20:13 CST 1999
  • $
  • 反引号还可以嵌套使用.但需注意,嵌套使用时内层的反引号

用反斜线(\)将其转义.例如:$ abc=`echo The number of users is \`who| wc-l\``

  • $ echo $abc
  • The number of users is 5
  • $
  • 在反引号之间的命令行中也可以使用shell的特殊字符.Shell为得到``中命令的结果,它实际上要去执行``中指定的命令.执行时,命令中的特殊字符,如$,",?等又将具有特殊含义,并且``所包含的可以是任何一个合法的Shell命令,如:
  • $ ls
  • note readme.txt Notice Unix.dir
  • $ TestString="`echo $HOME ` ` ls [nN]*`"
  • $ echo $TestString
  • /home/yxz note Notice
  • $
  • 其他情况,读者可自行试之.
  • 注释符
  • 在shell编程中经常要对某些正文行进行注释,以增加程序的可读性.在Shell中以字符"#"开头的正文行表示注释行.
本站文章基于国际协议BY-NA-SA 4.0协议共享;
如未特殊说明,本站文章皆为原创文章,请规范转载。

0