阿尔海南粉 发表于 2019-2-17 10:55:33

Linux基础篇

Linux基础篇--linux基础和帮助用法
  本章概要


[*]用户登录
[*]终端
[*]Shell介绍
[*]执行命令
[*]简单命令
[*]Tab键补全
[*]命令行历史
[*]bash快捷键
[*]使用gnome-terminal
[*]whatis
[*]command--help
[*]manandinfo
[*]本地帮助文档/usr/share/doc/
[*]官网在线文档
[*]其它网站和搜索
  用户登录


[*]root用户
  一个特殊的管理帐户
  也被称为超级用户
  root已接近完整的系统控制
  对系统损害几乎有无限的能力
  除非必要,不要登录为root
[*]普通用户
  权限有限
  造成损害的能力比较有限
  终端类型terminal


[*]设备终端
  键盘鼠标显示器
[*]物理终端(/dev/console )
  控制台console
[*]虚拟终端(tty:teletypewriters,/dev/tty# #为)
  tty可有n个,Ctrl+Alt+F
[*]图形终端(/dev/tty7 )startx, xwindows
  CentOS 6: Ctrl + Alt + F7
  CentOS 7: 在哪个终端启动,即位于哪个虚拟终端
[*]串行终端(/dev/ttyS# )
  ttyS
[*]伪终端(pty:pseudo-tty,/dev/pts/# )
  pty, SSH远程连接
[*]查看当前的终端设备命令:#tty
  交互式接口


[*]交互式接口:启动终端后,在终端设备附加一个交互式应用程序
[*]GUI:Graphic User Interface
  X protocol, window manager, desktop
  Desktop:
    GNOME (C, 图形库gtk),
    KDE (C++,图形库qt)
    XFCE (轻量级桌面)
[*]CLI:Command Line Interface
  shell程序:sh(bourn 史蒂夫·伯恩)cshtcshksh(korn)bash (bourn again shell)GPL zsh
  shell


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


[*]GNU Bourne-Again Shell(bash)是GNU计划中重要的工具软件之一,目前也是Linux标准的shell,与sh兼容
[*]CentOS默认使用
[*]显示当前使用的shell
   ${SHELL}
[*]显示当前系统使用的所有shell
  cat /etc/shells
#echo $SHELL
/bin/bash
#cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
  命令提示符


[*]命令提示符:prompt
 #
  # 管理员$ 普通用户
[*]显示提示符格式
  #echo $PS1
[*]修改提示符格式
  PS1="\[\e[\u@\h \W]\\$\[\e"
  \e \033\u 当前用户
  \h 主机名简称\H 主机名
  \w 当前工作目录\W 当前工作目录基名
  \t 24小时时间格式\T 12小时时间格式
  \! 命令历史数   \# 开机后命令历史数
  执行命令


[*]输入命令后回车   
  提请shell程序找到键入命令所对应的可执行程序或代码,并由其分析后提交给内核分配资源将其运行起来
[*]在shell中可执行的命令有两类
 内部命令:由shell自带的,而且通过某命令形式提供   
  help 内部命令列表
  enable cmd启用内部命令
  enable –n cmd禁用内部命令
  enable –n 查看所有禁用的内部命令
 外部命令:在文件系统路径下有对应的可执行程序文件
  查看路径:which -a |--skip-alias; whereis
[*]区别指定的命令是内部或外部命令
 type COMMAND
  执行外部命令


[*]Hash缓存表
  系统初始hash表为空,当外部命令执行时,默认会从PATH路径下寻找该命令,找到后会将这条命令的路径记录到hash表中,当再次使用该命令时,shell解释器首先会查看hash表,存在将执行之,如果不存在,将会去PATH路径下寻找。利用hash缓存表可大大提高命令的调用速率
[*]hash常见用法
  hash 显示hash缓存
  hash –l 显示hash缓存,可作为输入使用
  hash –p path name 将命令全路径path起别名为name
  hash –t name 打印缓存中name的路径
  hash –d name 清除name缓存
  hash –r 清除缓存
注意:如果在将外部命令执行过一次的情况下,把该命令的路径进行更改,那么该命令将无法执行。   
原因:因为在执行命令,shell会首先查看hash缓存,会根据缓存中的路径执行该命令,但此时该命令的路径已经改变,因此会发生错误。   
解决方法:清除缓存即可
  命令别名


[*]显示当前shell进程所有可用的命令别名
  alias
[*]定义别名NAME,其相当于执行命令VALUE
  alias NAME='VALUE'
[*]在命令行中定义的别名,仅对当前shell进程有效
[*]如果想永久有效,要定义在配置文件中
  仅对当前用户:~/.bashrc
  对所有用户有效:/etc/bashrc
[*]编辑配置给出的新配置不会立即生效
[*]bash进程重新读取配置文件
  source /path/to/config_file
  . /path/to/config_file
[*]撤消别名:unalias
  unalias[-a] name
  -a 取消所有别名
[*]如果别名同原命令同名,如果要执行原命令,可使用
  \ALIASNAME
  “ALIASNAME”
  ’ALIASNAME’
  command ALIASNAME   
  /path/commmand   
注意:别名、内部命令、外部命令优先级:从大到小分别是别名、内部命令、外部命令   
命令格式
[*]COMMAND
 选项:用于启用或关闭命令的某个或某些功能
  短选项:-c 例如:-l, -h
  长选项:--word 例如:--all, --human-readable
 参数:命令的作用对象,比如文件名,用户名等
[*]注意:
 多个选项以及多参数和命令之间使用空白字符分隔
#ls/etc/fstab/etc/issue
 取消和结束命令执行:Ctrl+c,Ctrl+d
 多个命令可以用;符号分开
#ls /etc/fstab;cat /etc/issue
/etc/fstab
\S
Kernel \r on an \m
   一个命令可以用\分成多行

#host\
> na\
> me
centos7.localdomain
  日期和时间date


[*]linux系统的两种时钟
  系统时钟:由Linux内核通过CPU的工作频率进行的
  硬件时钟:主板
[*]相关命令:
 date   显示和设置时间和日期
  date -u显示格林尼治时间
  date 月日时分年秒(时间格式)设置时间
  date +%Y%m%d或+%F 显示年月日
  date +%H%M%S或+%T 显示时分秒
  date +“%F %T”   选项带有空格,需用引号   
  date -d ‘-2 day’ 显示前天时间
  date -d ‘2 day’显示后天时间
  date -d‘-2 day’ +%F只显示前天的年月日   
  date -d‘-2 day’ +%a(或%u)只显示前天是星期几
  date -f文件   批量处理文件
  date -d “具体日期” +%s将1970年1月1日到该具体日期的时间转换为秒 date -d @秒数 +“%F %T” 把秒数转换为时间和日期   
 clock,hwclock   显示硬件时间
  -s   以硬件时间为准,更改系统时间
  -w   以系统时间为准,更改硬件时间
[*]时区:/etc/localtime      
 cat/etc/localtime   查看时区
 设置时区:
 timedatectlset-timezones(centos7系统)
 tzselect   (centos6系统)
[*]cal显示日历
  -m显示当月日历
  -y   显示当年日历
  知识扩展:   
更改数量较多设备的时间   
ntpdate 时钟服务器ip地址校准服务器时间
时钟服务器需要做配置才能使用ntpdate命令,在后面会提到这方面内容
  linux趣事:   
cal091752   1752年9月份少了12天

#cal 09 1752
September 1752   
Su Mo Tu We Th Fr Sa
12 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
  简单命令


[*]关机:halt,poweroff
[*]重启:reboot
  -f:强制重启,不调用shutdown
  -p:切断电源
[*]关机或重启:shutdown
[*]用法:   
 shutdown
 即shutdown选项关机时间关机提示
  -r:reboot
  -h:halt
  -c:cancel 取消关机
  TIME:无指定,默认相当于+1,单位为分钟
    now:立刻关机,相当于+0
    +m:相对时间表示法,几分钟之后;例如+3
    hh:mm:绝对时间表示,指明具体关机时间
如:shutdown-h18:30“thesystem will be halt”
系统在18:30关机并发出提示“the system will be halt”
备注:系统提示(“the system will be halt”)只有在关机前15分钟内才会出现。
[*]用户登录信息查看命令:
  whoami:显示当前登录有效用户
  who:系统当前所有的登录会话
  w:系统当前所有的登录会话及所做的操作
[*]  nano文本编辑

[*]screen命令:
  创建新screen会话
    screen –S
  加入screen会话
    screen –x
  退出并关闭screen会话
    exit
  剥离当前screen会话
    Ctrl+a,d
  显示所有已经打开的screen会话
    screen -ls
  恢复某screen会话
    screen -r
  知识扩展:   
使用screen命令解决断网中断正在操作的程序或命令问题
screen   开启会话
screen-r恢复某会话此命令只对单个会话有用,即当前会话没有加入其它用户
以下命令针对两个用户连接到同一台机器上才能使用
screen-S (会话名)创建新会话      
#screen -S help   
screen-ls    查看当前开启的全部会话

#screen -ls
There is a screen on:
3485.help   (Attached)
1 Socket in /var/run/screen/S-root.
  screen-x (会话名)加入会话
当连接在同一台设备上的两个用户加入同一个会话以后,两个终端显示画面一致。
ctrl+a,d剥离当前会话
exit   退出并关闭screen会话


[*]echo显示字符
[*]用法:echo [-neE][字符串]
[*]说明:echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开, 并在最后加上换行号
[*]选项:
 -E:(默认)不支持\解释功能
 -e:启用\字符的解释功能
 -n:不自动换行
[*]显示变量
 echo “$环境变量”   
‘’(单引号)既不识别变量,又不识别命令    最傻
""(双引号)只能识别变量,不识别命令      一般   
``(反向单引号)相当于$()既识别变量,又识别命令      最聪明
[*]启用命令选项-e,即echo -e   ,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出
 \a 发出警告声
 \b 退格键
 \c 最后不加上换行符号
 \n 换行且光标移至行首
 \r 回车,即光标移至行首,但不换行
 \t 插入tab   
 \\插入\字符   
 \0nnn 插入nnn(八进制)所代表的ASCII字符   
  echo -e '\033[43;31;5mmagedu\033[0m'
 \xHH插入HH(十六进制)所代表的ASCII字
  命令行扩展、被括起来的集合


[*]命令行扩展:$( ) 或` 把一个命令的输出打印给另一个命令的参数 echo "This system's name is $(hostname) " This system's name is server1.example.com echo "i am \whoami` "
 i am root
[*]括号扩展:{ }
 打印重复字符串的简化形式
 echo file{1,3,5}
  file1 file3 file5
 rm -f file{1,3,5}
 echo {1..10}显示1到10
 echo {a..z}   显示a到z
 echo {000..20..2}   以三位数显示0到20,并且以2递增
  tab键


[*]命令补全
  内部命令:   
  外部命令:bash根据PATH环境变量定义的路径,自左而右在每个路径搜寻以给定命令名命名的文件,第一次找到的命令即为要执行的命令   
  用户给定的字符串只有一条惟一对应的命令,直接补全   
  否则,再次Tab会给出列表
[*]路径补全
  把用户给出的字符串当做路径开头,并在其指定上级目录下搜索以指定的字符串开头的文件名
  如果惟一:则直接补全
  否则:再次Tab给出列表
  双击tab键


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


[*]保存你输入的命令历史。可以用它来重复执行命令
[*]登录shell时,会读取命令历史文件中记录下的命令~/.bash_history
[*]登录进shell后新执行的命令只会记录在缓存中;这些命令会用户退出时“追加”至命令历史文件中
[*]重复前一个命令,有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键的同时点击. 键)
  调用历史参数


[*]command !^ 利用上一个命令的第一个参数做cmd的参数
[*]command !$ 利用上一个命令的最后一个参数做cmd的参数
[*]command !* 利用上一个命令的全部参数做cmd的参数
[*]command !:n 利用上一个命令的第n个参数做cmd的参数
[*]command !n:^ 调用第n条命令的第一个参数
[*]command !n:$ 调用第n条命令的最后一个参数
[*]command !n:m调用第n条命令的第m个参数
[*]command !n:* 调用第n条命令的所有参数
[*]command !string:^ 从命令历史中搜索以string 开头的命令,并获取它的第一个参数
[*]command !string:$ 从命令历史中搜索以string 开头的命令,并获取它的最后一个参数
[*]command !string:n 从命令历史中搜索以string 开头的命令,并获取它的第n个参数
[*]command !string:* 从命令历史中搜索以string 开头的命令,并获取它的所有参数
  命令history


[*]history查看历史命令
[*]用法:history [-c] [-d offset]    
 history -anrw    
 history -ps arg
[*]常用选项:
  -c: 清空命令历史
  -d offset: 删除历史中指定的第offset个命令
  n: 显示最近的n条历史
  -a: 追加本次会话新执行的命令历史列表至历史文件
  -r: 读历史文件附加到历史列表
  -w: 保存历史列表到指定的历史文件
  -n: 读历史文件中未读过的行到历史列表
  -p: 展开历史参数成多行,但不存在历史列表中
  -s: 展开历史参数成一行,附加在历史列表后
  命令历史相关环境变量


[*]HISTSIZE:命令历史记录的条数
[*]HISTFILE:指定历史文件,默认为~/.bash_history
[*]HISTFILESIZE:命令历史文件记录历史的条数
[*]HISTTIMEFORMAT=“%F %T “ 显示时间
[*]HISTIGNORE=“str1:str2*:… “ 忽略str1命令,str2开头的历史
[*]控制命令历史的记录方式:
 环境变量:HISTCONTROL
  ignoredups 默认,忽略重复的命令,连续且相同为“重复”   
  ignorespace 忽略所有以空白开头的命令
  ignoreboth 相当于ignoredups, ignorespace的组合
  erasedups 删除重复命令
[*]export 变量名="值“
[*]存放在/etc/profile 或~/.bash_profile
  bash的快捷键


[*]bash常用快捷键   
Ctrl + l清屏,相当于clear命令
Ctrl + o执行当前命令,并重新显示本命令
Ctrl + s阻止屏幕输出,锁定
Ctrl + q允许屏幕输出
Ctrl + c终止命令
Ctrl + z挂起命令
Ctrl + a光标移到命令行首,相当于Home
Ctrl + e光标移到命令行尾,相当于End
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次
备注:当使用xshell或secureCRT远程连接时,alt功能键会有冲突,需要在软件中进行设置以后才能使用alt快捷键功能
  gnome-terminal


[*]应用程序->附件->终端
[*]支持多个“标签”shell的图形化终端模拟器
 Ctrl-Shift-n 创建新窗口
 Ctrl-Shift-q关闭当前窗口
 Ctrl-Shift-t 创建一个标签页
 Ctrl-Shift-w 关闭一个标签页
 Ctrl-PaUp/PgUn切换到下一个/前一个标签页
 Ctrl-Shift-c 复制选中的文本
 Ctrl-Shift-v 把文本粘帖到当前光标处
  获得帮助


[*]获取帮助的能力决定了技术的能力!
[*]通过帮助查询一个命令如何使用
  步骤:先查看是内部还是外部命令type
  如果是内部命令,使用help 内部命令
  如果是外部命令,使用whatis查看该命令在man帮助第几章节   
  然后man 章节号 command
[*]多层次的帮助
 whatis   
 command--help
 manandinfo
 /usr/share/doc/
 Red Hat documentation
 其它网站和搜索
  whatis


[*]显示命令的简短描述
[*]使用数据库,系统刚安装后不可立即使用
[*]需执行以下命令makewhatis| mandb制作数据库
[*]使用示例:whatiscal或man-f cal
  命令帮助


[*]内部命令
帮助用法:
  helpcommand
  manbash   查看所有内部命令帮助,可通过关键字查询
[*]外部命令
帮助用法:
(1) COMMAND --help
 COMMAND -h   
(2) 使用手册(manual)
 man COMMAND   
(3) 信息页
 info COMMAND
(4) 程序自身的帮助文档
 README
 INSTALL   
 ChangeLog
(5) 程序官方文档
 官方站点:Documentation   
(6) 发行版的官方文档
(7) Google
  --help和-h选项


[*]显示用法总结和参数列表
[*]大多数命令都可以使用此帮助格式,但并非所有的命令都支持
[*]如:--help
[*]用法:
  date... [+FORMAT]
  date [-u|--utc|--universal] YY][.ss]]
