003Linux基础和帮助简介

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了003Linux基础和帮助简介相关的知识,希望对你有一定的参考价值。

1、实现自动登录
为实现root用户直接登录系统,可进行如下配置:

# gedit
# nano /etc/gdm/custom.conf
  [daemon]
  AutomaticLoginEnable=true
  AutomaticLogin=root

常用的与登录提示信息相关的配置文件: 

# vim /etc/issue   //修改登录前显示信息
# vim /etc/motd     //修改登录后提示信息



2、终端terminal 

  • 设备终端(键盘鼠标显示器)

  • 物理终端(控制台console,/dev/console)

  • 虚拟终端(tty:teletypewriters,/dev/tty# #为[1-6],tty 可有n个可修改配置文件)

  • 图形终端(/dev/tty7) startx, xwindows
            CentOS 6: Ctrl + Alt + F7
            CentOS 7: 在哪个终端启动,即图形终端位于哪个虚拟终端

  • 串行终端(ttyS,/dev/ttyS#)

  • 伪终端(pty, SSH远程连接,pty:pseudo-tty ,/dev/pts/#)

  • 快捷键切换:Ctrl+Alt+F[1-6],Alt+F1/2/3/4/5/6(在图形界面情况下)

相关命令:

# chvt 3  //命令切换终端
# tty     //查看当前的终端设备



3、交互式接口
GUI:Graphic User Interface
CLI:Command Line Interface
Linux Desktop:
      GNOME (C, 图形库gtk)
      KDE (C++,图形库qt)
      XFCE (轻量级桌面)

# init 0/3/5/6  //模式切换
# runlevel      //查看系统运行级别
  5 3           //表示由图形模式切换到文本模式,若系统刚启动则为N 5
# startx        //开启图形界面,区别init
  Ctrl+C        //关闭图形界面快捷键



4、Shell简介
Shell 是Linux系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行
Shell也被称为LINUX的命令解释器(command interpreter),是一种高级程序设计语言。

# echo ${SHELL}    //查看当前使用的shell
# cat /etc/shells  //显示系统支持的shell环境
# /bin/csh         //shell环境切换
# exit             //退回以前shell



5、命令提示符
说明:#表示管理员 、$表示普通用户
       [[email protected] ~] 字段说明:
       其中,root为当前用户,centos6为主机名简称,~字段显示相对路径

# echo $PS1                   //显示提示符格式
# PS1="{\[email protected]\H \t}"            //临时修改提示符格式
# nano /etc/profile.d/env.sh  //永久修改提示符格式

环境变量颜色设置:
说明:PS1用到的配置文件:个人配置文件 ~/.bashrc 或者是全局配置文件 /etc/bashrc   

PS1="\[\e[1;5;41;33m\][\[email protected]\h \W]\\$\[\e[0m\]" ----->"5"为每5s闪烁一次

修改前:
PS1 默认值:

PS1='[\[email protected]\h \W]\$ '

修改后:

PS1='\[\e[1;35m\][\[\e[1;33m\]\[email protected]\h\[\e[1;31m\] \w\[\e[1;35m\]]\[\e[1;36m\]\$ \[\e[0m\]'
PS1='\[\e[1;35m\][\[\e[1;34m\]\[email protected]\h\[\e[1;31m\] \w\[\e[1;35m\]]\[\e[1;36m\]\$ \[\e[0m\]'

代码解释如下:

PS1='\[\e[1;35m\][     ------> 定义左边的“[”为洋红粗体
                       ------>“\[”一段不显示字串的开始
                       ------> “\e” 转义序列开始,等同于 “/033”
                       ------> “[” 字体颜色开始
                       ------> “1”粗体;“0”默认
                       ------> “35m”洋红
                       ------> “\]”一段不显示字串的结束
                       ------> “[”提示符左边的“[”
\[\e[1;33m\]\[email protected]\h      ------> 定义“\[email protected]\h”为;×××粗体
\[\e[1;31m\]\w         ------> 定义“\w”为:红色粗体
\[\e[1;35m\]]          ------> 定义右边的“]”为:洋红粗体
\[\e[1;36m\]\$         ------> 定义“\$”为:青色粗体
\[\e[0m\]'             ------> 文本颜色复位

可选的字体颜色代码:30(黑色)、31(红色)、32(绿色)、33(×××)、34(蓝色)、35(洋红)、36(青色)、37(白色)。
可选的背景颜色代码:40-47



6、内部命令(内存)、外部命令(磁盘)、别名
在shell中可执行的命令有两类内部命令、外部命令
1)内部命令:由shell自带的,开机加载到内存中,运行速度比较快

# help          //内部命令列表(同时查看是否有星号,确定内部命令禁用)
# enable cmd    //启用内部命令
# enable –n cmd //禁用内部命令
# enable –n     //查看所有禁用的内部命令(或使用help命令,显示为*)

2)外部命令:在文件系统路径下有对应的可执行程序文件,存储在磁盘里,在执行时才会缓存到内存

# type who      //type命令区别内部、外部命令
# echo $PATH
# yes           //一直显示某字符
# which yes     //查看外部命令yes的路径  
   选项:  
        -a 显示所有路径
# whereis who   //显示命令路径、一些文档的路径

  hash缓存表
   系统初始hash表为空,当外部命令执行时,默认会从PATH路径下寻找该命令,找到后会将这条命令的路径记录到hash表中,当再次使用该命令时,shell解释器首先会查看hash表,存在将执行之,如果不存在,将会去PATH路径下寻找。利用hash缓存表可大大提高命令的调用速率
  常见用法:

  # hash              //查看缓存的命令
  # hash -l           //显示hash缓存,可作为输入使用
  # hash –p path name //将命令全路径path起别名为name
  # hash –t name      //打印缓存中别名name真实的路径
  # hash –d name      //清除name缓存
  # hash –r           //清除缓存

3)别名(alias)

# alias             //显示当前所有命令别名
# alias abcd='df'   //定义别名实例
# unalias cp        //取消别名  
   选项:   
        -a  取消所有别名
# nano ~/.bashrc   //定义当前用户,区别全局/etc/bashrc
# source ~/.bashrc //重新读取配置文件(或使用. ~/.bashrc,其中.为内部命令)

实验验证:
a)当别名与原命令同名情况,调用原命令(以ls为例):

# /bin/ls                //此方法适用有路径的外部命令(使用原始命令也可用 \ls 、'ls'、command ls、"ls")
# which --skip-alias ls  //不显示alias信息,只显示路径

b)命令执行优先级判断实验:别名>内部>外部
以enable和yes两个内部命令,验证别名和内部命令的优先级

# alias enable=who   //别名方式高于内部命令
# enable
   root     :0           2018-03-31 15:48 (:0)
   root     pts/0        2018-03-31 16:25 (192.168.50.1)

注意:
      echo即是内部命令又是外部命令

c)缓存原理实验验证:
下面以yes为例进行命令路径缓存原理实验

 # type yes
   yes is hashed (/usr/bin/yes)
 # echo $PATH
   /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
 # cp /usr/bin/yes /usr/local/sbin/
 # ll /usr/local/sbin/yes
   -rwxr-xr-x. 1 root root 28976 Mar 31 16:41 /usr/local/sbin/yes
 # ll /usr/bin/yes
   -rwxr-xr-x. 1 root root 28976 Nov  6  2016 /usr/bin/yes
 # yes
 # type yes
   yes is hashed (/usr/bin/yes)
 # hash
 # hash -r
 # yes
 # type yes
   yes is hashed (/usr/local/sbin/yes)
 # rm -f /usr/local/sbin/yes
 # yes
   -bash: /usr/local/sbin/yes: No such file or directory

d)小技巧总结:
  

  • 终止执行:Ctrl+c 、Ctrl+d

  • 命令组合使用;

  • 命令换行使用\(注意空格)



7、时间、日期、时区和语言设置
1)时间:
有许多场合都使用时间戳的方式表示时间,unix/linux时间戳是按照从格林威治时间1970年1月1日期计算的一个秒数

# date                //查看系统时间
# date 0327142019.30  //修改系统时间(月日时分年.秒)
  Wed Mar 27 14:20:30 CST 2019
# date +%s            //表示当前系统时间到1970年1月1日隔多少秒
# date -d @1522488941 //时间戳转换为到现在的具体时间
# clock               //查看硬件时间(或# hwclock)  
   选项:  
        -s, --hctosys   以硬件时钟为准,校正系统时钟
       -w, --systohc   以系统时钟为准,校正硬件时钟

2)日历:

