Linux基础命令

95 阅读9分钟

1.优势

  1. 一切都是一个文件。(包括硬件,文本,二进制,源代码)连配置文件都存储在文本中,方便增删改查。
  2. 系统中拥有小型,单一用途的程序。(一个程序只负责做好自己的本职工作)。
  3. 当遇到复杂任务,通过不同功能用途的程序组合起来完成。 轻量级,一台服务 dhcp ip 数据库服务 网页
  4. 避免令人困惑的用户界面就是没有复杂的图形界面。()我想怎么使用程序,win程序。
  5. 不在乎后缀名,有没有都无所谓,不是通过后缀名来定义文件的类型。

2.基础命令

root   #表示用户 
localhost #主机名
~   #家目录    一定要和用户相对应   一个用户的家    用户在这个文件夹中有 至高无上的权利
#   #管理员用户
$   #普通用户
root #root的家目录  
opt #opt目录

[root@localhost ~]# 
[zhangsan@localhost root]$ 
[zhangsan@localhost root]$ hostname
localhost.localdomain
[zhangsan@localhost opt]$ 


#关机命令:
1、halt   				#立刻关机
2、poweroff  			#立刻关机
3、shutdown -h now       #立刻关机(root用户使用)
4、shutdown -h 10        #10分钟后自动关机

#重启:
reboot
init6
shutdown -r now


#修改语言
修改LANG变量实现中文语言提示
[root@localhost ~]# LANG=zh_CN.UTF-8
[root@localhost ~]# echo $LANG 
zh_CN.UTF-8
[root@localhost ~]# LANG=en_US.UTF-8
[root@localhost ~]# echo $LANG 
en_US.UTF-8

#修改颜色
[root@localhost ~]#cd ~
[root@localhost ~]#vim .bashrc
PS1='\[\e[1;34m\][\u@\h \W]\$\[\e[0m\]'
[root@localhost ~]#source .bashrc
#刷新下文件

3.shell

3.1 shell的定义

shell是Linux系统中后台运行的一种特殊程序也可以理解成一种特殊的软件,提供了用户与内核进行交互操作的一种接口。

用户使用应用程序发布指令,shell去通知操作系统需要进行什么样的操作(相当于解释层)

内核相当于操作系统去指挥硬件,硬件才能工作,否则无法交互。

3.2不同的shell环境

[root@localhost ~]# echo $SHELL            //显示当前shell
/bin/bash
[root@localhost ~]# cat /etc/shells       //显示当前系统所有使用的shell
/bin/sh
/bin/bash
/sbin/nologin(不让用户登录)
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
[root@localhost mnt]# sh                       切换shell环境
sh-4.2# 
[root@localhost mnt]# pstree                    查看使用过的shell环境
├─sshd───sshd───bash───csh───bash───tcsh───bash───pstree
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-udevd
        ├─tuned───4*[{tuned}]
        ├─upowerd───2*[{upowerd}]
        ├─vmtoolsd───{vmtoolsd}
        ├─wpa_supplicant
        └─xdg-permission-───2*[{xdg-permission-}]

3.3 shell与内、外部命令

(1)shell 分为内部命令 和外部命令,一般先执行内部命令,hash 再执行外部命令(别名最大)

内部命令外部命令
集成于Shell解释器程序内部的一些特殊指令,也称为内建(Built-in)指令Linux系统中能够完成特定功能的脚本文件或二进制程序
属于Shell的一部分属于Shell解释器程序之外的命令
没有单独对应的系统文件每个外部命令对应了系统中的一个文件
自动载入内存,可以直接使用必须知道其对应的文件位置,由Shell加载后才能执行

(2) help命令可以查看内部命令

[root@localhost opt]# help 
GNU bash, 版本 4.2.46(2)-release (x86_64-redhat-linux-gnu)
这些 shell 命令是内部定义的。请输入 `help' 以获取一个列表.
输入 `help 名称' 以得到有关函数`名称'的更多信息.
使用 `info bash' 来获得关于 shell 的更多一般性信息
使用 `man -k' 或 `info' 来获取不在列表中的命令的更多信息.