符号说明:
  []表示可选项
  CAPS或表示变化的数据
  ...表示一个列表
  x |y| z的意思是“x或y或z“
    -abc的意思是-a -b –c
  { } 表示分组
  练习:
1、显示当前时间,格式:2016-06-18 10:20:30
date+“%F %T”或date+“%Y-%m-%d %H:%M:%S”
2、显示前天是星期几
date-d“-2 day” +%a(或%u)
3、设置当前日期为2019-08-0706:05:10
date080706052019.10
  man命令


[*]提供命令帮助的文件
[*]手册页存放在/usr/share/man
[*]几乎每个命令都有man的“页面”
[*]man页面分组为不同的“章节”
[*]统称为Linux手册
[*]man命令的配置文件:/etc/man.config| man_db.conf
[*]  MANPATH /PATH/TO/SOMEWHERE: 指明man文件搜索位置
[*]man -M/PATH/TO/SOMEWHERE COMMAND: 到指定位置下搜索COMMAND命令的手册页并显示
[*]中文man需安装包man-pages-zh-CN
  man章节


[*]1: 用户命令
[*]2: 系统调用
[*]3: C库调用
[*]4: 设备文件及特殊文件
[*]5: 配置文件格式
[*]6: 游戏
[*]7: 杂项
[*]8: 管理类的命令
[*]9:Linux 内核API
备注:作为运维工程师,只需关注1(用户命令)、5(配置文件格式)、8(管理类的命令)章节
  man帮助段落说明   
 NAME 名称及简要说明
 SYNOPSIS 用法格式说明
  []可选内容
   必选内容
  a|b二选一
  { }分组
  ...同一内容可出现多次
 DESCRIPTION 详细说明
 OPTIONS 选项说明
 EXAMPLES 示例
 FILES 相关文件
 AUTHOR 作者
 COPYRIGHT版本信息
 REPORTING BUGS bug信息
 SEE ALSO 其它帮助参考
  man帮助