# cal -y      //显示日历
# cal 9 1752  //1752年调整时间

3)时区:
/etc/loacltime                             //设置时区(/usr/share/zoneinfo/Asia/Shanghai)

# timedatectl status                       //显示当前系统时区(RHEL7)
# timedatectl list-timezones               //显示所有时区(RHEL7)
# timedatectl set-timezone Asia/Shanghai   //设置时区(RHEL7)
# tzselect                                 //设置时区(RHEL6)

4)语言:

# echo $LANG               //显示语言环境
# vim /etc/sysconfig/i18n  //设置语言
  LANG="en_US.UTF-8"
# wall "你好"              //发消息




8、简单命令
1)who命令:

# whoami    //显示当前登录有效用户
# who       //系统当前所有的登录会话
# w         //系统当前所有的登录会话及所做的操作
# who am i  //显示当前用户的登录会话(注意后两项可随便写)

2)screen命令:
说明:常用于备份操作,不依赖于网络状态

# screen -S help   //创建一个help会话
# screen -ls       //显示
# screen -x help   //对端加入,必须为统一帐户连接
  Ctrl+a,d         //离开当前会话(先按Ctrl+a,松手按d )
# screen -r        //重新加入

3)echo命令:
选项:
           -E     (默认)不支持\解释功能
           -n     不自动换行
           -e     启用\字符解释功能

