1、linux的哲学思想
- 一切都是一个文件。(包括硬件,文本,二进制,源代码)
- 系统中拥有小型,单一用途的程序。(一个程序只负责做好自己的本职工作)
- 当遇到复杂任务,通过不同功能用途的程序组合起来完成。
- 避免令人困惑的用户界面就是没有复杂的图形界面。
- 连配置文件都存储在文本中,方便增删改查。
- 不在乎后缀名,有没有都无所谓,不是通过后缀名来定义文件的类型。
2、shell
2.1 什么是shell(壳),怎么在硬件和用户之间翻译
shell是Linux系统中后台运行的一种特殊程序也可以理解成一种特殊的软件,提供了用户与内核进行交互操作的一种接口。
用户使用应用程序发布指令,比如使用浏览器访问网页;
shell去通知操作系统需要进行什么样的操作(相当于解释层);
内核相当于操作系统去指挥硬件;
硬件才能工作,否则无法交互。
基础知识:
[root@localhost ~]# [zhangsan@localhost root]$ [zhangsan@localhost root]$ hostname localhost.localdomain [zhangsan@localhost opt]$ root //表示用户 localhost //主机名 ~ //家目录 # //管理员用户 $ //普通用户 root //root的家目录 opt //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 ~]#vim .bashrc PS1='[\e[1;34m][\u@\h \W]$[\e[0m]' 复制代码
2.2 不同的shell环境
bash是linux里面默认的shell程序,位于/bin/bash。csh、ksh 语言不同,比如中文英文都是交流的语言。
[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-}] 复制代码
2.3 shell与内、外部命令
(1)shell 分为内部命令 和外部命令,一般先执行内部命令,再执行外部命令。
内部命令 | 外部命令 |
集成于Shell解释器程序内部的一些特殊指令,也称为内建(Built-in)指令 | Linux系统中能够完成特定功能的脚本文件或二进制程序 |
属于Shell的一部分 | 属于Shell解释器程序之外的命令 |
没有单独对应的系统文件 | 每个外部命令对应了系统中的一个文件 |
自动载入内存,可以直接使用 | 必须知道其对应的文件位置,由Shell加载后才能执行 |
(2) help命令可以查看内部命令
[root@localhost ~]# help cd cd: cd [-L|[-P [-e]]] [dir] Change the shell working directory. Change the current directory to DIR. The default DIR is the value of the HOME shell variable. The variable CDPATH defines the search path for the directory containing DIR. Alternative directory names in CDPATH are separated by a colon (:). A null directory name is the same as the current directory. If DIR begins with a slash (/), then CDPATH is not used. If the directory is not found, and the shell option `cdable_vars' is set, the word is assumed to be a variable name. If that variable has a value, its value is used for DIR. Options: -L force symbolic links to be followed -P use the physical directory structure without following symbolic links -e if the -P option is supplied, and the current working directory cannot be determined successfully, exit with a non-zero status The default is to follow symbolic links, as if `-L' were specified. Exit Status: Returns 0 if the directory is changed, and if $PWD is set successfully when -P is used; non-zero otherwise. 复制代码
(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 可以查找命令具体的位置所在 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 外部命令使用过后会被记录在内存(缓存,但是会占用内存,临时性的)加快读取速度 复制代码
(4)开启或关闭内部命令
关闭:enable -n 内部命令
开启:enable 内部命令
[root@localhost opt]# enable -n cd [root@localhost opt]# cd /mnt/ [root@localhost opt]# 复制代码
(5)hash 缓存空间
hash命令负责显示与清除命令运行时系统优先查询的哈希表(hash table)。
当执行hash命令不指定参数或标志时,hash命令向标准输出报告路径名列表的内容。此报告含有先前hash命令调用找到的当前shell环境中命令的路径名。而且还包含通过正常命令搜索进程调用并找到的那些命令。
命令选项:
选项 | 说明 |
-d<指令> | 在哈希表中清除某个命令记录 |
-r | 清除哈希表中的所有记录 |
-l | 显示哈希表中的命令 |
-p<指令> | 将具有完整路径的命令加入到哈希表中 |
-t<指令> | 显示哈希表中命令的完整路径 |
将缓存的外部命令移到其他默认的目录中,无法再次使用,需要清掉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 复制代码
3. 命令行格式
- 在 Linux 操作系统中,凡是在字符操作界面中输入能够完成特定操作和任务的字符串都 可以称为命令。
- 严格来说,命令通常只代表实现某一类功能的程序的名称。
格式:
命令字 [选项]... [参数]...
命令字、选项、参数各自的意思及具体使用方法:
- 命令字
是整条命令中最关键的一部分,唯一确定。 - 选项
短格式选项:使用“-”符号引导,通常是一个字母;
长格式选项:使用“--”符号引导,通常是完整的单词。 - 参数
命令字的处理对象,可以是文件名、目录(路径)名或用户名等内容,个数可以是零到多个。
;可以隔开命令
,执行多个命令
编辑Linux命令行的辅助操作:
快捷键 | 功能 |
Tab 键 | 自动补齐(两次可以显示所有选项) |
反斜杠“\” | 强制换行或转义 |
Ctrl+a | 光标移到最前 |
Ctrl+e | 光标移到最后 |
Ctrl+U | 清空至行首不包括当前光标处的 字符 |
Ctrl+K | 清空至行尾包括当前光标处的字符 |
Ctrl+w | 从当前光标删除到开头 |
ALT+d | 从当前光标删除末尾 |
Ctrl+l | 清屏 |
Ctrl+c | 取消本次命令编辑 |
Ctrl+s/Ctrl+q | 锁屏/解锁 |
向上下箭头 | 回看执行过的命令 |
4.获得命令帮助
4.1 help
格式说明
- [ ]表示可选项
- CAPS或<>表示可变化的数据
- ...表示一个列表可加多个
- x|y|z 表示或的意思
- -abc 是-a -b -c (有些命令选项有先后顺序)
只能查看内部命令的使用方法:
[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可以是 一个或两个十六进制数字 退出状态: 返回成功除非有写错误发生。 复制代码
4.2 --help
查看外部命令帮助
[root@localhost ~]# ls --help [root@localhost dev]# useradd --help 复制代码
4.3 man
man分九个章节默认打开第一章节。
查看命令:man 1 命令/可执行程序 (1可以省略不写,因为默认打开第一章节)
查看文件格式:man 5 系统文件名
[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指令 复制代码
4.4 info
info也可以查看相关的帮助信息
[root@localhost dev]# info ls