[*]查看man手册页
  man [章节] keyword
[*]列出所有帮助
  man –a keyword
[*]搜索man手册   
  man -kkeyword列出所有匹配的页面
  使用whatis数据库
[*]相当于whatis
  man –f keyword
[*]打印man帮助文件的路径
  man –w [章节] keyword
  man搜索


[*]/KEYWORD:
  以KEYWORD指定的字符串为关键字,从当前位置向文件尾部搜索;不区分字符大小写;
  n: 下一个
  N:上一个
[*]?KEYWORD:
  以KEYWORD指定的字符串为关键字,从当前位置向文件首部搜索;不区分字符大小写;
  n: 跟搜索命令同方向,下一个
  N:跟搜索命令反方向,上一个
  练习
1、在本机字符终端登录时,除显示原有信息外,再显示当前登录终端号,主机名和当前时间

在/etc/issue文件中写入以下内容
hostnameis\n
timeis\t
ttyis\l
  解题思路:
(1)先查看issue章节号   whatisissue

#whatis issue
issue (5)            - prelogin message and identification file
  (2)man 5issue    发现没有先关信息,在查看SEE ALSO内容

SEE ALSO
motd(5), agetty(8), mingetty(8)
  (3)man8agetty,发现issue文件用法

l      Insert the name of the current tty line.
m      Insert the architecture identifier of the machine. Same as `uname -m'.
n      Insertthe nodename of the machine, also known as the hostname. Same as
`uname -n'.
o      Insert the NIS domainname of the machine. Same as `hostname -d'.
O      Insert the DNS domainname of the machine.
r      Insert the release number of the OS. Same as `uname -r'.
t      Insert the current time.
u      Insert the number of current users logged in.
U      Insert the string "1 user" or " users" where   isthenumberof
current users logged in.
  2、今天18:30自动关机,并提示用户   