说明:
启用命令选项-e,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出

   \a    :发出警告声
   \b    :退格键
   \v    :垂直的TAB键
   \c    :最后不加上换行符号,即不换行
   \n    :换行且光标移至行首
   \r    :回车,即光标移至行首,但不换行
   \t    :同行中字符间插入TAB
   \\    :插入\字符
   \0nnn :插入nnn(八进制)所代表的ASCII字符
   \xHH  :插入HH(十六进制)所代表的ASCII字

实验示例:

# echo -e "hello\n"
# echo -e "hello\c"
# echo -e "hello\tJerome"
# echo -e "hello\vJerome\vTom"
# echo -e "Jerome\a"
# echo -e "Jerome\rTom\c"  //光标移到前面Tom将Jerome前三个字母覆盖
# echo -e "\0141"
# cat > file1 <<EOF
  > a
  > b
  > c
  > EOF
# hexdump -C file1    //查看二进制文件
  00000000  61 0a 62 0a 63 0a                                 |a.b.c.|
  00000006
# bc (ibase/obase=2/8/16进制) //计算器功能

9、命令套用及特殊字符

1)各种引号作用说明:
单引号:字符串、变量都不认
双引号:字符串、变量认一个
反向单引号:字符串、变量都认,一个命令调用另一个命令输出时使用,其中反向单引号``等同于$()

应用示例:

# echo My hostname is `hostname`!
  My hostname is centos7.guoguo.com!
# echo My hostname is $(hostname)!
  My hostname is centos7.guoguo.com!
# touch file-`date +%F`.log
# ll *.log
  -rw-r--r--. 1 root root 0 Apr  3 15:25 file-2018-04-03.log

实验示例:
a)为区别双引号、单引号、反向单引号功能进行如下实验:

