一、shell和内核的关系
1.1内核
1)计算机由各种硬件(运算器--CPU、控制器---CPU 、存储器、输入输出设备等)组成,系统内核就是使硬件间相互独立工作和协同工作即对硬件资源的管理、调度等。因为内核过于重要 所以不建议直接对内核操作(对于某些服务需要修改内核参数一般是通过管理工具进行)
2)Linux中具备一些图形工具如LVM---逻辑卷管理(存储设备)、RAID磁盘冗余阵列
图形界面的根本是调用脚本,通用性并不强
3)安装图形界面: yum groupinstall "X window System" Desktop;启动:startx
1.2 shell
1)Linux系统中输入的大多数命令,系统内核不能直接识别,能够解释这些命令让系统内核识别的工具就是shell,所以shell也叫解释器。
2)shell包裹着内核,接通内核某些API(用户接口),包括红帽在内的Linux版本,默认使用bash shell 解释器
二、bash解释器的优势
1)通过上下键调取曾经使用的命令(命令很多,可以用history命令查询)
2)命令或者参数,可以通过tab补全
3)可以批处理(如创建用户)
4)具备某些实用的环境变量(预设值的某些参数,如PATH、 SHELL)
三、Linux下常用的命令集
3.1命令格式:(命令+参数+对象)
参数:长格式(如--help):服务、程序调试等额外参数
短格式(如-h):执行简单的命令
对象:要处理的文件、目录、用户等等资源
3.1.1查看帮助命令
1)help 帮助命令 (属于Linux内部命令)
2)man 帮助命令 (属于Linux外部命令)
3)man 用法:man+命令名:用于查询命令的使用方式和参数
按键 | 用处 |
空格键 | 向下翻一页 |
PaGe down | 向下翻一页 |
PaGe up | 向上翻一页 |
Home | 直接前往首页 |
End | 直接前往尾页 |
/ | 从上至下搜索某个关键词,如“/linux” |
? | 从下至上搜索某个关键词,如“?linux” |
N | 定位到下一个搜索到的关键词 |
N | 定位到上一个搜索到的关键词 |
Q | 退出帮助文档 |
结构名称 | 代表意义 |
NAME | 命令的名称 |
SYNOPSIS | 参数的大致使用方法 |
DESCRIPTION | 介绍说明 |
EXAMPLES | 演示(附带简单说明) |
OVERVIEW | 概述 |
DEFAULTS | 默认的功能 |
OPTIONS | 具体的可用选项(带介绍) |
ENVIRONMENT | 环境变量 |
FILES | 用到的文件 |
SEE ALSO | 相关的资料 |
HISTORY | 维护历史与联系方式 |
3.2常用系统工作命令
3.2.1 echo命令
用于在终端输出字符串或者变量提取后的值:
[root@RHEL6 ~]# echo i am a learner
i am a learner
3.2.2 date命令
用于显示及设置时间的命令,用+开头的参数:
参数 | 作用 |
%t | 跳格[Tab键] |
%H | 小时(00~23) |
%I | 小时(00~12) |
%M | 分钟(00~59) |
%S | 秒(00~59) |
%j %m %Y | 今年中的第几天 月(01~12) 年 |
[root@RHEL6 ~]# date "+%Y-%m-%d %H:%M:%S"
2018-04-04 16:20:16
[root@RHEL6 ~]# date -s "20150101 10:10:10" //设定时间
Thu Jan 1 10:10:10 CST 2015
[root@RHEL6 ~]# date
Thu Jan 1 10:10:11 CST 2015
[root@RHEL6 ~]# ntpdate server 192.168.2.1 //指定ntp时间服务器
3.2.3 reboot 、poweroff 、shutdown
用于设备重启、关闭(必须具备超级管理员权限):
[root@RHEL6 ~]# su test
[test@RHEL6 root]$ poweroff
poweroff: Need to be root
[test@RHEL6 root]$ reboot
reboot: Need to be root
3.2.4 wget命令
用于在终端下载网络文件,格式:wget + url(网站地址):
[root@RHEL6 ~]# wget http://www.mqzzl.fun/mu.jpg
--2018-05-07 00:27:27-- http://www.mqzzl.fun/mu.jpg
Resolving www.mqzzl.fun... 47.104.195.140
Connecting to www.mqzzl.fun|47.104.195.140|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 29497 (29K) [image/jpeg]
Saving to: “mu.jpg”
100%[================================================>] 29,497 --.-K/s in 0.02s
2018-05-07 00:27:27 (1.57 MB/s) - “mu.jpg” saved [29497/29497]
参数 | 作用 |
-b | 后台下载模式 |
-P | 下载到指定目录 |
-t | 最大尝试次数 |
-c | 断点续传 |
-p | 下载页面内所有资源,包括图片、视频等 |
-r | 递归下载(当前站点所有的目录和目录内的内容) |
[root@RHEL6 ~]# wget -r -p http://www.mqzzl.fun/
3.2.5 ps命令
用于查看系统中进程状态,主要还是抓取PID(端口号):
参数 | 作用 |
-a | 显示所有进程(包括其他用户的进程) |
-u | 用户以及其他详细信息 |
-x | 显示没有控制终端的进程 |
[root@RHEL6 ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 19360 1536 ? Ss May06 0:02 /sbin/init
root 2 0.0 0.0 0 0 ? S May06 0:00 [kthreadd]
注意:参数使用上,长命令不允许联合使用;短格式和长格式也不能联和使用;短格式和短格式可以
3.2.6 top命令
用于动态的监控进程活动和系统负载信息,类似windows任务管理器:
[root@RHEL6 ~]# top
top - 00:52:12 up 2:16, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 142 total, 1 running, 141 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni, 99.8%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st
Mem: 1906556k total, 1100336k used, 806220k free, 52916k buffers
Swap: 4194296k total, 0k used, 4194296k free, 812312k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2553 root 20 0 45096 884 584 S 0.3 0.0 0:01.12 udisks-daemon
3003 root 20 0 15036 1256 948 R 0.3 0.1 0:00.10 top
3.2.7 pidof命令
用于查询某个进行服务的PID值(每个服务进程PID都是唯一的):
[root@RHEL6 ~]# pidof sshd
2764 1402
3.2.8 kill命令
用于终止指定的PID服务:
[root@RHEL6 ~]# pidof httpd
3086 3085 3084 3083 3082 3081 3080 3079 3077
[root@RHEL6 ~]# kill 3086 3085
[root@RHEL6 ~]# pidof httpd
3084 3083 3082 3081 3080 3079 3077 //只能杀死指定的PID
3.2.9 killall命令
用于终止一类服务(通过服务名称):
[root@RHEL6 ~]# killall httpd
[root@RHEL6 ~]# pidof httpd
[root@RHEL6 ~]# netstat -lnt | grep 80
[root@RHEL6 ~]# //PID被全部杀死
3.3常用系统状态检测命令
3.3.1 ifconfig命令
用于查看本机当前的网络配置和网络状态信息:
[root@RHEL6 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:BF:DE:31
inet addr:192.168.2.200 Bcast:192.168.2.255 Mask:255.255.255.0
inet6 addr: fd7b:a22e:43e6:0:20c:29ff:febf:de31/64 Scope:Global
inet6 addr: fe80::20c:29ff:febf:de31/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8003 errors:0 dropped:0 overruns:0 frame:0
TX packets:7430 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1405291 (1.3 MiB) TX bytes:1303049 (1.2 MiB)
还可以临时修改IP地址重启网卡失效
[root@RHEL6 ~]# ifconfig eth0 add 192.168.2.201
3.3.2 uname命令
用于查看当前系统相关信息(内核版本号、硬件架构、主机名称和操作系统类型等)
-a:完整查看系统内核、主机名、内核发行版本、节点名、发行时间、硬件名、硬件
台、处理器类型、操作系统名称等等:
[root@RHEL6 ~]# uname –a
Linux RHEL6 2.6.32-431.el6.x86_64 #1 SMP Sun Nov 10 22:19:54 EST 2013 x86_64
x86_64 x86_64 GNU/Linux
-r:只查看系统内核:
[root@RHEL6 ~]# uname -r
2.6.32-431.el6.x86_64
-n:只显示主机名:
[root@RHEL6 ~]# uname -n
RHEL6
查看系统版本:
[root@RHEL6 ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 6.5 (Santiago)
3.3.3 uptime命令
用于查看系统负载信息:
[root@RHEL6 ~]# uptime
02:53:12 up 34 min, 2 users, load average: 0.00, 0.00, 0.00
3.3.4 free命令
用于显示当前系统中内存使用信息:
[root@RHEL6 ~]# free
total used free shared buffers cached
Mem: 1906556 219524 1687032 0 14432 73100
-/+ buffers/cache: 131992 1774564
Swap: 4194296 0 4194296
注:buffers:磁盘缓存;cached:内存缓存
3.3.5 who命令
用于查看当前登录主机用户终端信息:
[root@RHEL6 ~]# who
root tty1 2018-05-07 02:19
root pts/0 2018-05-07 02:37 (192.168.100.1)
3.3.6 last命令
用于查看所有系统登录记录:
[root@RHEL6 ~]# last
root pts/0 192.168.100.1 Mon May 7 02:37 still logged in
root pts/0 192.168.100.1 Mon May 7 02:20 - 02:37 (00:17)
root tty1 Mon May 7 02:19 still logged in
reboot system boot 2.6.32-431.el6.x Mon May 7 02:18 - 03:03 (00:44)
3.3.7 history命令
1)用于查看使用过的命令,可以用!+数字执行历史命令:
[root@RHEL6 ~]# history
1 history
2 ifconfig
3 history
4 uname -r
5 ping
6 history
[root@RHEL6 ~]# !4
uname –r
2.6.32-431.el6.x86_64
2)默认存储最近的1000条,可以通过修改/etc/profile中的HISTSIZE变量进行变更
3)清空history命令:
-c:全部清空
[root@RHEL6 ~]# history -c
[root@RHEL6 ~]# history
1 history
-d+数字:清空指定命令
[root@RHEL6 ~]# history
1 uname -r
2 history
[root@RHEL6 ~]# history -d 1
[root@RHEL6 ~]# history
1 history
2 history -d 1
3 history
/etc/profile内增加一个参数 HISTCONTROL=ignorespace,可以灵活选择保存命令(命令前+空格)
[root@RHEL6 ~]# vi /etc/profile
[root@RHEL6 ~]# source /etc/profile
[root@RHEL6 ~]# uname -r
2.6.32-431.el6.x86_64
[root@RHEL6 ~]# uname -n
RHEL6
[root@RHEL6 ~]# history //可以看到没有保存uname-n
1 uname -r
2 history
3.4工作目录切换命令
3.4.1 pwd命令
用于查看当前的路径:
[root@RHEL6 ~]# pwd
/root
3.4.2 cd命令
用于目录切换
cd ~ | 返回当前用户家目录下 |
cd - | 返回上次所在位置 |
cd . | 进入当前目录 |
cd .. | 进入父目录(上级目录) |
cd +路径 | 最好从根开始 |
[root@RHEL6 ~]# cd /etc/sysconfig
[root@RHEL6 sysconfig]#
[root@RHEL6 sysconfig]# cd /var/
[root@RHEL6 var]# cd -
/etc/sysconfig
[root@RHEL6 sysconfig]# cd ~
[root@RHEL6 ~]#
[root@RHEL6 var]# cd /var/
[root@RHEL6 var]# cd ../root
[root@RHEL6 ~]#
3.4.3 ls 命令
用于显示当前命令的文件信息
参数 | 作用 |
-a | 显示所有(包括隐藏文件) |
-l | 以列显示文件属性、时间、大小等 |
-d | 显示目录属性等 |
-h | 以G/M/K为单位显示 |
[root@RHEL6 ~]# ls
anaconda-ks.cfg Documents install.log Music Public Videos
Desktop Downloads install.log.syslog Pictures Templates www.mqzzl.fun
[root@RHEL6 ~]# ls -l Downloads/ //不加参数d显示文件夹内的内容
total 0
[root@RHEL6 ~]# ls -ld Downloads/
drwxr-xr-x. 2 root root 4096 Apr 4 15:09 Downloads/ //加参数d显示文件夹的属性
3.5文本编辑命令---增删改查
3.5.1 查看命令
1)cat:用于查看纯文本文件,适用于内容较少的文件:
[root@RHEL6 ~]# cat install.log
Installing libgcc-4.4.7-4.el6.x86_64
Installing setup-2.8.14-20.el6_4.1.noarch
Installing tzdata-2013g-1.el6.noarch
-n 显示行号
[root@RHEL6 ~]# cat -n install.log
1 Installing libgcc-4.4.7-4.el6.x86_64
2 Installing setup-2.8.14-20.el6_4.1.noarch
3 Installing tzdata-2013g-1.el6.noarch
2)more:适用于查看长文本,显示百分比,只能向下翻页,不能回翻
[root@RHEL6 ~]# more install.log
Installing libgcc-4.4.7-4.el6.x86_64
Installing setup-2.8.14-20.el6_4.1.noarch
Installing tzdata-2013g-1.el6.noarch
Installing filesystem-2.4.30-3.el6.x86_64
--More--(4%)
3)less:适用于查看长文本,可以上下翻页
4)head:用于查看文件头部,默认头10行
–n指定显示多少:
[root@RHEL6 ~]# head -n 4 install.log
Installing libgcc-4.4.7-4.el6.x86_64
Installing setup-2.8.14-20.el6_4.1.noarch
Installing tzdata-2013g-1.el6.noarch
Installing filesystem-2.4.30-3.el6.x86_64
5)tail:用于查看文件尾部,默认尾10行
-n 指定显示多少:
[root@RHEL6 ~]# tail -n 5 install.log
Installing rootfiles-8.1-6.1.el6.noarch
Installing man-pages-3.22-20.el6.noarch
Installing words-3.0-17.el6.noarch
Installing redhat-indexhtml-6-6.el6.noarch
*** FINISHED INSTALLING PACKAGES ***
-f 用于动态查看
3.5.2 tr命令
用于临时替换:
[root@RHEL6 Downloads]# cat test.txt
hello
[root@RHEL6 Downloads]# cat test.txt | tr [a-z] [A-Z]
HELLO
3.5.3 diff命令
用于比较多个文本的区别:
[root@RHEL6 Downloads]# diff test.txt test1.txt
1c1,2
< hello
---
> HELLo
> good
注意:以<开始的行属于文件1,以>开始的行属于文件2。
3.6文件目录管理命令
3.6.1 touch命令
用于创建空白文件:
[root@RHEL6 Downloads]# touch test
[root@RHEL6 Downloads]# ls -l
total 0
-rw-r--r--. 1 root root 0 May 7 08:30 test
3.6.2 mkdir命令
用于创建目录:
[root@RHEL6 Downloads]# mkdir temp
[root@RHEL6 Downloads]# ll
total 4
drwxr-xr-x. 2 root root 4096 May 7 08:34 temp
-rw-r--r--. 1 root root 0 May 7 08:30 test
-p:递归创建目录:
[root@RHEL6 Downloads]# mkdir -p ./a/b/c
[root@RHEL6 Downloads]# ls -d ./a/b/c
./a/b/c
3.6.3 cp命令
用于复制:cp 源文件 目的文件:
[root@RHEL6 Downloads]# ls
a temp test
[root@RHEL6 Downloads]# cp test tsep
[root@RHEL6 Downloads]# ls
a temp test tsep
3.6.4 mv命令
用于移动(重命名):mv 源文件 目的文件:
[root@RHEL6 Downloads]# ls
a temp test tsep
[root@RHEL6 Downloads]# mv a b
[root@RHEL6 Downloads]# ls
b temp test tsep
3.6.5 rm命令
用于删除
-r:删除目录
[root@RHEL6 Downloads]# ls
b temp
[root@RHEL6 Downloads]# rm -r b
rm: descend into directory `b'? y
rm: descend into directory `b/b'? y
rm: remove directory `b/b/c'? y
rm: remove directory `b/b'? y
rm: remove directory `b'? y
[root@RHEL6 Downloads]# ls
Temp
-f:强制删除:
[root@RHEL6 Downloads]# ls
temp
[root@RHEL6 Downloads]# rm -rf temp/
[root@RHEL6 Downloads]# ls
[root@RHEL6 Downloads]#
注意:慎用rm -rf /*
四、组合使用命令集
4.1管道符
把前一个命令原本要输出到屏幕上的内容,当作后一个命令执行的条件
格式:命令A | 命令B | 命令C | …
如:输出ps aux命令的行数:
[root@RHEL6 Downloads]# ps aux | wc –l
135
如:修改root密码:
[root@RHEL6 Downloads]# echo zaq1xsw2 | passwd --stdin root
Changing password for user root.
passwd: all authentication tokens updated successfully.
4.2命令行的通配符
* | 匹配零个或者多个字符 |
? | 匹配单个字符 |
[0-9] | 匹配任何数字 |
[a-z] | 匹配小写字母 |
[A-Z] | 匹配大写字母 |
[135] | 匹配1、3、5中任何一个数字 |
[root@RHEL6 ~]# ll /dev/[a-z]da
brw-rw----. 1 root disk 8, 0 May 7 02:18 /dev/sda
[root@RHEL6 ~]# ps aux | grep -E ?shd
root 1719 0.0 0.0 66604 1184 ? Ss 02:18 0:00 /usr/sbin/sshd
root 2051 0.0 0.2 100352 4048 ? Ss 02:37 0:02 sshd: root@pts/0
root 6711 0.0 0.0 103252 836 pts/0 S+ 09:14 0:00 grep -E ?shd
4.3转义字符
4.3.1反斜杠(\)
用于使反斜杠后面的一个变量变成单纯字符串:
[root@RHEL6 ~]# echo $SHELL
/bin/bash
[root@RHEL6 ~]# echo \$SHELL
$SHELL
4.3.2单引号(' ')
用于转义其中所用变量作为单纯字符串:
[root@RHEL6 ~]# echo $SHELL
/bin/bash
[root@RHEL6 ~]# echo '$SHELL'
$SHELL
4.3.3双引号(“ ”)
用于保留其中的变量属性,不进行转义:
[root@RHEL6 ~]# echo $SHELL
/bin/bash
[root@RHEL6 ~]# echo "$SHELL"
/bin/bash
4.3.3反引号(` `)
用于把引号里面的命令执行后返回结果:
[root@RHEL6 ~]# echo uname -r
uname -r
[root@RHEL6 ~]# echo `uname -r`
2.6.32-431.el6.x86_64
原文地址:http://blog.51cto.com/1028195/2113981