1.优势
- 一切都是一个文件。(包括硬件,文本,二进制,源代码)连配置文件都存储在文本中,方便增删改查。
- 系统中拥有小型,单一用途的程序。(一个程序只负责做好自己的本职工作)。
- 当遇到复杂任务,通过不同功能用途的程序组合起来完成。 轻量级,一台服务 dhcp ip 数据库服务 网页
- 避免令人困惑的用户界面就是没有复杂的图形界面。()我想怎么使用程序,win程序。
- 不在乎后缀名,有没有都无所谓,不是通过后缀名来定义文件的类型。
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
cd 是 shell 内嵌 //内嵌代表内部命令
[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
echo 是 shell 内嵌
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)选项 短格式选项:使用“-”符号引导 通常 一个字母 长格式选项:使用“--”符号引导 通常完整的单词
类 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