`
Fangrn
  • 浏览: 820726 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

linux bash(2)

阅读更多

十二、输入输出重定向及管道

1 什么是过滤器   必须有一个输入和输出
2 什么是标准输入输出
3 怎样改变标准输出
4 输出的种类
5 改变输入
6 管道

linux过滤器:
linux工具/命令分为三种:
   过滤器
   编辑器
   交互式工具

  
标准输入输出与重定向:
输入   过滤器数据来源 标准输入stdin(0):默认是键盘
输出   过滤器数据去向 标准输出stdout(1):默认是终端屏幕
错误输出 报错讯息与标准输出走不同的I/O通道 标准错误输出stderr(2):默认是终端屏幕
重定向   标准输入输出与错误输出,都可以用特定符号改变数据来源和去向

输入重定向: 使用“<”来重定向输入
   很多工具都设置其后接文件名为输入源
   也有一些过滤需要添加“<”以明确输入源
追加:   使用“<<”让系统将一次键盘的全部输入,先送入虚拟的当前文档,再一次性输入追加到文档尾部
   需要一对字母、符号或字符串作为起始终结标识符
   选择任意符号作为起始终结标识符

<<EEE   表示直到发现输入EEE时,才退出输入,或按ctrl+d退出 并显示输出  

输出重定向: 使用“>”改变数据输出目标
   ls -l /etc > listfile
   将文件以长模式显示,后写入listfile文件
   文件已有内容会被替代
覆盖与追加: 使用“>”进行输出重定向,文件的原内容会被覆盖
   ls -l aa.txt > vi.txt
   使用“>> ”,可以将输出追加入文件
   ls -l aa.txt >> vi.txt
>   标准正确输出重定向、清空文件、创建文件(输出前先清空以前存在的数据)
2>   标准的错误输出重定向   (输出前先清空以前存在的数据)
&>或2>&1 不管正确或错误的输出都全部重定向
>>   追加重定向,不清空之前的数据

错误输出重定向:系统错误与标准输出使用的I/O管道不同
   默认情况系统报错显示到终端屏幕上
   使用“2>”将报错信息重定向入一个文件
   find / -type s 2> /dev/null
   使用“2>>”将报错信息追加入一个文件
   find / -name passwd 2>> results

管道:  
|   将前一个过滤器的输出直接输入到后一个过滤器
   ls -l | grep hosts.conf
   允许多重管道
   管道前过滤器的输出与管道后过滤器的输入数据类型匹配
例子:
ls /dev |wc -l   统计/dev下有多少文件
du -a | sort -n -r 显示所有文件大小,并按从大到小排序
ls -l /etc |grep '^d' 显示/etc文件夹下所有文件夹
dmesg |more   分屏显示内核信息

使用tr加密: tr '"a-m""n-z""A-M""N-Z"' '"N-Z""A-M""n-z""a-m"'
    tr '"a-m""n-z""A-M""N-Z"' '"N-Z""A-M""n-z""a-m"' < /etc/passwd > abc.txt
    tr '"a-m""n-z""A-M""N-Z"' '"N-Z""A-M""n-z""a-m"' < /etc/passwd | mail -s "for you"
dlp8410@126.com

十三、 linux系统状态检测及进程控制

1 查询当前系统的信息
2 查询当前系统的状态
3 /proc文件系统    查看内核
4 进程的显示
5 控制进程
6 控制台的前台和后台


系统信息的收集:
hostname 显示或设置主机名
uname   显示系统信息
last   显示最近的用户登录
lastlog   显示每个用户的登录情况

系统状态:
/proc文件系统
free   查看内存的使用情况
df   查看硬盘使用情况
du   查看文件大小
系统日志 tail - f /var/log/messages

常用系统日志:
/var/log/dmesg   核心启动日志
/var/log/messages 系统报错日志
/var/log/maillog 邮件系统日志
/var/log/boot.log 系统引导过程日志
/var/log/cron   记录守护进程派生子进程
/var/log/syslog   记录警告信息
/var/log/wtmp   永久记录用户登录事件
/var/log/xferlog 记录FTP会话
/var/log/secure   安全信息  

常见查看日志的方法 tail /var/log/....

了解进程:
系统通过进程来完成工作
每一个进程都有一个独立的进程号,系统通过调用进程号来调度操控进程
系统和原始进程是init init的PID总是1
一个进程可以产生另一个进程,除了init以外,所有的进程都有父进程

linux操作系统包括三种不同类型的进程,每种进程都有自己的特点和属性
交互进程 由一个shell启动的进程,交互进程可以在前台运行,也可以在后台运行
批处理进程 这种进程和终端没有联系,是一个进程序列
监控进程 也称守护进程,linux系统启动时启动的进程,并在后台运行。

一个正在执行的进程称为一个作业,而且作业可以包含一个或多个进程,尤其是当使用了管道和重定向命令
作业控制指的是控制正在运行的进程的行为

查看进程状态:
ps [option] 常用参数
   -a 显示所有进程,但不包括不隶属于任何一个终端的进程
   -u 显示不属于任何一个终端的进程,诸如各类系统网络服务的后台程序
   -l 以长模式显示进程信息
   -u 显示进程的拥有者信息
   在ps的参数中,是否加 - 号,表示不同的参数

      ps显示中的stat,
   R 正在运行
   S 进程睡眠中,通常可以因事件发生而被唤醒
   T 进程已停止
   D 进程睡眠中,除非发生指定事件,否则不会被唤醒
   Z 僵尸进程,例如未能被父进程回收的子进程。通常是一个系统BUG或非法操作
   < 高优先级进程
   N 低优先级进程
      ps选项
   -e 显示所有进程
   -f 全格式
   -h 不显示标题
   -l 长格式
   -w 宽输出
  
   a 显示终端上的所有进程,包括其他用户的进程
   r 只显示正运行的进程
   x 显示没有控制终端的进程
  
   --help   显示帮助信息
   --version 显示命令的版本信息

pstree   以树状方式表现进程的父子关系
top   系统监控工具
按 M 以内存排序
   k 杀掉某个进程
   ? 帮助
   >< 翻页
   r 设置优先级
   q 退出TOP命令

控制进程:
kill [-signal] PID 向进程传送一个特定的讯号 默认为15(终结)

kill -l   列出所有可以由kill传递的讯号
killall
skill
pkill

进程优先级:
进程俦级 用nice值来表示
nice以一个不同的nice值来运行指令 nice -n -num command
renice改变运行进程的nice值   renice -n PID
      renice -n -10 1 调整优先级
控制台的前台和后台:
命令默认在前台运行
但控制台可以都允许多个后台进程,如 find / -name aaa & 直接运行在后台

进程放入后台运行:
command &   将进程直接丢入后台运行
ctrl+z    将正在运行的前台进程暂停,并丢入后台
nohup command &   在shell退出后进程仍执行,作为系统进程

控制台的任务:
jobs   显示系统当前后台任务列表
kill %n   控制第1个任务
fg   将后台进程放入前台,并运行
bg   激活后台暂停的进程

十四、 BASH使用详解

1 shell概念
2 linux下的shell种类与用户shell的控制
3 bash的使用
4 bash的常见技巧与快捷键
5 bash的变量使用
6 常见的bash变量使用
7 bash运算符
8 使用启动脚本定制bash

shell简单介绍:
shell环境
shell产生与发展
shell的显著特点: 命令行解释
    使用保留字
    使用shell元字符(通配符)  
    可处理程序命令
    使用输入输出重定向和管道
    维护一些变量
    运行环境变量
    支持shell编程

bash介绍:
系统中的shell
改变用户使用的shell
bash命令概要: 如下是几个最常用的bash内部命令
   alias   设置bash别名
   bg   使一个被挂起的进程在后台继续执行
   cd   改变当前工作目录
   exit   终止shell
   export   使变量的值对当前shell的所有子进程都可见
   fc   用来编辑历史命令列表里的命令
   fg   使用一个被挂起的进程在前台继续执行
   kill   终止某个进程
   help   显示bash内部命令的帮助信息
   pwd   显示当前工作目录
   unalias   删除已定义的别名
   bash还有许多命令,但这些是最常用的,想了解更详细的情况,可以man bash   
   
bash变量: 这里有几个最有用的bash变量
   包括变量名和简单描述
   HISTFILE 用于贮存历史命令的文件
   HISTSIZE 历史命令列表的大小
   HOME   当前用户的用户目录
   OLOPWD   前一个工作目录
   PATH   寻找可执行文件的搜索路径 ~/.bash_profile
   PS1   命令行的一级提示符
   PS2   命令行的二级提示符
   PWD   当前工作目录
   SECONDS   当前shell开始后所流逝的秒数

bash的特性:
1 命令补齐——TAB键
2 有很多快捷键
3 通配符
4 命令历史记录 history
5 别名 命令别名通常是其它命令的缩写,用来减少键盘输入
6 输入重定向 <
7 输出重定向 >
8 管道   |
9 提示符
10 作业控制(JOB CONTROL)
11 用户化配置bash

bash变量快捷键:
1 TAB:   自动补完命令行与文件名
2 TAB键双击: 可以列出所有匹配的选择
3 Ctrl+c: 结束当前的任务
4 Ctrl+z: 当前任务暂停,并放在后台
5 Ctrl+s: 停止屏幕输出
6 Ctrl+q: 恢复屏幕输出
7 Ctrl+l: 清屏
8 Ctrl+d: 标准输入结束
9 Ctrl+r: 追踪命令

bash在控制台下的其他快捷键:
ctrl+u 删除光标以前的所有字符
ctrl+d        一个字符
ctrl+k 删除光标以后的所有字符
ctrl+h        一个字符

ctrl+t 调换光标前两个字符的次序

ctrl+a 移动光标到最前面
ctrl+e    最后面

ctrl+p 上一个命令
ctrl+n 下一个命令

ctrl+f 移动光标到后一个字符
ctrl+b 移动光标到前一个字符

ctrl+x 标记一个位置
ctrl+c 清除当前的输入   (常用)


使用BASH命令历史: history命令可查询历史操作命令
    命令历史中的命令可以被调用
    .bash_history中的命令数目由HISTFILESIZE这个变量来决定
    history表存储在内存内。用户logout时会记录到用户主目录中.bash_history文件

    # history
    # set |grep HIS
    # history -c 清除命令历史

使用历史命令: 使用!来调用历史指令
   ctrl+r在history中查询指令
   !$ 获得前面命令行中的最后一项内容
   !! 重复执行上一条命令
   !a 重复执行上一条以a为首的命令
   !100 重复执行第100号命令

bash的变量类型:分环境变量和普通变量
   环境变量:可以被子shell引用的变量
   普通变量:只在当前shell中有效

set   显示环境变量和普通变量
env   只显示环境变量
export   把普通变量变成环境变量
unset   可以删掉一个变量

alias别名: 为命令定义简单的别名
   unalias取消别名记录
   alias记录在shell中总是先执行

bash中的运算符:已经接触过的通配符* ? [abc] {a,b,c}等
   一些运算符,
     如echo $PATH中的$
     !10     中的!
另外我们还要学习以下运算符
! !20 !! !$ $AAA * ? [abc] [^abc] {a,b,c} & ~ # %1 ^ "" '' `` \ ; = < > $$

[ ] 加空格有来表示判断 ,判断条件: -f 文件
      -l 链接
      -d 目录
      -c 字符型文件
      -b 块设备文件
      -x 执行文件
      -r 只读文件
      -w 可写文件
    man bash可查
&& 当前一条指令执行成功时再执行后一条指令
||    失败时再执行
$$ 显示pid

定制你的bash:
在bash中定制的:命令历史、变量、umask、选项 set -o、alais等
只在当前shell有效,再次打开将恢复成原来shell启动脚本中定义的样子

bash的启动脚本:
全局设置文件: /etc/profile
   /etc/bashrc
用户设置文件: ~/.bash_profile
   ~/.bashrc
   
bash的其它配置脚本:      
   ~/.bash_logout
   ~/.bash_history logout时将内存history记录写入
   /etc/profile.d/*.sh


十五、 shell脚本编程详解

1 什么是shell脚本编程 其它脚本php,jsp,asp,
    系统是由shell脚本搭建的,如/etc/rc.d/rc.sysinit或services命令
    shell脚本一般是ASCII码的文本,可以直接编写
脚本中的#表示注释,但是第一行中的#有特殊意义:
如果第一行中:
第一个字符非#:表示这是一个BASH脚本
第一个字符是#,但第二个字符不是!:表示这是一个csh脚本
第一个字符是#,且第二个字符是!:表示调用其后指定的某个程序来执行以下的这个脚本。如#!/usr/bin/python2.2


2 脚本的执行方式
3 脚本的常见流程控制
4 脚本的编写
5 sed及awk的使用

shell脚本: shell script
   unix系统的原则有一条:UNIX系统和程序都比较短小,避免交互
   所以在完成复杂任务时需要把短小命令组合起来使用,怎样组合呢?就是用shell脚本

shell script通常为text文本文件,shell的脚本最善长用来完成系统管理工作;

shell 有很多种,不同的shell语法是不相同的,如csh的脚本bash不一定可以用

shell脚本可以进行多种形式的交互

整个系统都是由shell脚本来串连的

甚至很多命令就是shell脚本 service 命令、startx命令等等

shell中正则表达式:
正则表达式简介
grep和正则表达式
vi和正则表达式

与shell脚本进行交互:
可以使用参数来传递内容 $1 $2 $3
可以使用命令来进行交互 read 读入数据给变量
    echo 输出数据
    printf 输出数据

echo "this if input & output!"
read -p "this is read,please input:"readmem
echo "this is echo:$readmem"
printf "this is printf %s" $readmem

shell脚本执行:
输入脚本的绝对路径或相对路径
/root/backup
./backup

bash脚本或tcsh脚本
表示以bash或tcsh来执行脚本 bash /root/backup
再脚本的路径前加 .   . ./backup
     . /root/backup
bash脚本中的流程控制:
条件判断控制
[] && ||
if
case
循环控制
while
utile
for
break
continue

[ ]
echo $?


vi /etc/rc.d/rc.sysinit
vi /etc/rc.d/init.d/httpd
bash -vx ./b 编译

[]在bash 可以判断真假,

[ $USER = "ding" ] && echo hello ding
[ -f /bin/ls ] && /bin/ls
[ $USER = "ding" ] || echo hello root

-e file已经存在
-f file普通文件
-s file大小不为零
-d file是一个目录
-r file对当前用户可以读取
-w file可写
-x file可执行
-g file的GID标志被设置
-u file的UID标志被设置
-O file是属于当前用户的
-G file的组ID和当前用户相同
file1 -nt file2 文件file1比file2更new
file1 -ot file2 文件file1比file2更old

数值比较时的运算符:

-eq =
-ne !=
-gt >
-lt <
-ge >=
-le <=
-z 为空
-n 不为空


条件判断控制语句if:
if 条件
then 动作
elif 条件
then 动作
else
动作
fi

例子:
if[ $1 = "hello" ]
then
echo "hello!hahah"
fi

if [ $1 = 1 ]; then
if [ $2 = 2 ]; then
   echo ok
fi
fi

条件判断控制语句CASE:
case 表达式 in
匹配值1)
   动作;;
匹配值2)
   动作;;
*)
   动作;;
esac

例子:
case $1 in
root)
   echo "hello root"
   ;;
ding)
   echo "dear i miss you"
   ;;
*)
   echo "where are you"
   ;;
esac

循环控制语句for:
for 变量 in 数组
do
   动作
done
for,变量自动去数组中取值,每取一次值执行一次循环,
例子:
for i in 1 2 3 4 /etc/*rc
do
   echo $!
done

循环控制语句while:
while 条件
do
   动作
done
while,当条件为真时,执行do和done间的循环
例子: aaa=0
while [ $1 = "ok" ] && [ $aaa -lt 10 ]
do
   aaa=$[$aaa+1] 执行运算
   echo "$aaa "
done

循环控制语句until:
until 条件
do
   动作
done
例子:
aaa=0
until [ $aaa -gt 9 ]
do
   aaa=$[$aaa+1]
   echo "$aaa "
done
与while循环只是条件相反

函数的使用:
bash 中的函数定义非常简单
使用:
myfunction()
{
}
取消函数或变量时使用: unset myfunction

例子:计算整数平方的例子
square(){
aaa="$1*$1"
return $aaa
}
square $1
result=$?
echo $result

exit 0


sed:   流编辑器 stream editor
   sed编辑器是linux 系统管理员的工具包中最有用的资产之一
   sed非常适合脚本中使用,因为不需要进行交互
   流编辑器非常适合执行重复的编辑,比如替换文件中的词语等。

使用sed进行替换: sed 's/{old value}/{new value}/'
多次替换: sed -e 's/mike/todd/' -e 's/good/better/'
    sed 's/tiger/wolf/; s/after/before/'

了解sed脚本: 编辑内容可以写成脚本
   脚本是包含sed命令的文本文件
   执行命令列上的编辑指令
    sed编辑指令
    执行档案内的编辑指令
    执行多个档案的编辑
    执行sed输出控制
info sed
man sed

awk的使用: awk是一种用于处理文本的编程语言工具
   unix/linux功能最强大的数据处理引擎
   可以在匹配的行上执行特殊的操作
   shell中最常用于截取文本中某一段数据
awk程序: 规则通常由新行来分离
   规则包含一个模式和在{}内包含的操作
     pattern {action}

运行awk程序: 简单的程序可以在命令行下直接输入:$awk 'program' input file
   更长的程序保存在文件中 $awk -f program_file input_file
awk实例: 用awk搜索文件/etc/passwd中包含"bash"字符串的行
    $awk '/bash/ { print }' /etc/passwd
更加复杂的awk实例: 统计/project目录下所有属于用户joshua的文件的总大小
    #ls -l /project |awk '$3=="joshua" {\sum+=$5 } END {print sum }'
何时使用awk: 从大量的原始数据中产生报告
   从其它程序的输出中总结信息
   当你需要一个又小又快的文本处理程序的时候

分享到:
评论

相关推荐

    linux BASH中文手册

    ### Linux BASH中文手册知识点概览 #### 一、引言 **Bash**(Bourne Again SHell)作为一款强大的Unix/Linux环境下的命令解释器,被广泛应用于各种操作系统中,尤其是Linux发行版的核心组成部分之一。对于初学者而...

    Linux bash补丁(2)

    【Linux bash补丁(2)】是一个针对Linux操作系统中bash shell漏洞的修复合集,它包含了一系列不同架构和版本的bash软件包以及一个名为“bash补丁命令.txt”的文本文件,用于指导用户如何应用这些补丁。bash是Linux...

    linux bash手册(英文,version 4.2)

    Bash是Linux操作系统中最常用的命令行解释器,或者称为shell,它允许用户通过文本界面与系统交互,执行各种任务。Bash是Bourne-Again SHell的缩写,是原始Bourne shell的增强版,由GNU项目开发并作为GNU/Linux系统的...

    linux bash 源代码

    linux bash shell 实现源码

    linux bash配置文件

    在Linux系统中,Bash(Bourne-Again SHell)是默认的命令行解释器,它是用户与操作系统交互的主要工具。Bash shell配置文件对于提高工作效率和个性化工作环境至关重要。本文将详细介绍如何理解和利用Bash配置文件...

    Linux Bash脚本编程大全

    ### Linux Bash脚本编程大全知识点概述 #### 一、引言 《Linux Bash脚本编程大全》是一本全面介绍Bash脚本编程的书籍,它不仅涵盖了Bash的基础知识,还包括了许多高级技巧以及Linux/UNIX操作系统相关的知识。本书...

    Python3 执行Linux Bash命令的方法

    和之前C++执行Linux Bash命令的方法 一样,Python依然支持system调用和popen()函数来执行linux bash命令。 方法一:system调用 #仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息 import os os....

    LinuxBash编程与脚本应用实战

    资源名称:Linux Bash编程与脚本应用实战资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    linux基本bash命令_linux.zip

    linux基本bash命令_linux

    关于linux bash致命漏洞的情况以及预防措施

    2. **更新Bash版本**: - 对于CentOS和Red Hat用户,可以通过运行以下命令来更新Bash: ```bash yum update bash ``` - 对于Ubuntu用户,则可以使用以下命令安装最新的Bash版本: ```bash apt-get update apt-...

    linux shell bash 源码

    Linux Shell脚本是Linux操作系统中的一种重要编程工具,它基于Bourne Again SHell (Bash),是Linux环境中最常用的命令解释器。Bash不仅支持基本的命令行操作,还提供了许多高级特性,如变量、流程控制、函数、输入/...

    linux_bash

    在IT行业中,Linux和Bash是极为重要的工具,特别是在服务器管理和自动化任务执行方面。Bash是Linux操作系统默认的Shell,它提供了命令行交互环境以及强大的脚本编写能力。本资源"linux_bash"包含了几个适合初学者的...

    Linux Bash脚本编程大全_超清版

    Linux Bash脚本编程是Linux系统管理与自动化任务执行的核心技能之一。Bash,全称Bourne-Again SHell,是Unix及Linux操作系统中最常用的命令行解释器,它提供了丰富的命令行工具和强大的脚本编写能力。这本书《Linux ...

    linux bash shell中文手册

    Linux Bash Shell 中文手册是为Linux用户和系统管理员提供的一份详细指南,涵盖了Bash Shell的基本用法和高级特性。Bash(Bourne-Again SHell)是GNU项目下的Unix/Linux操作系统默认的命令行解释器,它继承并扩展了...

    Linux Bash Shell快速入门

    Linux Bash Shell快速入门是针对初学者的指导性文章,它从编写简单的“Hello World”程序开始,逐步介绍Bash Shell的基础知识和语法。本文重点讨论了以下几个方面:Bash Shell的基本语法,变量的使用和与C语言的异同...

    LinuxBash脚本编程大全

    在IT行业中,Linux Bash脚本编程是系统管理员、开发者以及自动化任务执行者不可或缺的技能之一。Bash(Bourne-Again SHell)是Linux和Unix操作系统中最常用的命令行解释器,也是编写shell脚本的主要工具。《Linux ...

    Linux Bash脚本大全

    ### Linux Bash脚本大全知识点概览 #### 一、引言 - **Shell的重要性:** Shell作为用户与操作系统之间的交互接口,在Linux/UNIX系统中扮演着极其重要的角色。特别是Bash(Bourne-Again Shell),它几乎是所有现代...

Global site tag (gtag.js) - Google Analytics