快速掌握Linux这篇文章就够了。
服务器路径
命令符号 | 释义 |
---|---|
/ | 根目录 |
/bin | 二进制可执行命令 |
/dev | 设备特殊文件 |
/etc | 系统管理和配置文件 |
/etc/rc.d | 启动的配置文件和脚本 |
/home | 用户主目录的基点 |
/lib | 标准程序设计库 |
/sbin | 超级管理命令 |
/mnt | 系统提供这个目录是让用户临时挂载其他的文件系统 |
/root | 系统管理员的主目录 |
/Lost+found | 这个目录平时是空的, 系统非正常关机而留下“无家可归”的文件 |
/proc | 虚拟的目录,是系统内存的映射 |
/usr | 应用程序和文件几乎都在这个目录. |
/var | 某些大文件的溢出区 |
boot | 内核文件 Linux 系统文件(100MB-200MB) 服务器500MB |
opt | 临时文件 |
常用快捷键
图形界面 到 字符界面Ctrl Alt Fn (F1-----F6) init 3
字符界面 到 图形界面 Alt F7 init 5
Tab键 :自动补齐
反斜杠\ :强制换行
ctrl+u 清空至行首
ctrl+k 清空至行尾
ctrl+L 清屏
ctrl+c 取消本次命令编辑
touch 创建文件
mkdir 创建目录 mkdir -p 创建嵌套的多层目录结构
cd 切换工作目录 cd - 切换两个目录 cd .. 返回上个目录
du 统计目录及文件 du -s 只统计大小 du -a 统计所有文件 du -h 人性化显示
du -sh \* 查看所有文件及大小
pwd ------- 查看当前所在位置
vim ------查看日志(编辑器)
Ls ------ 打印(当前目录下所包含的内容)ls 显示目录内容(ls=ll)
./ ------直接运行脚本
查看帮助
help, -help man info (man ls)
常用命令 uname 查看系统信息及内核版本(-a 显示主机;-r 显示内核版本)
hostname 查看主机名
vim /etc/sysconfig/network 更改主机名
ifconfig 查看网络信息
shutdown -h now | poweroff | init 0 关闭计算机
shutdown -r now | reboot | init 6 重启计算机
Ln软链
Ln链接文件
Ln 要链接的文件 链接到什么地方
ln 创建链接文件
ln -s 软链接 ln 硬链
CP 复制
cp -r 递归复制整个目录树 cp=cp-i cp -r 递归复制
cp -p 保持源文件的属性不变
cp -f 强制覆盖目标同名文件或目录
cp -i 需要覆盖文件或目录时进行提醒
RM 删除
rm -rf 递归强行删除文件或者目录 不进行提醒
rm -f 强行删除文件或者目录,不进行提醒
rm -r 递归删除整个目录树
rm - i 删除文件或者目录时提醒用户确认
MV 移动(改名)
Cat 查看文件
More 分页查看文件 (不可返回)
Less 分页查看文件 (可返回)
Head 查看文件头(前10行)
Tail 查看文件尾 (后10行)
WC 统计
wc -l 统计行数
wc -w 统计单词个数
wc -c 统计字节数
压缩指令
压缩 (仅限文件)
- gzip
- bzip2
表示高压缩比:
- gzip -9
- bzip2 -9
解开已经压缩的文件
- gzip -d
- bzip2 -d
Tar 归档
口令打包压缩:
Tar 要打包压缩到什么地方 要打包压缩的文件
单个解释用法:
tar -c 创建 . tar格式的包文件
tar -x 解开. tar格式的包文件
tar -v 查看详情信息
tar -f 表示使用归档文件
tar -p 打包时保留原始文件及目录的权限
tar -t 列表查看包内文件
tar -C 解包时指定释放的目标文件夹
tar -z 调用gzip程序进行压缩或者解压
tar -j 调用bzip2 程序进行压缩或者解压
组合命令:
tar -cvf 打包
tar -zcvf 打包压缩
tar -zcvf XXX.tar.gz XX
tar -xvf 解压
tar -xvf xxxx.tar.gz -C aaa 解压到指定目录
打包压缩---- tar -zcvf
解压 ----- tar -zxvf
指定位置解压--- tar -zxcf -C
xx.bz2用bzip2 -d解压
xx.gz用gzip -d解压
xx.tar.gz 用-zxvf解压
xx.tar.bz2用-jxvf解压
常用
打包:
1、tar -zcvf a2data.tar.gz ./a2data.cn/*
2、tar -zcvf a2data.tar.bz2 ./a2data.cn/*
---- 将a2data.cn文件夹下统一打包 ------
解压(万能):
tar -xf a2data.tar.bz2 ./
---- 解压到当前路径下----
VI 编辑器
命令模式:
vim/vi ESC
输出模式:
a、i、o等键
末行模式:
(大写)A键
工作模式:命令模式 输入模式 末行模式
a #光标后面写
i #光标前面写
o #下一行写
dd #删一行
n+dd #删几行
d$ #删除光标后面的同一行 (删光标)
d^ #删除光标前面的同一行 (不删光标)
x #删光标
X #删光标前面的
yy #复制
p #黏黏到下一行
P #黏黏到上一行
u #撤销上一步
U #撤销这一行的所有修改
:q! #不保存退出
:w #保存
:wq #保存退出
:/ #搜索的东西 搜索什么 从上到下搜索
% #搜索的东西 搜索什么 从下到上搜索
行号
:set nu #设置行号
:set nonu #不要行号了
跳转到首行gg
跳转到尾行G
\#G跳转到到第几行
:e/etc/passwd 打开新的编辑文件
:r/etc/passwd 读入其他文件内容
文件内个替换
s/old/new 替换行里的一个old换成new
s/old/new/g 整行替换 old换成new
#,#s/old/new/g #到#行替换 old换成new
%s/old/new/g 整篇替换 old换成new
c 末尾加入c 对每个替换提示用户进行确定
权限控制
属组权限
字符制表示八进制 000 - 777
字符表示法 | 八进制表示法 | 含义 |
---|---|---|
r | 4 | 读 |
w | 2 | 写 |
x | 1 | 执行 |
修改权限的命令
【 su - u2 切换用户】
1、 chmod 修改文件权限
2、 chown,chgrp 修改文件权属
U----所有者
O----其他人
a-----所有人
g-----所属组
chomd a=rwx root 所有都拥有读写执行权限
cat /etc/passwd|grep -v nologin|grep -v halt|grep -v shutdown|awk -F":" '{ print $1"|"$3"|"$4 }'|more
用户控制命令
- useradd 添加用户
- useradd -g 指定用户所属用户组
- useradd -G 用户组 指定用户所属的附加组
- useradd -u 用户号 指定用户的用户号
命令:指定用户所属组
useradd -g 组名 -u 用户号 用户名
例如
useradd -g g3 -u 510 u5
指定用户附属组
useradd -g 组名 -G 所在组 用户名
例如:
useradd -g g4 -G g1 u7
修改账户信息
- usermod 修改账户信息
- usermod -g 用户组指定用户所属的用户组
- usermod -l 锁定账号
- usermod -u 解锁账号
- userdel 删除账户
- userdel -r 删除宿主目录
设置密码
- passwd 设置密码
- passwd -l 锁定账号
- passwd -u 解锁账号
- passwd -s 查看账号状态
- usermod -L u1 u1账号被锁定
- usermod -U u1 u1账号被解锁
- passwd u1 设置u1 账号密码
linux 组账户
- groupadd 添加组成员
- groupdel 删除组成员
- gpasswd 设置组成员
- -a 添加成员
- -d 删除成员
- -M 定义成员列表
- gpasswd -a u1 g1 将u1加入到g1组中
- gpasswd -M u1,u2,u3,u4,u5 g2 将u1到u5添加g2组里
网络设置
存放位置 —-
以RedHat为例
/etc/sysconfig/network-scripts/ifcfg-etc0
修改ip
setup 交互式图形化工具
vim /etc/sysconfig/network-scripts/ifcfg-eth0
修改 DNS
/etc/resolv.conf
修改主机名
vim /etc/sysconfig/network
网卡控制
1.ifdown 关闭网卡 丨 ifup 开启网卡
2.service network stop 丨 start 丨restart
停止 开启 重启
开机自启动
chkconfig httpd on
开机自动挂载
设置开机自动挂载的路径
这个是当时学习在虚拟机上使用的多。
/etc/fstab
网络配置
IP:是一个逻辑地址,是由32位二进制构成
-------------------------------------------------------
setup
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 网卡
BOOTPROTO=none 是否自动获取IP ---> dhcp
HWADDR=00:0c:29:d6:96:fb MAC地址
ONBOOT=yes 是否随网络服务启动,eth0生效
NETMASK=255.255.255.0 子网掩码
IPADDR=192.168.18.76 IP地址
TYPE=Ethernet 类型为以太网
------------------------------------------------------
修改DNS
vim /etc/resolv.conf
search localdomain
nameserver 192.168.40.2
nameserver 202.106.0.20 联通
nameserver 114.114.114.114
nameserver 8.8.8.8 谷歌
nameserver 4.4.4.4 谷歌
系统程序
系统程序管理
RPM包 (Red Hat)
命名格式 : bash-3.1-16.1.i386.rpm
软件包名-版本号-发布次数-硬件平台-后缀名
rpm管理命令
rpm -q [子选项] 【软件名】
rpm -qa 查看系统中已安装的所有rpm软件包列表
rpm -qpi 通过.rpm 包文件查看该软件的详细信息
rpm -qpl 查看.rpm安装包内所包含的目录.文件列表
安装
rpm -i rpm包文件 安装一个新的rpm软件包
rpm - U 升级某个rpm软件包,若原本未安装,则进行安装
rpm -F 更新某个rpm 软件,若原本未安装,则放弃安装
安装
步骤1: tar 解包
步骤2: ./configure 配置
步骤3: make 编译
步骤4: make instal
步骤5: service httpd restart
service network restart
步骤6: cd /var/www/
Yum
本地:Yum(file本地)
命令:
cd /etc/yum.repos.d/xd
挂载:
1. 挂载光盘镜像到/mnt
mount /dev/cdrom /mnt
2. 配置yum源
vim /etc/yum.repos.d/xxx.repo
[xxx]
baseurl=file:///mnt/Server(flie本地)
enabled=1(是否启动文件 0否 1是)
gpgcheck=0
3. 安装
yum -y install 软件名称 (vsftpd)
4. 重启
yum service vsftpd start
服务器Yum
------服务器yum
0、命令:
cd /etc/yum.repos.d/
1、服务器端提供共享
-- 服务器安装一个ftp
-- 把光盘镜像挂载ftp的共享目录
挂载:
mount /dev/cdrom /var/ftp/pub
必须保证两台机器能够正常通信(能够ping通)
2、配置客户端
vim /etc/yum.repos.d/xxx.repo
[xxx]
baseurl=[ftp://192.168.18.221/dev/cdrom](ftp://192.168.18.221/dev/cdrom) /var/ftp/pub
【服务器ip地址及共享目录】
enabled=1(是否启动文件 0否 1是)
gpgcheck=0
开启 service vsftpd start
卸载
rpm -e 软件名
源代码(灵活定制)
tarball 封包
tar.gz 或者 tar.bz2
效验工具
md5 sum
磁盘管理
查看磁盘
fdisk -l
fdisk /dev/sdb 磁盘分区
指令 m
l list known partition 列出所有的分区
n add a new partition 创建一个新的分区
p print the partition table 打印分区内容
t change a partition's system id 改变分区系统id
w write table to disk an exit 保存并退出分区
d delete a partition 删除一个分区
查看分区
fdisk -l
fdisk /dev/sdb 磁盘分区
n----创建
d----删除
交换分区
fdisk /dev/sdb格式化为 swap 命令
mkswp /dev/sdb1
设置分区
mkswap /dev/sdb1 (做成交换文件系统)
free 查看一下内存
swapon /dev/sdb1 开启交换内存
free 查看内存
swapoff /dev/sdb1 关闭交换内存
free 最后查看 是否存在
文件系统
umount 卸载
mount 挂载
1、创建
mkfs - t ext3 /dev/sdb1
mkfs ext3/dev/sdb1
挂载
mount /dev/sdb /mnt
查看
df -hT
LVM逻辑卷
创建lvm
创建物理卷__PV
pvcreate /dev/sdb,c,d,e (创建pv)
pvdisplay(显示pv)
创建卷组
vgcreate /dev/feng_vg /dev/sdb,c,d,e(创建vg)
vgdisplay (显示vg)
拓展vg
pvcreate /dev/sdf(创建一个新的pv)
vgextend feng_vg /dev/sdf (扩展vg)
减少vg
vgreduce feng_vg /dev/sdc,d,e
移除vg
vgremove feng_vg
创建LV
lvcreate -L 30G -n feng_lv feng_vg
格式化
mkfs.ext3 /dev/feng_vg/feng_lv
挂载
mount /dev/feng_vg/feng_lv /aa
增加
先卸载
umount /aa
lvextend -L +10G /dev/feng_vg/feng_lv(检测硬件)
resize2fs /dev/feng_vg/feng_lv (重设文件系统大小)
减少LV
先卸载 (输入卸载名称或者目录)
umount /dev/feng_vg/feng_lv
缩小lv先缩小文件系统再缩小lv
e2fsck -f /dev/feng_vg/feng_lv (检测硬件)
resize2fs /dev/feng_vg/feng_lv 9g (将文件系统缩小到9G)
缩小lv
lveduce -L 9G /dev/feng_vg/feng_lv
移除lv
lvremove /dev/feng_vg/feng_lv
移除pv
pvremove /dev/sdb1 /dev/sdb2
lv 使用pe(默认4M) 的块
lvcreat -l (小写) 个数
lvcreat -L (大写) 指定容量
Mdadm 案例 raid5
一、添加RAID5
mdadm -C /dev/md5 -l 5 -n 3 /dev/sd[b,c,d]
二、创建文件系统
格式化:mkfs.ext3 /dev/md5
makir /raid5
三、挂载文件系统
mount /dev/md5 /raid5 挂载文件系统
df -hT 查看
RAID容错
mdadm /dev/md5 -f /dev/sdb 损坏磁盘b
mdadm -D /dev/md5 查看
mdadm /dev/md5 -a /dev/sdf 增加一块磁盘
mdadm /dev/md5 -r /dev/sdb 移除坏磁盘
echo "DEVICE /dev/sdc /dev/sdd /dev/sde /dev/sdf" >>(写入到哪) /etc/mdadm.conf 把UUID 写入 /etc/.......文件中
mdadm -Ds >> /etc/mdadm.conf 把UUID 读写出来
cat /etc/mdadm.conf
mdadm -S --scan /dev/md5 关闭RAID(需要卸载md5)
mdadm -A --scan /dev/md5 开启RAID
恢复快照!
SSH 协议
默认端口 :TCP:22 FTP:21 SSH:22 Apache(阿帕奇):80
步骤1: ping 192.168.18.221 (ping得通)
步骤2:ssh [root@192.168.18.221](mailto:root@192.168.18.221) 输入密码 进入服务端
步骤3: exit 退出服务端
ssh-keygen -t rsa(或者dsa) 客户机生成密钥
步骤4:ssh-copy-id -i .ssh/id_rsa.pub [root@192.168.18.221](mailto:root@192.168.18.221)
将密钥上传输到服务端。
步骤5:输入服务端密码 exit 再次输入 ssh [root@192.168.18.221](mailto:root@192.168.18.221)
便可直接进入!
计划任务
date----当前时间
ctrl+D 保存
Atq 查看任务列表
Atrm 删除任务
At 一次性计划任务
命令:at + 时间
Crontab 周期性计划任务
服务脚本名称: /etc/init.d/crond
crontab -e [-u 用户名] 编辑计划任务
crontab -l [-u 用户名] 查看计划任务
crontab -r [-u 用户名] 删除计划任务
周期条件
分 时 日 月 周 执行内容 0-59(整数) 0-23(整数) 1-31(整数) 1-12(整数) * run_command 50 3 2 1 * 执行命令或脚本 例如: 30 18 */3 * 1,3,5 /bin/rm-rf /var/ftp/pub/* 30 18 /3 * 1,3,5 /bin/rm -rf /var/ftp/pub/ 每隔3天在周1,3,5来清除FTP服务公共目录.
* , - / 表示该范围内的任意时间 表示间隔的多个不连续时间点 表示一个连续的时间范围 指定间隔的时间频率
搭建一个Apache论坛
该论坛是再虚拟机环境下运行,实机一样得操作。
恢复快照,检测是否有 阿帕奇
service httpd restart
源代码安装的 进入apache目录 删除即可
yum源安装的 使用 rmp卸载
一、挂载
mount /dev/cdrom /mnt 挂载镜像文件到/mnt
ls /mnt/Server/ 查看是否有文件
vim /etc/yum.repos.d/aa.repo 配置yum文件
二、安装
*【注:\* 为安装http 下所有包】
1.yum -y install http\* (先装阿帕奇服务)
2.yum -y install mysq\* (数据库)
3.yum -y install php\* (php开发语言)
三、启动
service httpd restart 启动阿帕奇
service mysqld restart 启动mysq
再去启动论坛包(Discuz_X2_SC_UTF8)copy到虚拟机
四、解压(zip压缩包)
cd /root/Desktop 切换到桌面
unzip Discuz_X2_SC_UTF8 解压Discuz到桌面
cp -r upload /uar/www/html/ 复制upload文件到html
cd /dav/www/html
ls 切换到html 查看是否有upload文件
(恢复快照)重新配置ip
vim /etc/sysconfig/network-scripts/ifcfg-eth0
ifdown eth0 && ifup etho
ping通(192.168.18.222)--本机
使用本机或者虚拟机浏览器进行访问
192.168.18.221 Red Hat 192.168.18.221 upload
五、安装
192.168.18.221/upload进入Dis 安装向导
修改阿帕奇权属权限
chown apache upload html -R
(-R递归修改所有权属)
六、创建数据库
mysql 进入数据库
show databases; 显示当前数据库
create database hehe; 创建 hehe
grant all on hehe.\* to ‘hh’@‘localhost’ identified by ‘123456’; (密码 ,授权)
数据库名:hehe
数据库用户名:hh
密码:123456
错误情况方案整理:
1、数据库模版错误
yum -y install php-\*
2、安装http中过程中途停止
yum -y install httpd-devel
3、安装mysql时出错
yum -y install mysql-connector-odbc
4、想卸载已安装http(apache)时,需在挂载镜像。
yum -y remove http\*
5、配置yum(配置服务器中文包)
yum install fonts-chinese.noarch
yum install m17n-db-common-cjk
yum install m17n-db-chinese
NFS网络文件系统
1.功能:文件共享
2.协议与端口: 需要RPC进行控制
NFS安装
yum install nfs-utils protmap(端口分放)
服务机 ip 221
vim /etc/exports (配置文件)
/aa 192.168.18.220/255.255.255.0(rw)
根下aa 共享(客户机)ip/子掩网码 rw 读写 ro 只读
cd / 切换到根下
mkdir aa 创建aa目录
touch aa/abc.txt 创建aa下abc文档
service nfs restart 重启nfs服务
客户机 ip 220
showmount -e 192.168.18.221
cd /
mkdir pub 创建pub 文件
mount 192.168.18.220:/aa pub 挂载到aa/pub
切换到服务机 更改权属
ll -d aa 查看aa权限
chmod o+w aa 修改aa权限(o 其他人)
service nfs restart 重启服务
切换到客户机
cd pub/
vim abc.txt 修改
touch aa.txt 创建一个文件
切换到服务机
cd aa ls aa 查看是否有文件
配置Samba
samba 软件包
samba.i386 : The Samba SMB server.
samba-client.i386 : Samba (SMB) client programs.
samba-common.i386 : Files used by both Samba servers and clients.
安装samba
mount /dev/cdrom /mnt 挂载
切换到挂载目录进行配置
cd /mnt/Server/
vim /etc/yum.repos.d/qq.repo
r /etc/yum.repos.d/rhel-debuginfo.repo
yum -y install samba
编辑文件
cd /etc/samba/ 切换
vim smb.conf 配置文件
vim /etc/samba/smb.conf
security=share ---共享
找见[public] 7yy 复制7行
p 粘贴
修改
[aa] --- 这是昵称
comment = nidaye ---注释信息
path = /aa ---要共享的目录
public = yes ---公共的匿名用户可以访问的
writeable = yes ---可被写
browseable = yes ---可被浏览
查看
cd / ls mdkir qq 返回根下查看 创建qq文件
cd qq touch aa.txt 切换到qq下创建aa文档
service smb restart 重启smb服务
修改文件权限
1、 chmod o+w /aa
2、 cd /aa chmod 777\*
Linux客户端
smbclient -L //192.168.18.221---查看共享信息
smbclient //192.168.18.221/share-进入共享目录
? 查看有哪些命令可以使用
ls 查看共享目录下有哪些内容
windows客户端
\192.168.18.221 ---可以看到共享目录
系统监控
PS 进程监控
ps工具标识进程的5种状态码
D 不可中断 | uninterruptible sleep(usually IO) |
---|---|
R 运行 | runnable (on run queue) |
S 中断 | sleeping |
T 停止 | traced or stopped |
Z 僵死 | a defunct ("zombie") process |
使用方法
ps [options] [--help]
ps | 的参数 |
---|---|
-A | 列出所有的行程 |
-w | 显示加宽可以显示较多的资讯 |
-au | 显示较详细的资讯 |
-aux | 显示所有包含其他使用者的行程 |
总述
标识 | 释义 |
---|---|
USER | 行程所拥有者 |
PID | pid |
%CPU | 占用cpu使用率 |
%MEM | 占用的记忆体使用率 |
VSZ | 占用的虚拟机体大小 |
RSS | 占用的记忆体大小 |
TTY | 终端的次要装置号码 |
COMMAND
所执行的指令
top动态监控系统进程
TOP动态
第一行任务队列信息 | - 01:06:08 当前时间 1 user 当前登录用户数 |
---|---|
第二、三行 进程和cpu | Tasks:158total 进程总数 |
最后两行为内存信息 | Mem:191272k total 物理内存总数 COMMAND 命令名/命令行 |
SAR
系统活动情况报告
指令软件包:sysstat-7.0.3-3.el5.i386mp
sar 命令常用格式
sar [options][-A][-o file]t[n]
其中:t:采样间隔 n 采样次数 默认值为1.
options未明朗行选项,sar常用选项如下:
-o file | 表示将命令结果以二进制格式存放在文件中 |
---|---|
-A | 所有报告的总和 |
-u | 输出cpu使用情况的统计 |
-v | 输出inode、文件和其他内核表的统计信息 |
-d | 输出每一个块设备的活动信息 |
-r | 输出内存和交换空间的统计信息 |
-b | 显示l/O和传送速率的统计信息 |
-a | 文件读写情况 |
-c | 输出进程统计信息,每秒创建的进程数 |
-R | 输出内存页面的统计信息 |
-y | 终端设备活动情况 |
-w | 输出系统交换活动信息 |
vmstat监控工具
vmstat 2 10 每隔两秒采集10次 |
---|
r---表示运行队列 |
b---表示阻塞的进程 |
swap----虚拟内存已经使用的大小 |
si----每秒从磁盘读入虚拟内存的大小 |
sp---每秒虚拟内存写入磁盘的大小 |
in----每秒cpu的中断次数 |
sy----系统cpu时间 |
id----空闲cpu时间 |
wt-----等等lO cpu 时间 |
iostat
主要可以显示cpu和1/O系统的负载情况及分区状态信息 直接执行iostat
lsof | 主要查看端口 |
---|---|
lsof -i 22 | 查看端口为22 的服务 |
losf -g gid | 显示归属gid的进程情况 |
lsof -i | 用以显示符合条件的进程情况 |
echo $$ | 当前进程号 |
kill -9 5641 | 杀死(结束)5641进程 |
strace | 跟踪进程执行时的系统调用和所接受的信号。 |
Find | 详解 常见用法 |
-name filenname | #查找名为filename的文档 |
-perm | #按执行权限来查找 |
-user username | #按文档属主来查找 |
-group groupname | #按组来查找 |
-mtime -n +n | #按文档更改时间来查找文档 -n指n天以内,+n指n天以前 |
-group groupname | #按组来查找 |
-type b/d/c/p/l/f | #查是块设备、目录、字符设备、管道、符号链接、普通文档 |
-size n[C] | #查长度为n块[或n字节]的文档 |
-prune | #忽略某个目录 |
shell脚本
Shell:操作系统与用户进行交互操作的界面,提供脚本语言编程环境,方便用户自动批量处理大量的工作任务。
红帽企业版linux一般默认的Shell是bash shell。
vim aa.sh #编辑aa脚本
cd /root/Desktop #切换到root下的桌面
mkdir aa #创建aa目录
touch aa/aa.txt #在aa目录下创建aa.txt
sh aa.sh #运行aa.sh脚本
echo $$ 查看当前进程号
bash 进入另一个shell
exit 退出
history 历史
语法 | 替换 |
---|---|
!! | 前一个命令 |
!n | 命令号n |
!-n | 倒数第n个命令 |
!cmd | 最后用来启动cmd的命令 |
多命令运行
#!/bin/sh 注释信息,可写可不写
echo $? 返回值:通过$?变量进行查看,返回0成功,不成功则返回非0值!
有条件的链接命令
&& 把两个命令链接在一起,只有第一个命令成功执行时,才会执行第二个命令。
|| 把两个命令链接在一起,只有第一个命令失败时,才会执行第二个命令。
Bash变量
例如:aa=DataScience
echo $aa 则会显示DataScience
Shell变量
A和B A=123 B=234
echo a:$A b:$B 显示AB变量内容
a:123 b:234
export A 将A变量提升为环境变量
bash
ps
echo a:$A b:$B---- 启动一个bash ,通过ps运行,确定有俩个shell在运行;父shell(B),子shell(A)由于被提升为一个环境变量,A shell从B shell中继承了它,相反,A shell对B shell的变量B一无所知。Bshell 属于sleep状态。结果如下
a:123 :b:
exit
echo a:$A b:$B 退出再次查看
a:123 b:234
unset A B----- 取消环境变量A和shell变量 B
命令替换
替换 | 语法 | 含义 |
---|---|---|
历史(history) | ! | 前一个命令行 |
大括号(Brace) | {} | 指定的文本 |
代字号(Tilde) | ~username | 用户的主目录 |
变量 | $,$ | Shell和环境变量 |
算数(Arithmetic) | $((...)) | 算数运算 |
命令替换 | ‘...’,$(...) | 运行在字shell中的命令的输出 |
路径名(Pathname) | [^...*]?,[...] | 文件系统中匹配的文件名 |
mkdir chap{a1,a2,a3,a4,}/{bb,cc} 需要先创建{a1,a2,a3,a4}
mkdir -p {a1,a2,a3,a4,}/{bb,cc}
算法
a=123 b=234
echo $(($a+$b)) ----- a+b
357 ---------- 结果
2、计算器
Scale=2 保留几位小数, %取余。
Quit 退出计算器
\:反斜杠 转义字符
创建时间文档
date +%Y%m%d
语法 | 作用 |
---|---|
\ | 避免下一个字符被shell解释 |
“” | 避免双引号内除了S、!和(反引号)字符以外的其它字符被shell解释 |
‘’ | 避免单引号内的字符被shell解释 |
alias 命令 Shell别名可创建扩展(替换)为任意文本的命令
alias NAME=a
unalias 取消
unalias a 取消a替换NAME的命令
标准输入 标准输出
echo “aaa”> aa.txt 创建aa.txt文档
cat aa.txt 查看aa.txt文档
设置密码(可批量设置用户密码)
useradd u1 创建u1用户
passwd u1 设置u1 密码
useradd u2 创建u2用户
vim bb.txt 新建立一个bb.txt文档
123456 将密码输入 bb.txt文档中
passwd u2 --stdin <bb.txt 将输入定向到文档中
su - u1 切换到u1
su - u2 切换到u2
输入密码 123456
标准输出和错误输出
echo “aaabbccc”>aa.txt
>>文件续写
echo “aaabbbcc”>>aa.txt
意思是用>把内容输入到文档中。
head -1 /etc/rc.d/\* > aa.txt 2>bb.txt
将标准输出和错误输出分别传到aa.txt和bb.txt
head -1 /etc/re.d/\* >aa.txt 2>&1
head -1 /etc/rc.d/\* >& aa.txt
将标准输出和错误输出合并到aa.txt
Shell scripts
scripts脚本返回值 echo $?
返回值 | 退出状态 |
---|---|
0(Zero) | Success |
Non-zero | Failure |
2 | Incorrect usage |
126 | Not an executable |
127 | Command not found |
vim aa.sh 编辑aa.sh脚本
read -p "qing shu ru yong hu ming cheng " name
echo $name
sh aa.sh 运行aa,name脚本
只读变量
变量 | 含义 |
---|---|
? | 最新执行的命令的退出状态 |
- | 当前启用中的shell选项标记 |
$ | 当前shell的进程id(PID) |
! | 最新后台命令的进程ID(pid) |
_ | 前一个命令的最后标记 |
PPID | shell父进程的ID(PID) |
SHELLOPTS | 被冒号隔开的当前启用中的shell选项列表,和set -o命令结果一样 |
UID | 当前用户的用户id |
路径替换
~ */? []/[^] &
比较--针对文件
关于文件类型的判断,如:test -e filename
-e | 是否存在 |
---|---|
-f | 是否为文件 |
-d | 是否为目录 |
-b | 是否为block device |
-c | 是否为character device |
-S | 是否为socket |
-p | 是否为pipe文件 |
-L | 是否为链接 |
比较--权限
关于文件权限的判断,如:test -r filename
-r | 文件是否可读 |
---|---|
-w | 文件是否可写 |
-x | 文件是否可执行 |
-u | 文件是否有SUID |
-g | 文件是否有SGID |
-k | 文件是否有Sticky bit |
-s | 文件是否非空 |
比较--新旧与大小
比较两个文件大小,命令 例如: test A -nt B
-nt | A是否比B新 |
---|---|
-ot | A是否比B旧 |
-ef | A是否和B是用一个文件,两个整数之间的判断。 |
-eq | 两个数相等 |
-ne | 两个数不等 |
-gt | A大于B |
-lt | A小于B |
-ge | A大于等于B |
-le | A小于等于B |
Shell语法
If语句格式
(number=num)
read -p "请输入一个数字" num
if [ $num -eq 3 ] (如果)
then
echo "wo xiang ni"
elif [ $num -le 5 ]
then (然后)
echo "zhen xiang le "
else [ $num -ge 6 ] (否则)
echo "miss 531"
fi (结束)
闰年
第一版
year=`date +%Y`
if [ $[ $year % 400 ] -eq 0 ]
then
echo "$year is a leap year."
elif [ $[ $year % 4 ] -eq 0 ]
then
if [ $[ $year % 100 ] -ne 0 ]
then
echo "$year is a leap year."
else
echo "$year is not a leap year."
fi
else
echo "$year is not a leap year."
fi
第二版(原版)
year=$(date +%Y)
if [ $[ $year % 400 ] -eq 0 ]
then
echo "$year is a leap year."
elif [ $[ $year % 4 ] -eq 0 ]
then
if [ $[ $year % 100 ] -ne 0 ]
then
echo "$year is a leap year."
else
echo "$year is not a leap year."
fi
else
echo "$year is not a leap year."
fi
第三版(查询哪一年是闰年)
read -p "shu ru nian fen" year
if [ $[ $year % 400 ] -eq 0 ]
then
echo "$year is a leap year."
elif [ $[ $year % 4 ] -eq 0 ]
then
if [ $[ $year % 100 ] -ne 0 ]
then
echo "$year is a leap year."
else
echo "$year is not a leap year."
fi
else
echo "$year is not a leap year."
fi
FOR 循环
格式语法:for NAME in [ LIST ];do COMMANDS; done
列表 执行命令 结束
LIST用法
直接写 | 1 2 3 |
---|---|
大括号 | |
文件名 | /etc/*.conf |
命令结果 | find /etc/ -name "*.conf" |
C语言风格 | for ((i=0;i<5 i=i+2)) |
i++ |
ping网段案例
ping.sh
for p in {1..10} p---变量名称
do do----执行内容
host=(192.168.18.$p)
ping -c2 192.168.18.$p >> /root/Desktop/2.txt c2---频率
if [ $? == 0 ]
then
echo "$host is online." 在线
else
echo "$host is offline." 不在线
fi
done
while循环
aa=1
while [ $aa -le 10 ]
do
echo "wo xiang ni le"
aa=$[$aa+1]
done
case 判断
aa=3 ( 3 变量值)
case "$aa" in
1)
echo "haha";; (1,2,4常量值)
2)
echo "heihei";;
3)
echo "nimei";; (有内容两;没有一个;)
esac
break
终止当前for循环
for n in {1..10}
do
if [ $n -eq 3 ]
then
break
fi
echo $n
done
continue
跳出本次循环
for n in {1..10}
do
if [ $n -eq 3 ]
then
continue
fi
echo $n
done
正则表达式
是指用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。就是用某种模式去匹配一类字符串的一个公式。
touch bb.txt
grep “m*” bb.txt
基本元字符集
grep -E = egrep
· 匹配任意单个字符。 如:rat、r、t。 |
---|
^ 匹配一行的开始 |
$ 匹配一行的结尾 |
匹配0个或多个前面的字符 |
+ 匹配1个或者多个+前面的字符(需要\号,如grep -E “11+” /root/2) |
? 匹配0个或1个?之前的字符 |
\ 转义 |
[]匹配括号中的任何一个字符。如:[abc] |
[^] 匹配不在括号中的,表示排除 如[^abc]或者 grep -v [abc] |
< 匹配词的开始 |
> 匹配词的结束。 如 <the>\。 |
| 或。 例如 (him|her) |
{m} 前面的表达式重复m次。如:“\w{2}”相当于“\w\w”。 |
---|
{m,n} 表达式至少重复m次,做多重复n次。如:“ba{1,3}”匹配“ba”或“baa”“baaa” "d{2,3}" |
{m,} 表达式至少重复m次 |
\w 任意一个字母或数字或下划线 |
\d 任意一个数字 grep [0-9] bb.txt |
\s 空格、制表符、换页符、空白符中的任意的一个。 |
\b 匹配一个单词的边界。如:“.\b.” 以什么开头放后边 以什么结尾放前边 |
环境支持
命令或环境 | · | [] | ^ | $ | ( ) | ? | + | | | ( ) | |
---|---|---|---|---|---|---|---|---|---|---|
vi | × | × | × | × | × | |||||
awk | × | × | × | × | × | × | × | × | ||
sed | × | × | × | × | × | × | ||||
grep | × | × | × | × | × | × | ||||
egrep | × | × | × | × | × | × | × | × | × | |
perl | × | × | × | × | × | × | × | × | × |