# echo $PS1
   \[\e[1;35m\][\[\e[1;33m\]\[email protected]\h\[\e[1;31m\] \W\[\e[1;35m\]]\[\e[1;36m\]\$ \[\e[0m\]
# echo echo $PS1
  echo \[\e[1;35m\][\[\e[1;33m\]\[email protected]\h\[\e[1;31m\] \W\[\e[1;35m\]]\[\e[1;36m\]\$ \[\e[0m\]
# echo "echo $PS1"
  echo \[\e[1;35m\][\[\e[1;33m\]\[email protected]\h\[\e[1;31m\] \W\[\e[1;35m\]]\[\e[1;36m\]\$ \[\e[0m\]
# echo 'echo $PS1'
  echo $PS1
# echo `echo $PS1`
  \[\e[1;35m\][\[\e[1;33m\]\[email protected]\h\[\e[1;31m\] \W\[\e[1;35m\]]\[\e[1;36m\]\$ \[\e[0m\]

b)花括号{}:表示范围

# echo {23..16}
  23 22 21 20 19 18 17 16
# echo {10..20..2}
  10 12 14 16 18 20
# echo {a..Z}                    //显示ASCII表中a到Z
  a ` _ ^ ]  [ Z
# echo file{1,3,5}
  file1 file3 file5
# echo file{1,3,5}.{log,txt}    //笛卡尔乘积的应用
  file1.log file1.txt file3.log file3.txt file5.log file5.txt

2)Tab键使用说明:
内部和外部命令补全、路径补全(唯一则补全,否则再次TAB键列表),其中双击Tab键操作说明如下:

   command 2Tab //所有子命令或文件补全
   string2Tab   //以string开头命令
   /2Tab        //显示所有根目录下一级目录,包括隐藏目录
   ./2Tab       //当前目录下子目录,包括隐藏目录
   *2Tab        //当前目录下子目录,不包括隐藏目录
   ~2Tab        //所有用户列表
   $2Tab        //所有变量
   @2Tab        //为/etc/hosts记录 (centos7不支持)
   =2Tab        //相当于ls –A (centos7不支持)



10、执行历史命令

# history
# echo $HISTSIZE  //记录最近1000条,可修改/etc/profile的记录条数

1)特殊操作说明:

   重复前一个命令,有4种方法:
       重复前一个命令使用上方向键,并回车执
       按 !! 并回车执行
       输入 !-1 并回车执行
       按 Ctrl+p 并回车执行
   !:0           :执行前一条命令(去除参数)
   Ctrl + n      :显示当前历史中的下一条命令,但不执行
   Ctrl + j      :执行当前命令
   !n            :执行history命令输出对应序号n的命令
   !-n           :执行history历史中倒数第n个
   !string       :重复前一个以“string”开头的命令
   !?string      :重复前一个包含string的命令
   !string:p     :仅打印命令历史,而不执行
   !$:p          :打印输出 !$(上一条命令的最后一个参数)的内容
   !*:p          :打印输出 !*(上一条命令的所有参数)的内容
   ^string       :删除上一条命令中的第一个string
   ^string1^string2     :将上一条命令中的第一个string1替换为string2
   !:gs/string1/string2 :将上一条命令中所有的string1都替换为 string2
   使用up(向上)和down(向下)键来上下浏览从前输入的命令
   Ctrl-r:来在命令历史中搜索命令
    (reverse-i-search)`’:
   Ctrl+g:从历史搜索模式退出
   要重新调用前一个命令中最后一个参数
     !$        表示
     Esc, .   (点击Esc键后松开,然后点击 . 键)
     Alt+ .   (按住Alt键的同时点击 . 键)

2)调用历史参数:

   command !^      :利用上一个命令的第一个参数做cmd的参数
   command !$      :利用上一个命令的最后一个参数做cmd的参数
   command !*      :利用上一个命令的全部参数做cmd的参数
   command !:n     :利用上一个命令的第n个参数做cmd的参数
   command !n:^    :调用第n条命令的第一个参数
   command !n:$    :调用第n条命令的最后一个参数
   command !n:m    :调用第n条命令的第m个参数
   command !n:*    :调用第n条命令的所有参数

实验示例:

# id -u admin1
  1000
# !!
  id -u admin1
  1000
# !-1
  id -u admin1
  1000
# id -u admin1 //使用Trcl+p
  1000
# !:0
  id
  uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
# !135          //执行历史命令的编号
  id -u admin1
  1000
# !-5            //倒序执行
# !echo
  echo $HISTSIZE
  1000
# !?HI
  echo $HISTSIZE
  1000
# touch /data/f1 /data/f2
# ^data^root
  touch /root/f1 /data/f2
# touch /root/f1 /data/f2
# touch /data/f1 /data/f2
# !:gs/data/root
  touch /root/f1 /root/f2
# !*:p
  /root/f1 /root/f2
# touch /root/f1 /root/f2
# !$:p
  /root/f2
# touch /root/f1 /root/f2
# ll !^
  ll /root/f1
  -rw-r--r--. 1 root root 0 Apr  3 16:47 /root/f1



11、查看命令帮助

help、--help、-h(/usr/share/man)
1)内部命令:
     help COMMAND
     man bash
2)外部命令:

a)COMMAND --help
      COMMAND -h
   b)使用手册(manual)
      man COMMAND
   c)信息页
      info COMMAND
   d)程序自身的帮助文档
      README
      INSTALL
      ChangeLog
   e)程序官方文档
      官方站点:Documentation
   f)发行版的官方文档
   g)Google

注意:
   a)当前用户正常退出时,内存中命令命令会存入当前用户.bash_history(不实时更新)文件,不正常退出会部分丢失
   b)命令history -c删除的是内存中的信息,要想彻底删除历史命令,应先删除.bash_history,再用history -c清理内存命令

3)man帮助章节说明
存放位置/usr/share/man
1: 用户命令
2: 系统调用
3: C库调用
4: 设备文件及特殊文件
5: 配置文件格式
6: 游戏
7: 杂项
8: 管理类的命令
9:Linux 内核API

# whereis ls      //查看命令帮助存放路径
# man ls
# whatis passwd   //查看命令的简要描述,等价于# man -f passwd
  sslpasswd (1ssl)     - compute password hashes
  passwd (1)           - update user's authentication tokens
  passwd (5)           - password file
# man 5 passwd   //指定章节号,查看相应章节  选项:  -a  列出所有帮助,q推出跳入下一章节
      -k  列出所有匹配的页面,相当于apropos
      -f  相当于whatis
      -w  打印man帮助文件的路径

注意:
     whatis刚装好的系统不可立即使用,可以采用makewhatis(centos6)、mandb(centos7)制作数据库

4)bash的帮助:

# man bash          //建议认真查看

存放所有内部命令、变量的用法,具体如下:
a)命令历史相关环境变量
   HISTSIZE:命令历史记录的条数
   HISTFILE:指定历史文件,默认为~/.bash_history
   HISTFILESIZE:命令历史文件记录历史的条数
   HISTTIMEFORMAT="%F %T " 显示时间,可存放在配置文件/etc/profie.d/env.sh
   HISTIGNORE="str1:str2*:… " 忽略str1命令,str2开头的历史
b)控制命令历史的记录方式:
       环境变量:HISTCONTROL
        ignoredups 默认,忽略重复的命令,连续且相同为“重复”
        ignorespace 忽略所有以空白开头的命令
        ignoreboth 相当于ignoredups, ignorespace的组合
        erasedups 删除重复命令
c)全局变量:export 变量名="值"
注意:
     a)配置文件存放在 /etc/profile 或 ~/.bash_profile
     b)涉及到环境变量的文件建议自己创建,放到/etc/profile.d目录下,便于维护

5)info查看帮助信息

# info ls

6)在/usr/share/doc目录下查看文件帮助

7)官网资料或知识库查询

# sosreport //收集日志文件,请求支持

8)网站和搜索

