一,bash介绍
bash shell 命令解释器,是内核和用户的交互
用于文件管理、目录管理、网络管理、用户管理、权限管理、磁盘管理、软件管理
--------通俗来说它就是个软件即应用程序,计算机的三大体系结构:应用程序、操作系统、硬件;操作系统+硬件=平台,在此平台上开发应用程序,应用程序在不用的操作系统运行即跨平台;操作系统的内核用来控制和管理硬件,同时为应用程序提供接口,所以它是内核和用户的交互。
执行方式:命令 / 脚本
命令:适合少量的工作,效率低
脚本:shell编程,适合复杂性的工作,效率高
二,命令行结构
[root@babysnow ~]# 管理员的命令行结构
[test@babysnow ~]$ 普通用户的命令行结构
[ ] 括号的作用
root 本身就是超级管理用户 所在位置是当前登录用户
@ 分隔符
babysnow 当前系统的主机名
~ 当前用户的家目录
# 超级管理员命令提示符
$ 普通用户命令提示符
三, Linux的命令组成
语法:
命令 -【选项】 参数
command -option arguements
1,命令是整条shell命令的主题
2,选项是用来调节命令的具体功能
3,参数是命令要操作的对象,文件或目录
4,中括号中的选项或者参数,可有可无
5,命令,选项及参数两两之间至少要有一个空格分割
6,命令的位置不能发生变化,选项和参数可以调换
命令
[root@babysnow ~]# ls
anaconda-ks.cfg
命令+选项
[root@babysnow ~]# ls -l
总用量 4
-rw-------. 1 root root 1190 7月 18 00:36 anaconda-ks.cfg
命令+选项+参数
[root@babysnow ~]# ls -l /root/
总用量 4
-rw-------. 1 root root 1190 7月 18 00:36 anaconda-ks.cfg
选项:
引导格式,用横杠“-”表示单个字符 例如 -l
引导长格式,用长横杠“--”表示多个字符,基本上都是一个单词,比如 --help
使用多个横杠可以组合, -h -l -a,组合成-ahl(顺序都可以)
常见命令报错及解决:
[root@babysnow ~]# ls-l
-bash: ls-l: 未找到命令
报错解决:
1,命令行写错了
2,命令没有写错,系统没有安装这个命令,需要安装才能使用
(此处因为命令与选项之间没有空格)
[root@babysnow ~]# ls -l /toor
ls: 无法访问/toor: 没有那个文件或目录
解决:
1,文件或者目录名称写错了
2,路径记错了
电脑报错那就是错了,believe in computer,仔细检查~~~
四, bash特征
yum install -y bash-completion 下载bash命令补全
1,tab键盘补全
命令补全
us
useradd usermod users usx2yloader
userdel usernetctl usleep
选项补全
参数补全 文件的路径补全
2, 快捷键
control c 取消当前的设置
control d 退出当前登陆用户,系统帮助执行一个命令 logout
control l 清屏
control a 将光标移动到当前行的行首
control e 将光标移动到当前行的行尾
control 左右方向键 向左/右移动一组字符 (mac本不支持)
control u 剪切光标及前面的所有内容(删除整行)
control y 粘贴(粘贴剪切的内容)
control k 删除光标后面的内容
control w 删除一组字符串 从后往前删
delete 从前往后删除字符(小键盘里的delete,mac本不支持)
control r 搜索历史命令
control s 锁定屏幕 输入的操作也会执行 只是看不到
control q 解锁
esc. 获取上一条命令的最后的参数
!! 执行上一条命令
!ls 执行最近一次以ls开头的命令
3, 命令历史记录
history 记录所有执行过的命令
! 24 执行历史记录中第24条命令
-d 删除指定的一条历史记录
-w 将历史记录写入文件中 ,默认写到.bash_history里
-c 清除历史记录
4, alias 查看系统所设置的别名
[root@babysnow ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
自己设置别名alias zx=‘cat .bash_history’ 只能当前临时生效
5, 获取命令的帮助方法
1,man ls (man + 命令名字)
获取命令的帮助及语法
2,help 只能查看系统的内置命令
3,--help 有的命令不支持 ,基本上选项帮助
[root@babysnow ~]# ls --help
4,info 非常详细的显示命令的说明信息
[root@babysnow ~]#info ls显示的很高级但是看不懂...
5, 网络 帮助 https://man.linuxde.net/
linux.web3.xin
6,关机重启及注销命令
关机
shutdown -h 0/now 立刻关机(0或者now)
shuedown -h 10 10分钟后关机 (单位默认分钟)
shuedown -h 11:40 定时关机
shutdown -c 取消关机时间设置
poweroff 关机
systemctl poweroff centos 6要求的
halt 只关闭系统,不关闭电源
halt -p (poweroff) 所有都关掉包括电源
init 0 通过运行级别进行关机(后期会讲到级别)
重启
shutdown -r 0 立刻开机
shutdown -r now 立刻开机
shutdown -r 10 10分钟后开机
shutdown -r 11:40 定点重启
shutdown -c 取消重启或关机的操作
reboot 重启
init 6 运行级别进行重启
注销
logout 退出当前登陆的用户 (只能退出登陆式shell,用户名和密码的方式)
control d 快捷键退出指令
exit 退出当前退路的用户或窗口(可以退出非登陆式shell,脚本就是非登陆式shell)
7,获取IP的命令
ip (centos7自带的)
ip a :(address)获取所有网卡的信息
ip a s ens33 (ip addres show ens33):查看某个网卡的信息
ifconfig :(安装命令 yum install -y net-tools)
[root@babysnow ~]# ifconfig ens33
hostname -i :显示ipv6 ipv4 地址 (mac本不支持)
hostname -I:显示外网的网址
curl ifconfig.me: 获取公网的地址,...等等其他命令可百度
8, 系统目录结构
windows 目录结构
C:\windows\user
D:\download
Linux的目录结构
所有的的目录的起点或者顶点都是根 / 类似于倒挂的树形结构
Linux中必须知道必须会的文件或目录
[root@babysnow ~]# ls -1 /
四个软连接文件
都在/usr/这个目录下面
bin :普通用户可以使用的命令 软连接
sbin :管理员可以使用的命令
lib : 库文件 32位的库文件
lib64 :64位的库文件
boot :系统启动引导目录 存放的是系统启动文件
dev :设备目录
/dev/cdrom -> sro 系统的光盘镜像设备
=
/dev/sr0
/dev/zero :产生字符设备的目录 源源不断的产生字符
/dev/null : 黑洞设备 垃圾回收站 回收的数据
/dev/random : 产生随机数的设备 $RANDOM
/dev/pts : 所有的终端目录
/dev/stderr :错误输出设备
/dev/stdin :标准输入
/dev/stout :标准输出
/dev/sda :第一块物理磁盘
/dev/sda 1 :第一个分区
/dev/sda 2 :第二个分区
/dev/sda 3 :第三个分区
/etc 非常重要 系统的配置目录 存放配置文件
etc/sysconfig/network-scripts/ifcfg-* 网卡配置文件 ,后面加上自己网卡信息
/etc/hostname 主机名配置文件
/etc/resolv.conf 本地DNS配置文件
/etc/hosts 主机名与IP的映射关系目录 本地域名解析文件
/etc/fstab 系统挂载目录 开机自启动挂载列表
/etc/passed 系统用户文件 所有的用户设备
/home 所有普通用户的家目录 /hone/test
/media 临时挂载目录 可移动设备
/mnt 临时挂载目录 光盘镜像挂载到这里
/opt 早期第三方的软件安装目录
/proc 实时反映进程运行时的状态 仪表盘
/root 管理用户root的家目录
/run 进程运行时产生的pid文件
/srv 物理设备的相关文件
/sys 物理设备的相关驱动信息
/tmp 公共目录 所有的用户都可以在这里管理自己的文件
(一定时间不妨问,系统会定时清理目录下的文件)
/usr 相当于windows目录 系统程序目录
/usr/local 软件安装目录
/var 可变的目录 日志
/var/log 系统日志目录
/var/log/messages 系统级别的日志
/var/log/secure 用户登陆日志
/var/tmp 进程运行时产生的临时文件
/var/run 进程运行时产生的pid文件
定位:
包含完整的文件名称及位置信息,路径,就是系统对文件的一种定位方式
绝对路径 : 完整的路径
所有以根开始或者以~开始 都是绝对路径
[root@babysnow ~]# ll /etc/hosts
-rw-r--r--. 1 root root 158 6月 7 2013 /etc/hosts
相对路径 : 不是以根或者~为开头的 就是相对路径
[root@babysnow etc]# ll hosts
-rw-r--r--. 1 root root 158 6月 7 2013 hosts
点 . 表示当前目录
点点 .. 表示当前目录的上一级目录
9,基础管理命令
1,pwd 显示当前的目录
[root@babysnow ~]# pwd
/root
以绝对目录的形式显示所在的位置 所在的目录路径
2,cd 切换目录路径
cd 或 cd~ cd /root :切换当前用户家目录
cd / 切换到跟目录
cd . 保持原位置不动
cd .. 切换到当前目录的上一级目录
cd - 返回到上一次所在的目录
[root@babysnow ~]# cd /opt
[root@babysnow opt]# cd -
/root
3, ls 列出目录的列表信息
选项:
ls 直接用,针对当前目录进行操作
ls -l := ll (系统别名)以长格式形式显示目录列表信息
ls -a :显示所有文件 ,包括隐藏文件,以.为开头的文件都是隐藏文件
[root@babysnow ~]# ll -a
总用量 28
dr-xr-x---. 2 root root 135 7月 18 01:12 .
dr-xr-xr-x. 17 root root 224 7月 18 00:35 ..
-rw-------. 1 root root 1190 7月 18 00:36 anaconda-ks.cfg
-rw-------. 1 root root 500 7月 18 14:55 .bash_history
-rw-r--r--. 1 root root 18 12月 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 12月 29 2013 .bash_profile
-rw-r--r--. 1 root root 176 12月 29 2013 .bashrc
-rw-r--r--. 1 root root 100 12月 29 2013 .cshrc
-rw-r--r--. 1 root root 129 12月 29 2013 .tcshrc
ls -i :显示文件的inode号,即索引节点
ll -d: 显示目录本身信息
[root@babysnow ~]# ll -d /etc
drwxr-xr-x. 73 root root 8192 7月 18 15:43 /etc
ll -h : 以字节大小格式显示文件大小
ll -S: 以文件大小的方式进行排序显示
ll -t :根据时间进行排序
ll -r : 倒叙排序
ll -F:给不同文件加上不同的标识符
/ : 表示的是目录
* :可执行的文件
= :socket 文件 套接字文件
| :管道文件
@:普通文件 ,不显示
ls -1 :把文件名按照行的形式显示
4, tree 树形结构显示目录列表
yum install -y tree 安装tree命令
选项:
tree -a : 显示所有文件,包括隐藏文件
tree -d : 只显示目录文件
tree -f : 以绝对路径的形式记录文件的路径
tree -F: 给不同的文件加上不同的标识符
tree -L: 指定显示目录的层级
5, mkdir 创建目录
mkdir -v 显示创建过程
mkdir -p 创建多级目录 目录存在时不会再次创建也不会报错
mkdir -m 创建目录时修改目录默认权限
mkdir { } 花括号里生存序列
[root@babysnow ~]# echo {1..10}
1 2 3 4 5 6 7 8 9 10
注意,与..的区别;有序的用.. ;无序的用逗号
6,touch 创建文件 创建的是空文件
文件存在时,不会报错,会修改文件创建时间
《在Linux系统中,一切皆文件》
Linux系统中区分大小写, windows中不区分大小写
[root@babysnow ~]# touch test{1..5}
[root@babysnow ~]# ll /root
总用量 4
-rw-------. 1 root root 1190 7月 18 00:36 anaconda-ks.cfg
-rw-r--r--. 1 root root 0 7月 18 17:49 test1
-rw-r--r--. 1 root root 0 7月 18 17:49 test2
-rw-r--r--. 1 root root 0 7月 18 17:49 test3
-rw-r--r--. 1 root root 0 7月 18 17:49 test4
-rw-r--r--. 1 root root 0 7月 18 17:49 test5
7, cp 复制 拷贝
选项:
cp -r 递归拷贝,拷贝目录,否则拷贝不了目录
cp -p 拷贝的时候保持属性信息
cp -d 复制的时候保持软连接 否则默认拷贝的是源文件
cp -a 即-rdp
当文件已经存在时,提示是否覆盖
cp -i 当文件存在时提示是否覆盖 系统自在别名
命令行前加\ 取消别名\cp -i 便会提醒是否覆盖
cp -t 把源文件和目标目录的位置进行替换
8, mv 移动 重命名文件夹
移动目录,不会报错
在移动的过程中重命名文件
mv -i 文件存在时 提示是否覆盖
mv -t 把源文件目标目录的位置进行替换
mv -f 强制覆盖,不会提示是否覆盖
9, rm 删除命令 非常危险的命令
选项:
rm -i : 删除时提示 是否确认删除
rm -f:强制删除
rm -r:递归删除 ,删除目录时候需要用上
删除所有 * (通配符,所有的意思) rm -rf ./* 删除当前目录下的所有 不包含隐藏文件
10,显示文件内容命令
1, echo :讲你想要的内容输出到屏幕上面 ;创建文件 ;打印变量 ;输出颜色 ; 改变文件内容
[root@babysnow ~]# echo hello
hello
[root@babysnow ~]# echo 'hello'
hello
[root@babysnow ~]# echo "hello"
hello
echo -n : 不自动换行
echo -e :支持特殊字符
\n
[root@babysnow ~]# echo -e "hello\nihao"
hello
ihao
\t tab键 (空格及改变引号不影响)
[root@babysnow ~]# echo -e "hello\tnihao"
hello nihao
[root@babysnow ~]# echo -e "hello \t nihao"
hello nihao
[root@babysnow ~]# echo -e 'hello \t nihao'
hello nihao
> 标准输出重定向 如果文件存在,会清空文件内容 在将你输出的内容重定向进去
>> 标准输出追加重定向 如果文件存在,不会清空文件的内容 会将你的内容追加文件的底部
2,cat 显示文件内容的命令 完整的显示一个文件的内容
创建/合并文件
选项:
cat -n : 显示行号
cat -A : 给每行结尾加上标识符 (如果有空行 会容易识别出)
创建新文件,EOF可以是其他字符
[root@babysnow ~]# cat >aaa<
> 123
> 345
> EOF
[root@babysnow ~]# cat aaa
123
345
[root@babysnow ~]# cat bbb
345
678
890
合并文件
[root@babysnow ~]# cat aaa bbb
123
345
345
678
890
[root@babysnow ~]# cat aaa bbb >ccc
[root@babysnow ~]# cat ccc
123
345
345
678
890
如果cat aaa bbb >>ccc ,就是把aaa 和bbb的内容重复到ccc
[root@babysnow ~]# cat aaa bbb >>ccc
[root@babysnow ~]# cat ccc
123
345
345
678
890
123
345
345
678
890
3, more 分页显示文件内容,文件显示内容后会自动退出
内部指令
空格或者f键 向下翻页
b键 向上翻页
回车键 向下一行
q 退出
h 指令帮助
= 当前光标所在的行号
/内容 搜索要过滤的内容 没有高亮显示
n 向下搜索 不能向上
选项:
more -5 指定一页显示5行
more +5 从第五行开始显示
4,less 分页显示文件内容 文件内容显示完后不会自动退出
内部指令
空格或者f键 向下翻页
b键 向上翻页
回车键 向下一行
q 退出
h 指令帮助
= 显示当前页从第几行到第几行 总共多少行
显示到此页,已经显示了多少字节 子节多少 显示的进度
/内容 搜索要搜索的内容会高亮显示
n 向下查找
N 向上查找
选项:
less -N 显示行号
less -i 搜索到时候,忽略大小写
5, head 显示文件头部信息 默认显示前十行
选项:
head -n : 取消默认输出
head -n 2或 head -2 :显示前两行
head -c :取出一个文件开头的字符,默认5个字符
6, tail 显示文件尾部信息 默认显示最后十行内容
选项:
tail -n 1 或者tail -1 显示最后一行内容
tail -c :取出文件的最后几个字符,默认5个字符(注意换行符也算一个字符)
tail -f :实时查看文件内容的底部变化 查看日志
tail -F:实时查看文件内容的底部变化 文件不存在时 会一直搜索到有为止
7, tailf 实时查看文件内容的变化 = tail -f
当文件内容没有变化时,不会去读区磁盘,减少磁盘的读写
选项:
tailf -n :取消默认输出
11, 文件查找命令
1,locate 根据本地的数据库表进行查找文件 系统每天更新一次
yum install -y mlocate
updatedb 更新数据库,每次手动更新
locate选项:
-i 搜索到忽略大小写
-r 简单运行正则表达式
2, whereis 查找系统的二进制文件以及说明文件和源代码文件 (只查找系统自带的)
选项:
-b:只查找二进制文件
-m:只查找说明文件
-s:只查找源代码文件
3,which 查找命令的绝对路径
4, type 显示命令类型 (内部或外部命令)
选项:
-a :显示内置命令的路径
-p : 只显示命令的绝对路径(如果是外部命令的话)
5, find 查找文件
选项:
-type 根据文件类型查找
f 普通文件
d 目录
l 软连接
-name 根据文件名称查找
"hostname" 精确查找
"*hostname" 以hostname为结尾
"hostname*" 以hostname为开头
"*hostname*" 文件包含hostname
-iname 忽略大小写
12, 文件的上传与下载
本地的上传与下载 yum install -y lrzsz (Mac本不能使用)
1,rz 从windows中上传到Linux中,不能上传目录,不能上传大于4G的文件
rz -E :文件已经存在时,进行接着上传,重命名,在文件后面加上点数字
2, sz下载
mac本:
scp -rp /etc/hosts [email protected]:/opt
scp -rp [email protected]:/etc/hosts /opt/下载到linux系统上
3, wget 联网从远程下载
-q 静默输出 不显示下载过程
-O 指定下载的路径和名称
--limit-rate =10k 限速
4, curl 通过url规则进行文件传输的 测试网址
选项:
-I 获取网站请求的头部信息
-s 静默输出
-o 把要下载的内容输入到指定的文件当中