快速掌握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

用户控制命令

  1. useradd 添加用户
  2. useradd -g 指定用户所属用户组
  3. useradd -G 用户组 指定用户所属的附加组
  4. useradd -u 用户号 指定用户的用户号

命令:指定用户所属组

useradd -g 组名 -u 用户号 用户名

例如

useradd -g g3 -u 510 u5

指定用户附属组

useradd -g 组名 -G 所在组 用户名

例如:

useradd -g g4 -G g1 u7


修改账户信息

  1. usermod 修改账户信息
  2. usermod -g 用户组指定用户所属的用户组
  3. usermod -l 锁定账号
  4. usermod -u 解锁账号
  5. userdel 删除账户
  6. userdel -r 删除宿主目录

设置密码

    1. passwd 设置密码
    2. passwd -l 锁定账号
    3. passwd -u 解锁账号
    4. passwd -s 查看账号状态
    5. usermod -L u1 u1账号被锁定
    6. usermod -U u1 u1账号被解锁
    7. 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 × × × × × × × × ×
posted @ 2020-04-25 18:52  体育僧  阅读(596)  评论(0编辑  收藏  举报