名称旁边的星号 (*) 意味着该命令被禁用.

 job_spec [&]                    history [-c] [-d 偏移量] >
 (( 表达式 ))                 if 命令; then 命令; [ el>
 . 文件名 [参数]            jobs [-lnprs] [任务声明 >
 :                               kill [-s 信号声明 | -n 
 [ 参数... ]                   let 参数 [参数 ...]
 [[ 表达式 ]]                 local [option] 名称[=值] >
 alias [-p] [名称[=值] ... >  logout [n]
 bg [任务声明 ...]           mapfile [-n 计数] [-O 起
 bind [-lpvsPVS] [-m 键映射>  popd [-n] [+N | -N]
 break [n]                       printf [-v var] 格式 [参
 builtin [shell 内嵌 [参数>  pushd [-n] [+N | -N | 目录>
 caller [表达式]              pwd [-LP]
 case 词 in [模式 [| 模式>  read [-ers] [-a 数组] [-d >
 cd [-L|[-P [-e]]] [dir]         readarray [-n 计数] [-O 賾
 command [-pVv] 命令 [参数>  readonly [-aAf] [name[=value>
 compgen [-abcdefgjksuv] [-o 缠 return [n]
 complete [-abcdefgjksuv] [-pr>  select NAME [in 词语 ... ;>
 compopt [-o|+o 选项] [-DE] >  set [-abefhkmnptuvxBCHP] [-o>
 continue [n]                    shift [n]
 coproc [名称] 命令 [重嬾  shopt [-pqsu] [-o] [选项厾
 declare [-aAfFgilrtux] [-p] [>  source 文件名 [参数]
 dirs [-clpv] [+N] [-N]          suspend [-f]
 disown [-h] [-ar] [任务声传 test [表达式]
 echo [-neE] [参数 ...]        time [-p] 管道
 enable [-a] [-dnps] [-f 文乾  times
 eval [参数 ...]               trap [-lp] [[参数] 信号
 exec [-cl] [-a 名称] [命乾  真
 exit [n]                        type [-afptP] 名称 [名称>
 export [-fn] [名称[=值] ..>  typeset [-aAfFgilrtux] [-p] >
 伪                             ulimit [-SHacdefilmnpqrstuvx>
 fc [-e 编辑器名] [-lnr] [>  umask [-p] [-S] [模式]
 fg [任务声明]               unalias [-a] 名称 [名称 >
 for 名称 [in 词语 ... ] ;>  unset [-f] [-v] [名称 ...]>
 for (( 表达式1; 表达式2>  until 命令; do 命令; don>
 function 名称 { 命令 ; } >  variables - 一些 shell 变>
 getopts 选项字符串 名祾  wait [编号]
 hash [-lr] [-p 路径名] [-d>  while 命令; do 命令; don>
 help [-dms] [模式 ...]        { 命令 ; }

(3)可以使用 type 命令来区分内外部命令

[root@localhost /]# type cd         
cdshell 内嵌                       //内嵌代表内部命令
[root@test1 /]# type -a ls
ls 是 `ls --color=auto' 的别名        //别名代表外部命令        
ls 是 /usr/bin/ls                    //外部命令会有程序路径
      
[root@localhost /]# whereis ls       //whereis 找的比较详细,包括man手册
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz

[root@localhost ~]# type -a echo 
echoshell 内嵌
echo 是 /usr/bin/echo

外部命令存放于 echo $PATH  一个一个找,找到为止,找不到就报无命令
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
外部命令使用过后会被记录在内存(缓存,但是会占用内存,临时性的)加快读取速度
[root@localhost ~]# type useradd
useradd 是 /usr/sbin/useradd
[root@localhost ~]# useradd wu
[root@localhost ~]# type useradd 
useradd 已被哈希 (/usr/sbin/useradd)
[root@localhost ~]# hash                  //或者使用hash
hash 缓存
使用过一次  外部命令   我就会将这个外部命令  缓存在hash
外部命令需要取找他的路径才能执行,  直接在缓存 调用 加快了速度
内部 外部   hash 的优先级
内部  hash  外部

命中	命令
   1	/usr/bin/dd                       //前面数字代表用过几次
   2	/usr/sbin/useradd
   1	/usr/bin/whoami
   3	/usr/bin/ls
[root@localhost ~]# hash -d dd              //清楚dd命令缓存 -r全清
[root@localhost ~]#hash -r
[root@localhost ~]#hash
hash: 哈希表为空
#清除所有缓存
[root@localhost ~]# hash
命中	命令
   2	/usr/sbin/useradd
   1	/usr/bin/whoami
   3	/usr/bin/ls

[root@localhost ~]# which ping      //外部命令的磁盘路径 -a 所有
/usr/bin/[root@localhost ~]# which help    //内部命令找不到
/usr/bin/which: no help in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)

[root@localhost ~]# whereis echo            //相关文档的帮助的命令
echo: /usr/bin/echo /usr/share/man/man1/echo.1.gz /usr/share/man/man1p/echo.1p.gz

(4)开启或关闭内部命令

关闭:enable -n 内部命令

开启:enable 内部命令

[root@localhost opt]# enable -n cd
[root@localhost opt]# cd /mnt/
[root@localhost opt]#

(5)hash

缓存空间

hash -d 加缓存里的命令 单独删除

hash -r 删除所有

将缓存的外部命令移到其他默认的目录中,无法再次使用,需要清掉hash值之后 ,才可以继续使用。

[root@localhost mnt]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root:/root/bin
[root@localhost mnt]# mv /usr/bin/ls /usr/local//bin
[root@localhost mnt]# ls
-bash: /usr/bin/ls: 没有那个文件或目录
[root@localhost mnt]# hash 
命中	命令
   1	/usr/bin/mv
   2	/usr/bin/ls
   6	/usr/bin/cd
[root@localhost mnt]# hash -d ls
[root@localhost mnt]# ls
1.5.txt  f15..txt   f1.txt  f3.txt  f5.txt
15..txt  f15...txt  f2.txt  f4.txt
[root@localhost mnt]# hash
命中	命令
   1	/usr/bin/mv
   1	/usr/local/bin/ls
   6	/usr/bin/cd

4.命令行格式

  1. 命令字 空格  [选项] 空格 [参数]

  2. 解释命令字 选项 参数各自的意思及具体使用方法

(1)命令字 是整条命令中最关键的一部分 唯一确定

(2)选项 短格式选项:使用“-”符号引导 通常 一个字母 长格式选项:使用“--”符号引导 通常完整的单词

类 unix 命令 bsd

(3)参数 命令字的处理对象 可以是文件名、目录(路径)名或用户名等内容 个数可以是零到多个

(4);可以隔开命令,执行多个命令

3.编辑Linux命令行的辅助操作

快捷键功能
Tab 键自动补齐(两次可以显示所有选项)
反斜杠“\”强制换行或转义
Ctrl+a光标移到最前
Ctrl+e 或 end 键光标移到最后
Ctrl+U清空至行首不包括当前光标处的 字符
Ctrl+K清空至行尾包括当前光标处的字符
Ctrl+w从当前光标删除到开头
ALT+d从当前光标删除末尾
Ctrl+l清屏
Ctrl+c取消本次命令编辑
Ctrl+s/Ctrl+q锁屏/解锁
向上下箭头回看执行过的命令

5. 获得命令帮助

5.1 --help

[root@localhost ~]# help echo
#内部命令查看帮助
echo: echo [-neE] [参数 ...]
    将参数写到标准输出。
    
    在标准输出上显示 ARG 参数后跟一个换行。
    
    选项:
      -n	不要追加换行
      -e	启用下列反斜杠转义的解释
      -E	显式地抑制对于反斜杠转义的解释
    
    `echo' 对下列反斜杠字符进行转义:
      \a	警告(响铃)
      \b	退格
      \c	抑制更多的输出
      \e	转义字符
      \f	格式提供
      \n	换行
      \r	回车
      \t	横向制表符
      \v	纵向制表符
      \\	反斜杠
      \0nnn	以 NNN (八进制)为 ASCII 码的字符。 NNN 可以是
    	0到3个八进制数字
      \xHH	以 HH (十六进制)为值的八比特字符。HH可以是
    	一个或两个十六进制数字
    
    退出状态:
    返回成功除非有写错误发生。

查看外部命令帮助

[root@localhost ~]# ls --help
[root@localhost dev]# useradd --help

5.2 man

man分九个章节默认打开第一章节(menu菜单 manual手册)

[root@localhost ~]# whatis ls
ls (1)               - 列目录内容
    1代表第一章手册
ls (1p)              - list directory contents
	1p 代表开发程序使用

[root@localhost ~]# whatis passwd 
#可以查看命令的章节
passwd (5)           - (文件格式)
sslpasswd (1ssl)     - compute password hashes
passwd (1)           - update user's authentication tokens
[root@localhost ~]# man 5 passwd      
#查看第五章内容,第5章一般是配置文件格式详细解释
[root@localhost ~]# man 7 ascii
[root@localhost ~]# man 7 UTF-8
[root@localhost ~]# mandb()
#生成man数据库,man命令无效时
正在删除 /usr/share/man 里的旧数据库条目...
mandb: 警告:/usr/share/man/man8/fsck.fat.8.manpage-fix.gz:忽略错误的文件名
正在处理 /usr/share/man 下的手册页...
正在删除 /usr/share/man/hu 里的旧数据库条目...
正在删除 /usr/share/man/pl 里的旧数据库条目...



[root@localhost ~]# man man

 该清单是一组用冒号分隔的欲查找的手册清单。此选项将覆盖                MANSECT               环境变量。
              有些指令或程序可能有一个以上的主题,它们位于不同的区段中。因此,要查看较后的区 段,你可以在此指定  man
              查找区段的顺序。具体区段划分如下所示:
              区段1:用户指令
              区段2:系统调用
              区段3:程序库调用
              区段4:设备
              区段5:文件格式     shadow passwd fstab
              区段6:游戏
              区段7:杂项
              区段8:系统指令
              区段9:内核内部指令
              区段n:Tcl或Tk指令

5.3 info

info也可以查看相关的帮助信息

[root@localhost dev]# info ls