shutdown-h18:30“thesystemwill be halt”
  info


[*]man常用于命令参考,GNU工具info适合通用文档参考
[*]没有参数,列出所有的页面
[*]info 页面的结构就像一个网站
[*]每一页分为“节点”
[*]链接节点之前*
[*]info [命令]
  导航info页


[*]方向键,PgUp,PgDn导航
[*]Tab键移动到下一个链接
[*]d 显示主题目录
[*]Home 显示主题首部
[*]Enter进入选定链接
[*]n/p/u/l进入下/前/上一层/最后一个链接
[*]s文字文本搜索
[*]q退出info
  通过本地文档获取帮助


[*]System->help(centos6)
[*]Applications -> documentation->help(centos7)
  提供的官方使用指南和发行注记
[*]/usr/share/doc目录
 多数安装了的软件包的子目录,包括了这些软件的相关原理说明
 常见文档:README INSTALL CHANGES
 不适合其它地方的文档的位置
  配置文件范例
  HTML/PDF/PS 格式的文档
  授权书详情
  通过在线官方文档获取帮助


[*]第三方应用官方文档
  http://www.nginx.org   
  http://tomcat.apache.org
  http://httpd.apache.org
  http://www.python.org
[*]通过发行版官方的文档光盘或网站可以获得
 安装指南、部署指南、虚拟化指南等
 红帽知识库和官方在线文档
  http://kbase.redhat.com
  http://www.redhat.com/docs
  http://access.redhat.com
[*]搜索引擎
  google搜索引擎
  搜索格式:Openstackfiletype:pdf
  rhcasite:redhat.com/docs



页: [1]
查看完整版本: Linux基础篇