一、Linux基础知识
1.Linux的哲学思想
1.一切都是一个文件(包括硬件、文本、二进制、源代码),配置文件都储存在文本中,方便增删改查
2.系统中拥有小型、单一用途的程序(一个程序只负责做好自己的本职工作),当遇到复杂任务,通过不同功能用途的程序组合完成
3.避免复杂难理解的用户界面,没有复杂的图形界面
4.不需要后缀名,有没有都无所谓,不通过后缀名来定义文件的类型
2.Linux的基本知识
1.root #代表用户
2.localhost #主机名
3.~ #家目录
4.# #管理员用户
5.$ #普通用户
6.root #root的家目录
7.opt #opt目录
8.halt #立刻关机
9.poweroff #立刻关机
10.shutdown -h now #立刻关机(root用户使用)
11.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
3.Shell
1.Shell的定义
shell(壳)是Linux系统中后台运行的一种特殊程序也可以理解成一种特殊的软件,提供了用户与内核进行交互操作的一种接口,相当于翻译官,将人类使用的高级语言翻译成机器能理解的机器语言(二进制语言)例如:用户使用应用程序发布指令(使用浏览器访问网页)Shell去通知操作系统需要进行什么样的操作(相当于解释层),内核相当于操作系统去指挥硬件,硬件才能工作,否则无法交互。
2.不同的Shell环境
bash是Linux里面默认的shell程序,位于/bin/bash。csh\ksh语言不同就好像中文和英文,都是不同的语言。
1.[root@localhost ~]#echo $SHELL
//显示当前shell
2.[root@localhost ~]#cat /etc/shells
//显示当前系统所有使用的shell
3.[root@localhost mnt]# sh
//切换shell环境
4.[root@localhost mnt]# pstree
//查看使用过的shell环境
3.Shell与内、外部命令
Shell分为内部命令和外部命令,一般先执行内部命令,hash再执行外部命令(别名最大)
命令的本质就是一个一个的程序
内部命令:集成也就是本身就存在于Shell里面的命令,是属于Shell的一部分,只要Shell被执行,内部命令就可以自动载入内存,用户是可以直接使用的,比如cd命令。
1.内部命令和bash软件是一体的,bash中集成了很多命令
2.没有独立的文件,表现为bash
3.不用独立安装
4.直接在内存中运行,无需加载,效率很快
外部命令:外部命令是需要手动安装才可以使用的,执行的时候必须知道相应的路径
1.不在bash(shell)软件中,有独立的执行文件
2.需要额外安装
3.系统需要知道命令文件的位置才可以运行,系统规定了几个文件夹,如果你的命令在这几个文件夹中,那么是不需要写路径的(echo $PATH /usr/local/sbin:/usr/local/bin:/usr/bin:/root/bin)
内部命令 | 外部命令 |
集成于Shell解释器程序内部的一些特殊指令,也称为内建(Built-in)指令 | Linux系统中能够完成特定功能的脚本文件或二进制程序 |
属于Shell的一部分 | 属于Shell解释器程序之外的命令 |
没有单独对应的系统文件 | 每个外部命令对应了系统中的一个文件 |
自动载入内存,可以直接使用 | 必须知道其对应的文件位置,由Shell加载后才能执行 |
4.Linux中命令执行过程
当一个命令是第一次执行时,先查看是内部还是外部,如果是内部直接执行,如果是外部就去规定的路径找,找到就执行,找不到就报错
如果不是第一次执行,先判断是内部还是外部,如果是内部直接执行,如果是外部就去查缓存,安装缓存提示去找,找到执行,找不到就报错
如果执行一个命令报错了,命令未找到
1.检查有没有安装该命令,安装该命令
2.hash缓存有错,清理hash缓存表
3.不在指定的路径下,需要使用绝对路径或者将命令复制到规定文件夹下
5.查看内部命令
1.[root@localhost ~]# enable
//enable可以用来查看内部命令
6.可以使用type命令来区分内外部命令
1.[root@localhost ~]# type cd
//内嵌代表内部命令
2.[root@localhost ~]# type -a ls
//别名代表外部命令
//外部命令会有程序路径
3.[root@localhost ~]# whereis ls
//可以查找命令的具体位置所在
4.[root@localhost ~]# type -a echo
//外部命令就存放于echo
5.[root@localhost ~]# echo $PATH
//$PATH一个一个找,找到为止,找不到就报无命令
6.[root@localhost ~]# type useradd
//去类别(type)创建账号(useradd)命令,显示路径,useradd是外部命令,外部命令使用后会被记录在内存(缓存,也就是hash,但是会临时性的占用内存)目的为了加快读取速度。
[root@localhost ~]# useradd esdeath
//创建了名为esdeath的账号{第一次使用此命令以缓存(hash)到内存,以加快此命令读取速度}
[root@localhost ~]# type useradd
//此时再去类别(type)创建账号(useradd)命令,系统提示已经缓存(hash)到内存
7.使用hash
1.[root@localhost ~]# hash
//使用hash
使用外部命令需要找外部命令的路径才能执行,如果使用过一次外部命令,我就可以将这个外部命令缓存(hash)在内存,这样使用这个外部命令时就可以直接在缓存调用,加快了速度。
命令的优先级:
1.内部命令 2.外部命令 3.hash
缓存外部命令后的优先级:
1.内部命令 2.hash 3.外部命令
使用hash后,前面的数字显示了缓存(hash)后的外部命令使用了几次
2.[root@localhost ~]# hash -d useradd
//清除选择的命令缓存(hash)这里拿用户名(useradd)举例
此时就能看到缓存(hash)在内存中的useradd外部命令就已经被清除了
3.[root@localhost ~]#hash -r
//清空缓存(hash)中的全部命令
4.[root@localhost ~]# which ping
//外部命令的磁盘路径
5.[root@localhost ~]# which ping -a
//所有外部命令的磁盘路径
6.[root@localhost ~]# which help
//内部命令找不到
7.[root@localhost ~]# whereis echo
//相关文档的帮助的命令
8.开启或关闭内部命令
关闭内部命令:[root@localhost ~]#enable -n
开启内部命令:[root@localhost ~]#enable
这里拿cd举例:
可以看到用cd从根目录去家目录,然后使用[root@localhost ~]#enable -n cd关闭了cd这个内部命令,然后用cd从家目录返回根目录失败
这里可以看到使用[root@localhost ~]#enable cd开启后,使用cd从家目录去根目录成功,说明开启cd内部命令成功
4.Linux命令行格式
1.格式
1.1在Linux操作系统中,凡是在字符操作界面中输入能够完成特定操作和任务的字符串都可以称为命令,命令通常只代表实现某一类功能的程序的名称。
在linux中使用命令
命令字 【选项】 【参数】-----------选项和参数都是可以有多个的
命令字:你执行任务,需要挑选相对应的命令
选项:修饰加强命令,让命令有更多功能(选项的类型1.减号+字母2.两个杠+完整字母3.不需要加杠,此类比较少4.命令+子命令+子子命令+子子子命令)
参数:使用对象,对谁使用该命令(使用对象一般为3种:1.文件2.文件夹3.用户名)
linux命令行辅助操作----------都是来源于bash
1.命令字
整条命令中最关键的一部分(唯一确定)
2.选项
短格式选项:使用“-”符号引导,通常一个字母
长格式选项:使用“--”符号引导,通常完整的单词
3.参数
命令字的处理对象,可以是文件名、目录(路径)名或用户名等内容。个数可以是零到多个;可以隔开命令,执行多个命令
2.辅助操作
Linux命令行的辅助操作
快捷键 | 功能 |
Tab键 | 自动补齐(两次可以显示所有选项) |
反斜杠“\” | 强制换行或转义 |
Ctrl+a | 光标移到最前 |
Ctrl+e或end键 | 光标移到最后 |
Ctrl+U | 清空至行首不包括当前光标处的字符 |
Ctrl+K | 清空至行尾包括当前光标处的字符 |
Ctrl+w | 从当前光标删除到开头 |
ALT+d | 从当前光标删除到末尾 |
Ctrl+l | 清屏 |
Ctrl+c | 取消本次命令编辑 |
Ctrl+s/Ctrl+q | 锁屏/解锁 |
向上下箭头 | 回看执行过的命令 |
路径的作用:描述这个文件在系统中的位置
1.绝对路径
从根目录开始的路径就叫绝对路径,从根开始描述文件的位置,一定不会找错
2.相对路径
没有将路径写完整的就叫相对路径,从当前文件夹开始描述文件的位置
二、Linux基础命令
(生产环境中谨慎使用,文件量过大会直接死机,有的服务器上的文件是千万级别的)
1.ls(list)
命令格式:[root@localhost ~]#ls(文件或目录、选项/参数)
ls(list)显示当前文件夹的所有文件
-l:长格式显示
命令格式:[root@localhost ~]#ll
ll(ls-l)以长格式显示当前文件和目录列表
drwxr-xr-x. 2 root root 6 2月 29 15:52 bb
第一个字段d代表文件类型
d:目录
-:普通文件
(rwxr-xr-x)这段字母表示该文件的权限
root:文件所有者
root:文件所属组
6:文件的大小
2月 29 15:52:文件的最近使用时间
bb:文件名称
[root@localhost ~]#ls-l等于[root@localhost ~]#ll
//以长格式显示文件和目录列表
-a:显示全部文件(包括隐藏文件)
命令格式:[root@localhost ~]#ls -a
ls-a显示全部文件(包括隐藏文件.和..)
-A:显示全部不包括.和..的隐藏文件
命令格式:[root@localhost ~]#ls -A
ls-A显示全部不包括.和..的隐藏文件
-d:只显示本目录
命令格式:[root@localhost ~]#ls -d
ls-d只显示本目录
-h:人性化显示文件大小
命令格式:[root@localhost ~]#ls-lh或[root@localhost ~]#ls-lhk
ls-lh人性化显示文件大小
ls-lhk人性化显示文件大小,加k显示单位
-R:递归显示
命令格式:[root@localhost ~]#ls-lR
ls-lR递归显示该目录及该目录的子目录下的全部内容
2.alias
alias是用于设置指令的命令,可以通过alias自定义指令的别名,按个人的使用习惯决定
命令格式:alias 自定义命令别名=“命令”
例:[root@localhost ~]#alias cd=ls
可以看到本来原先cd的命令变成了ls的命令
unalias是删除别名
命令格式:unalias 自定义命令别名
例:[root@localhost ~]#unalias cd
alias可以显示所有别名
命令格式:[root@localhost ~]#alias
注意:别名不要使用已经有的命令
别名优先级:绝对路径>别名>内部命令>hash缓存>外部命令
3.du(disk usage)
du是用来查看当前文件夹的总磁盘占用量
在opt文件下举例:
-a:统计磁盘空间占用时包括所有的文件,而不仅仅只统计目录
[root@localhost opt]#du -a
-h:以人性化的方式显示出统计结果
[root@localhost opt]#du -h
-s:只统计所占用空间总的大小,而不是统计每个子目录、文件的大小
[root@localhost opt]#du -s
注:-a和-s无法同时使用
du -dn(n是想看到第几级)
文件夹是嵌套的,当我们只想显示第一级或第二级子文件夹的信息而不想统计的太深,那么我们就可以用du -dn选项来控制(n是想统计到的哪一级的级数)
例:
注:ls-l和du的区别在于
ls-l显示文件的真实大小
du显示文件在磁盘中的占用
4.mkdir
mkdir的作用是创建文件夹
命令格式:[root@localhost opt]#mkdir 文件夹名称
分别创建多个文件夹
命令格式:[root@localhost opt]#mkdir 文件夹名称 文件夹名称 文件夹名称
递归/依次创建文件夹
命令格式:[root@localhost opt]#mkdir -p 文件夹名称/文件夹名称/文件夹名称
递归在文件夹下创建文件夹并显示创建过程
命令格式:[root@localhost opt]#mkdir -pv {11,22,33}/{qq,ww,ee}
注:-p是递归创建文件夹,-v是显示过程,-pv是创建完后显示所有信息
5.touch
touch是创建文件
命令格式:[root@localhost opt]#touch 文件名称
6.cp
cp是(备份)复制文件或目录
命令格式:[root@localhost ~]#cp 选项 目标位置
例:这里将家目录下的esdeath99文件复制粘贴到根目录下opt文件夹中的qwe文件夹中
选项 | 说明 |
-a | 完成保留所有信息(包括软连接) |
-f | 覆盖目标同名文件或目录时不进行提醒,直接强制复制 |
-i | 覆盖目标同名文件或目录时提醒用户确认 |
-p | 复制时保持源文件的权限、属主及时间标记等属性不变 |
-r | 复制目录时必须使用此选项,表示递归复制所有文件及子目录 |
-v | 可视化 |
-u | 相当于增备,差异备份(只对文件夹起作用) |
注:此处cp是别名,默认打出是cp -i,加\cp直接覆盖
7.删除文件
rm(remove)删除
选项 | 说明 |
-f | 强制 |
-i | 交互 |
-r | 递归(删除目录所需) |
[root@localhost ~]#rm -f:强制删除
[root@localhost ~]#rm -r:递归删除
[root@localhost ~]#rm -rf:文件/目录全部删除
三、Linux目录
1.基础知识
1.文件系统的目录结构(常识)
1.以.开头的文件均为隐藏文件
2./为开头是根,/不在第一位就是分隔符
3.文件名最长255个字符
4.区分大小写
5.给文件取名不要太花里胡哨
一级目录 | 功能(作用) |
/bin/ | 存放系统命令,普通用户和root都可以执行,放在/bin下的命令在单用户模式下也可以执行,普通用户存放二进制文件、命令 |
*/boot/ | 系统启动目录,保存与系统启动相关的文件,如内核文件和启动引导程序(grub)文件等,linux内核 |
*/dev/ | 设备文件保存位置,存放硬件设备,如硬盘 |
*/etc/ | 系统配置文件、用户配置、网卡配置等,配置文件保存位置,系统内所有采用默认安装方式(rpm 安装)的服务配置文件全部保存在此目录中,如用户信息、服务的启动脚本、常用服务的配置文件等 |
/home/ | 普通用户的主目录(也称为家目录)。在创建用户时,每个用户要有一个默认登录和保存自己数据的位置,就是用户的主目录,所有普通用户的主目录是在 /home/ 下建立一个和用户名相同的目录。如用户 esdeath 的主目录就是 /home/esdeath |
/lib/ | 系统调用的函数库保存位置(c语言 写的一些固定格式的代码,方便调用) |
/media/ | 挂载目录,系统建议用来挂载媒体设备,如软盘和光盘 |
/mnt/ | 挂载目录,早期 Linux 中只有这一个挂载目录,并没有细分。系统建议这个目录用来挂载额外的设备,如 U 盘、移动硬盘和其他操作系统的分区 |
/misc/ | 挂载目录。系统建议用来挂载 NFS 服务的共享目录。虽然系统准备了三个默认挂载目录 /media/、/mnt/、/misc/,但是到底在哪个目录中挂载什么设备可以由管理员自己决定。例如,笔者在接触 Linux 的时候,默认挂载目录只有 /mnt/,所以养成了在 /mnt/ 下建立不同目录挂载不同设备的习惯,如 /mnt/cdrom/ 挂载光盘、/mnt/usb/ 挂载 U 盘,都是可以的 |
/opt/ | 第三方安装的软件保存位置。这个目录是放置和安装其他软件的位置,手工安装的源码包软件都可以安装到这个目录中。不过笔者还是习惯把软件放到 /usr/local/ 目录中,也就是说,/usr/local/ 目录也可以用来安装软件 |
/root/ | root 的主目录。普通用户主目录在 /home/ 下,root 主目录直接在“/”下 |
/sbin/ | 保存与系统环境设置相关的命令,只有 root 可以使用这些命令进行系统环境设置,但也有些命令可以允许普通用户查看,存放超级管理员使用的二进制文件 |
/srv/ | 服务数据目录,一些系统服务启动之后,可以在这个目录中保存所需要的数据 |
/tmp/ | 临时目录。系统存放临时文件的目录,在该目录下,所有用户都可以访问和写入。建议此目录中不能保存重要数据,最好每次开机都把该目录清空 |
/broc/ | 显示内存中的详细信息,虚拟文件夹 |
2.文件类型
文件 | 功能 |
. | 当前文件夹 |
.. | 当前文件夹的上一级目录 |
~ | 当前目录的家目录 |
- | 普通文件(纯文本、二进制、各种压缩文件等) |
c(character) | 字符设备(这些文件通常隐藏在 /dev/ 目录下,当进行设备读取或外设交互时才会被使用,例:键盘、鼠标等) |
d(directory) | 目录,类似 Windows 系统中的文件夹 |
l(link) | 软连接(类似类似 Windows 系统中的快捷方式 ) |
b(block) | 块设备(就是保存大块数据的设备,例:硬盘) |
s(socket ) | 套接字(套接字文件一般隐藏在 /var/run/ 目录下,用于进程间的网络通信,通常用在网络数据连接,可以启动一个程序监听用户的要求,用户可以通过套接字进行数据通信 ) |
p(pipe) | 管道文件,主要用于进程间通信单向传输,一个发一个输管道文件,其主要作用是解决多个程序同时存取一个文件所造成的错误 |