http://tldp.org

http://www.slideshare.net

http://www.google.com 

    Openstack filetype:pdf   //按文件类型查找

    rhca site:redhat.com/docs


12、常用的快捷键 
1)bash的快捷键小技巧:

  Ctrl + l   :清屏,相当于clear命令
  Ctrl + o   :执行当前命令,并重新显示本命令
  Ctrl + s   :阻止屏幕输出,锁定
  Ctrl + q   :允许屏幕输出
  Ctrl + c   :终止命令
  Ctrl + z   :挂起命令
  Ctrl + a   :光标移到命令行首,相当于Home
  Ctrl + e   :光标移到命令行尾,相当于End
  Ctrl + f   :光标向右移动一个字符
  Ctrl + b   :光标向左移动一个字符
  Alt + f    :光标向右移动一个单词尾
  Alt + b    :光标向左移动一个单词首
  Ctrl + xx  :光标在命令行首和光标之间移动
  Ctrl + u   :从光标处删除至命令行首
  Ctrl + k   :从光标处删除至命令行尾
  Alt + r    :删除当前整行
  Ctrl + w   :从光标处向左删除至单词首
  Alt + d    :从光标处向右删除至单词尾
  Ctrl + d   :删除光标处的一个字符
  Ctrl + h   :删除光标前的一个字符
  Ctrl + y   :将删除的字符粘贴至光标后
  Alt + c    :从光标处开始向右更改为首字母大写的单词
  Alt + u    :从光标处开始,将右边一个单词更改为大写
  Alt + l    :从光标处开始,将右边一个单词更改为小写
  Ctrl + t   :交换光标处和之前的字符位置
  Alt + t    :交换光标处和之前的单词位置
  Alt + N    :提示输入指定字符后,重复显示该字符N次
  注意:Alt组合快捷键经常和其它软件冲突

2)gnome-terminal快捷键小技巧:
支持多个“标签”shell的图形化终端模拟器

 Ctrl-Shift-n   :创建新窗口
 Ctrl-Shift-q   :关闭当前窗口
 Ctrl-Shift-t   :创建一个标签页
 Ctrl-Shift-w   :关闭一个标签页
 Ctrl-PaUp/PgUn :切换到下一个/前一个标签页
 Ctrl-Shift-c   :复制选中的文本
 Ctrl-Shift-v   :把文本粘帖到当前光标处

以上是关于003Linux基础和帮助简介的主要内容,如果未能解决你的问题,请参考以下文章

Linux 基础与应用教程 003(权限管理命令简单基础)

003. Linux基础三 P1(文件操作文件通配符touch)

003. Linux基础三 P2(cpmvrenamerm)

LEETCODE 003 找出一个字符串中最长的无重复片段

Linux基础之Linux简介

编程思想与算法