Linux Shell实例精讲学习笔记
- 格式:doc
- 大小:175.50 KB
- 文档页数:36
1.清除/var/log下的log的文件代码:cd /var/logCat /dev/null >messagesCat /dev/null >wtmpEcho "Logs cleaned up."2.清除:一个改良的清除脚本#!/bin/bash#一个Bash脚本的正确的开头部分#Cleanup 版本2LOG_DIR =/var/log#如果要使用变量,当然别把代码写死的好cd $LOG_DIRcat /dev/null>messagescat /dev/null>wtmpEcho "Logs cleaned up."exit #这个命令是一种正确并且合适的退出脚本的方法。
3.一个增强的和广义的删除的logfile的脚本#!/bin/bash#清除,版本3#Waring:LOG_DIR =/var/log#如果要使用变量,当然别把代码写死的好ROOT_UID=0 # $UID为0的时候,用户才具有的用户权限LINES=50 #默认的保存行数E_XCD=66 #不能修改目录?E_NOTROOT=67 #非根用户就以error退出#当然这里要使用根用户来运行if["$UID" -ne '"$ROOT_UID"]thenecho "Must be root to run this script."exit $E_NOTROOTfiif[-n "$1"]#测试是否有命令行参数(非空)thenlines = $1elselines =$LINES 默认,如果不在命令中指定ficd $LOG_DIRcat /dev/null>messagesE_WRONGARGS=65Case "$1" in"" ) lines=50;;*[!0-9]*) echo "Usage:`basename $0` file-to-cleanup";exit $E_WRONGARGS;;* ) lines=$1;;esaccd $LOG_DIRif[`pwd`!="$LOG_DIR"] 或if["$PWD"!="$LOG_DIR"]thenecho "Can`t chanage to $LOG_DIR"exit $E_XCDfi#在处理logfile之前,再确认一遍当前目录是否正确。
跟着360架构师学习Shell编程的笔记包含以下核心内容:1. Shell基础Shell简介:Shell是Linux/Unix系统中的一种命令行解释器,用于执行用户输入的命令。
Shell种类:Bash、Zsh等不同Shell的基本特性与区别。
基本语法:变量定义与引用、字符串操作、条件语句(if-else-fi)、循环结构(for, while, until)等。
2. 脚本编写创建和执行Shell脚本:如何创建一个基本的Shell脚本文件,赋予执行权限并运行。
输入输出重定向:使用等进行标准输入输出和错误输出的重定向。
文件测试操作:使用test命令或[ ]结构进行文件属性测试。
3. 函数与模块化函数定义与调用:在Shell中如何定义及调用函数以实现代码复用。
参数传递:了解Shell函数参数的使用方式,包括位置参数的区别。
4. 正则表达式Bash中的正则表达式支持:通过操作符结合模式匹配变量REPLY进行正则匹配。
grep、sed、awk工具:虽然不是Shell内置命令,但在处理文本时会广泛用到这些工具提供的正则功能。
5. 进阶技巧信号处理:捕获和处理SIGINT、SIGTERM等系统信号。
进程管理:使用&后台运行程序、wait等待子进程结束、jobs查看后台任务列表等。
脚本调试:使用set -x开启脚本执行跟踪、echo命令辅助调试等方法。
6. 实用案例日志分析与处理:利用Shell脚本对系统日志进行过滤、统计、归档等操作。
自动化运维:如自动备份、定时任务(Cron Job)、服务监控等场景下的Shell应用。
注意,以上内容仅为根据一般Shell编程课程可能会涵盖的知识点进行的推测性整理,并非360架构师的具体教学内容。
实际学习过程中,请参考具体的学习资料或课程内容。
【学习】LinuxShell脚本实例之⼀1.程序流程控制实例程序流程控制,实际上就是改变程序的执⾏顺序。
程序在执⾏过程中若流程被改变,就可能导致输出不同,因此利⽤这⼀特性就能够实现程序执⾏结果的控制。
程序流程控制可分为“选择”和“循环”这两类,在需要根据实际需求的不同实现不同的输出时,就可以改变程序的执⾏流程。
(1)for循环语句基于for语句的循环,基于继续执⾏循环或者结束循环的⽅式。
在for执⾏命令前,其会先检查所要执⾏的列表中所指定的值是否还有未使⽤的,若有未使⽤的就赋值并执⾏列表,直到列表中的值全部都使⽤过后才退出循环。
如下是⼀个简单的 for 控制语句的脚本程序,其使⽤“星期”作为变量名,并从列表中读取值,直到读取完成后退出。
我们执⾏⼀下说明:第03 ⾏,所定义的变量名为week,其值为Monday~ Sunday。
第05⾏,使⽤echo回显变量week的值。
(2)while循环语句while循环语句结构是⼀种执⾏⼀系列命令的语句结构,它所执⾏的命令由测试条件所决定,这些条件定义语句是否继续执⾏。
在 while 循环语句中执⾏命令,若条件为真,则将过程执⾏⼀遍并回到开始处,接着再次进⾏条件的判断,若条件仍然是真,则接着再执⾏⼀遍,直到条件为假时才退出循环。
如下是⼀个数值运算的while循环脚本,其实现的是数值相加运算。
执⾏⼀下看⼀下结果说明:第03和04⾏,声明x和sum都为整型变量并赋予初始值。
第05⾏,条件测试。
第06~09⾏,这是⼀个循环体,当执⾏遇到done后,跳到第06⾏处继续执⾏,直到条件不满⾜时退出循环。
第10⾏,输出总数值。
(3)until循环语句与for和while循环体⼀样,until循环也执⾏⼀系列的命令,直到条件满⾜后退出循环。
until循环在循环体的顶部继续判断条件,直到条件为真时结束循环,否则⼀直执⾏。
以下脚本使⽤until语句来实现⼀个简单的、不断循环的输出预设值,直到⼈为⼲预时结束循环(按Ctrl+C组合键退出)。
基础开始吧。
awk和expr,expr最常用。
expr是一款表达式计算工具,使用它能完成表达式的求值操作。
#!/bin/bashval=`expr2+2`File existsstr='this is a string'单引号字符串的限制:1)单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;2)单引号字串中不能出现单引号(对单引号使用转义符后也不行)。
双引号:your_name='qinjx'str="Hello,I know your are\"$your_name\"!\n"双引号的优点:1、双引号里可以有变量2、双引号里可以出现转义字符拼接字符串:your_name="qinjx"greeting="hello,"$your_name"!"greeting_1="hello,${your_name}!"echo$greeting$greeting_1获取字符串长度:string="abcd"echo${#string}#输出4提取子字符串:string="alibaba is a great company"echo${string:1:4}#输出liba查找子字符串:string="alibaba is a great company"echo`expr index"$string"is`定义数组:在Shell中,用括号来表示数组,数组元素用“空格”符号分割开。
定义数组的一般形式为:array_name=(value1...valuen)array_name=(value0value1value2value3)读取数组元素值的一般格式是:${array_name[index]}例如:valuen=${array_name[2]}使用@或*可以获取数组中的所有元素,例如:${array_name[*]}${array_name[@]}获取数组的长度:获取数组长度的方法与获取字符串长度的方法相同,例如:#取得数组元素的个数length=${#array_name[@]}#或者length=${#array_name[*]}#取得数组单个元素的长度lengthn=${#array_name[n]}11、echo命令显示转义字符:echo"\"It is a test\""结果将是:"It is a test"显示结果重定向至文件:echo"It is a test">myfile原样输出字符串:若需要原样输出字符串(不进行转义),请使用单引号。
Linux学习笔记⼀(⽂件和⽬录操作)1.基本shell操作命令解析器--根据命令的名字,调⽤对应的可执⾏程序shell--unix操作系统bash--Linux操作系统(⽂件系统)Linux⽂件系统的存储单元是块在磁盘上存储的时候每个⽂件都有⼀个inode--i节点,保存了⼀些⽂件信息,通过iNode找到对应的⽂件a.快捷键b.虚拟终端history--查询命令的历史记录ctrl+p == 向上的箭头,查询上⼀个命令ctrl+n == 向下的箭头,查询下⼀个命令ctrl+b 向左移动backctrl+f 向右移动forwardctrl+a 移动到⾏⾸ctrl+e 移动到⾏尾ctrl+h 刪除光标前⾯的字符ctrl+d 刪除光标覆盖的字符ctrl+u 刪除光标前⾯的所有字符ctrl+k 删除光标位置到⾏尾的字符ctrl+l或者clear命令清理屏幕c.命令和路径补齐tab智能提⽰键,按⼀次没反应说明有很多符合条件的命令,再按⼀次出现符合条件的命令列表cd ⽬录 + 连续两次tab,显⽰⽬录下⼀级的所有路径d.centos7防⽕墙操作systemctl start firewalld.service 启动systemctl enable firewalld.service 开机启动systemctl stop firewalld.service 停⽌systemctl disable firewalld.service 禁⽌开机启动systemctl status firewalld.service 查看状态firewall-cmd --state 查看状态2.Linux系统⽬录结构ls 路径(查询当前路径下的所有⽂件)/根⽬录下的⽬录说明:/bin bin是binary的缩写,这个⽬录存放着经常使⽤的命令可执⾏程序/boot 存放的是启动Linux时的⼀些核⼼⽂件,包括⼀些连接⽂件以及镜像⽂件(开机启动项)/dev 是Device(设备)的缩写,该⽬录存放的是Linux的外部设备,在Linux中访问设备的⽅式和访问⽂件的⽅式是相同的(Linux奉⾏⼀切皆⽂件,它会把所有硬件外设抽象成设备⽂件存到dev⽬录之下,⽐如⿏标键盘)/etc ⽤来存放所有系统管理所需要的配置⽂件和⼦⽬录/home ⽤户的主⽬录,在Linux中,每个⽤户都有⼀个⾃⼰的⽬录,⼀般该⽬录名是以⽤户的账号命名。
shell学习笔记什么是shell? rhat 9下都有什么shell? 可以和内核举行通信的惟独三种类型的程序:shell kde/gnome apliion,shell是说明器,redhat9下都有shell: bash、ash、tsh等什么是shell脚本?shell 脚本要运行,需要什么条件?shell脚本都有什么语法和规章?假如学学习过dos下的批处理指令的话就会对shel十分的认识,shell 脚本就是指令的集合,但又一些扩展的东西,比如加入了编程语言种的跳转、循环、条件推断等,shell种的变量不需要定义就可以挺直用法哪个。
shell中的变量? shell的变量在申明的是偶就可以挺直的用法,定义的合适为:变量名=变量值,假如变量值中浮现空格,可以将变量值用引号括起来,应用: $(变量名),shell中的特别变量:$ 脚本传递的参数个数,$* 显示脚本传递的全部参数 $$ 脚本运行的当前p号,$? 显示最后推出的状态 0为正确 1为发生错误,$1 : 引用传递的参数。
shell中的变量可以定义类型,可以用法declare 指令格式为:declare[-afirx]变量名 -a 定义为数组 -f 定义为函数 -i 定义为整数 -r 定义为只读 -x 定义为透过环境的输出变量,从键盘读取参数可以采纳: read 变量名关于shell学习中的变量测试:条件测试又两种方式: test condition [ conditon ] 需要主要的是[],方括号的两边各加一个空格,测试文件状态: -e 是否存在 -d 是否为名目 -f 是否文件存在 -L 是否为文件衔接符 -s 文件非空 -r是否可读 -w是否可写 -x是否可执行 [ -e /dir ] echo itst ,这里要注重的是规律衔接符,它的意思是假如前边的条件测试成立,然后才执行后边的指令,假如不成立,则不执行后边的指令。
字符串测试指令:测试格式为: test s operate str ; teststr_operate str [ str_operate str ] [ str operate str ] 其中的stroperate operate 可以为: = 两个字符串相等!= 两个字符串不相等 -z 字符串为空 -n 字符串非空数值的第1页共2页。
linux shell详解Linux Shell 是一种运行在 Linux 操作系统上的命令行解释器,它提供了一种与系统进行交互的方式。
本文将详细介绍Linux Shell 的相关知识,包括 Shell 的基本概念、常用命令以及一些实用技巧。
## 一、Shell 的基本概念Shell 是用户与操作系统内核之间的接口,它接收用户输入的命令,并将其转发给内核执行。
在Linux 中,常见的Shell 有Bash (Bourne Again Shell)、Csh(C Shell)等。
Bash 是最常用的Shell,也是默认的 Shell。
Shell 的主要功能包括命令解析与执行、环境控制、脚本编程等。
用户可以通过Shell 提供的命令来执行文件操作、进程管理、权限控制等操作。
## 二、常用 Shell 命令1. 目录操作命令:- `ls`:列出当前目录下的文件和子目录。
- `cd`:切换当前工作目录。
- `pwd`:显示当前工作目录的路径。
2. 文件操作命令:- `cp`:复制文件或目录。
- `mv`:移动文件或目录。
- `rm`:删除文件或目录。
- `cat`:查看文件内容。
3. 进程管理命令:- `ps`:显示当前正在运行的进程。
- `top`:实时显示进程状态。
- `kill`:终止指定进程。
4. 网络命令:- `ping`:测试与指定主机的连通性。
- `ifconfig`:查看和配置网络接口信息。
- `ssh`:远程登录到其他主机。
5. 权限管理命令:- `chmod`:修改文件或目录的权限。
- `chown`:修改文件或目录的所有者。
- `chgrp`:修改文件或目录的所属组。
## 三、Shell 脚本编程Shell 脚本是一种可以用来编写一系列命令的脚本文件,它可以实现自动化任务的目的。
Shell 脚本通常以 `.sh` 作为文件后缀名。
以下是一个简单的Shell 脚本示例,用于统计指定目录下文件的数量:```shell#!/bin/bashdir_path="/path/to/directory"file_count=0# 遍历目录下的文件for file in $(ls $dir_path)doif [ -f $dir_path/$file ]; then((file_count++))fidoneecho "文件数量:$file_count"```以上脚本中,使用了 `for` 循环遍历目录下的文件,并通过判断是否是普通文件来统计文件数量。
RHCE课程-初级部分4、shell及环境变量简介Kernel系统内核用于在计算机启动时载入基本内存、管理基本输入输出、管理进程初始化和进程的调度。
Shell系统的命令解释器,翻译成中文也就叫壳,外壳的意思,就是最表面的,用于操作系统与用户的通信,相当于Dos中的。
Red Hat Linux 默认的shell 是Bash !Shell与系统及子进程的层次关系+ - - - - - - - - - - - - - - - - -- - - - - - - - +| 用户进程|| + - - - - - - - - - - - - - - - - - - - - - -+ || | shell | || | + - - - - - - - - - - - - - - - - - - -+ | || | | Kernel | | || | | + - - - - - - - - - - - - -- - - -+ | | || | | | Hardware | | | || | | + - - - - - - - - - --- - - - - -+ | | || | + - - - - - - - - - - - - - - - - - - - + | || + - - - - - - - - - - -- - - - - - - -- - - - - + |+ - - - - - - - - - - -- - - -- - - - - - - - - - - -+ 真正工作的是硬件。
kernel(内核)就是控制硬件的,但是怎么让内核知道我们想要硬件做什么工作呢?那就需要shell, 在Unix系统中有各种Shell,Linux采用bash为其默认shell。
B ash是GNU计划的一个组件,与Unix上的Bourne Shell完全兼容。
支持命令行输入、操作历史查询、快捷键、使用变量等功能们都需要X来运行。
(这些往往是经常用到,但是各种网络上的材料都语焉不详的东西,个人认为比较有用)七种文件类型d 目录l 符号链接s 套接字文件 b 块设备文件c 字符设备文件p 命名管道文件- 普通文件正则表达式从一个文件或命令输出中抽取或过滤文本时。
可使用正则表达式(RE),正则表达式是一些特殊或不很特殊的字符串模式的集合。
基本的元字符集:^ 只匹配行首。
$ 只匹配行尾。
* 一个单字符后紧跟*,匹配0个或多个此单字符。
[] 匹配[]内字符,可以是一个单字符,也可以是字符序列。
可以使用-来表示[]内范围,如[1-5]等价于[1,2,3,4,5]。
\ 屏蔽一个元字符的特殊含义,如\$表示字符$,而不表示匹配行尾。
. 匹配任意单字符。
pattern\{n\} 匹配pattern出现的次数npattern\{n,\}m匹配pattern出现的次数,但表示次数最少为npattern\{n,m\} 匹配pattern出现的次数在n与m之间(n,m为0-255)几个常见的例子:显示可执行的文件:ls –l | grep …x...x..x只显示文件夹:ls –l | grep ^d匹配所有的空行:^$匹配所有的单词:[A-Z a-z]*匹配任一非字母型字符:[^A-Z a-z]包含八个字符的行:^……..$(8个.)字符类描述以下是可用字符类的相当完整的列表:[:alnum:] 字母数字[a-z A-Z 0-9][:alpha:] 字母[a-z A-Z][:blank:] 空格或制表键[:cntrl:] 任何控制字符[:digit:] 数字[0-9][:graph:] 任何可视字符(无空格)[:lower:] 小写[a-z][:print:] 非控制字符[:punct:] 标点字符[:space:] 空格[:upper:] 大写[A-Z][:xdigit:] 十六进制数字[0-9 a-f A-F]尽可能使用字符类是很有利的,因为它们可以更好地适应非英语locale(包括某些必需的重音字符等等).shell的引号类型shell共有四种引用类型:“”双引号‘’单引号` ` 反引号\ 反斜线l “”可引用除$、` 、\ 、外的任意字符或字符串,“”中的变量能够正常显示变量值。
Linuxshell脚本输出⽇志笔记整理(必看篇)1、⽇志⽅法简介:#⽇志名称log="./upgrade.log" #操作⽇志存放路径fsize=2000000 #如果⽇志⼤⼩超过上限,则保存旧⽇志,重新⽣成⽇志⽂件exec 2>>$log #如果执⾏过程中有错误信息均输出到⽇志⽂件中#⽇志函数#参数#参数⼀,级别,INFO ,WARN,ERROR#参数⼆,内容#返回值function zc_log(){#判断格式if [ 2 -gt $# ]thenecho "parameter not right in zc_log function" ;return ;fiif [ -e "$log" ]thentouch $logfi#当前时间local curtime;curtime=`date +"%Y%m%d%H%M%S"`#判断⽂件⼤⼩local cursize ;cursize=`cat $log | wc -c` ;if [ $fsize -lt $cursize ]thenmv $log $curtime".out"touch $log ;fi#写⼊⽂件echo "$curtime $*" >> $log;}2、使⽤举例shell脚本内容:#! /bin/bash#数据库变量localpasswd=xxxxmysqlhost=xxxxmysqluser=xxxxmysqlpasswd=xxxx#⽇志名称log="./upgrade.log" #操作⽇志存放路径fsize=2000000exec 2>>$log #如果执⾏过程中有错误信息均输出到⽇志⽂件中#⽇志函数#参数#参数⼀,级别,INFO ,WARN,ERROR#参数⼆,内容#返回值function zc_log(){#判断格式if [ 2 -gt $# ]thenecho "parameter not right in zc_log function" ;return ;fiif [ -e "$log" ]thentouch $logfi#当前时间local curtime;curtime=`date +"%Y%m%d%H%M%S"`#判断⽂件⼤⼩local cursize ;cursize=`cat $log | wc -c` ;if [ $fsize -lt $cursize ]thenmv $log $curtime".out"touch $log ;fi#写⼊⽂件echo "$curtime $*" >> $log;}echo "start update shell" ;mysql -h$sqlip -u$sqluser -p$sqlpasswd -e "use $db;set names gbk;---- 表的结构 msgm_qdjyly--DROP TABLE IF EXISTS msgm_qdjyly;CREATE TABLE IF NOT EXISTS msgm_qdjyly (jylyid int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',jylb varchar(20) DEFAULT NULL COMMENT '交易类别',jylbmc varchar(50) DEFAULT NULL COMMENT '交易类别名称',jgm varchar(10) NOT NULL COMMENT '机构码',lyfs int(11) NOT NULL COMMENT '路由⽅式,1指定渠道,2按卡bin渠道',qdbh varchar(20) DEFAULT NULL COMMENT '渠道编号',qdmc varchar(50) DEFAULT NULL COMMENT '渠道名称',zt int(11) NOT NULL DEFAULT '1' COMMENT '状态,1正常,2关闭',bz varchar(100) DEFAULT NULL COMMENT '备注',PRIMARY KEY (jylyid)) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='交易路由信息' AUTO_INCREMENT=7 ;zc_log INFO "执⾏ CREATE TABLE msgm_qdjyly 命令的结果为: $? " ;echo "执⾏ CREATE TABLE msgm_qdjyly 命令的结果为: $? " ;以上这篇Linux shell脚本输出⽇志笔记整理(必看篇)就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
矿产资源开发利用方案编写内容要求及审查大纲
矿产资源开发利用方案编写内容要求及《矿产资源开发利用方案》审查大纲一、概述
㈠矿区位置、隶属关系和企业性质。
如为改扩建矿山, 应说明矿山现状、
特点及存在的主要问题。
㈡编制依据
(1简述项目前期工作进展情况及与有关方面对项目的意向性协议情况。
(2 列出开发利用方案编制所依据的主要基础性资料的名称。
如经储量管理部门认定的矿区地质勘探报告、选矿试验报告、加工利用试验报告、工程地质初评资料、矿区水文资料和供水资料等。
对改、扩建矿山应有生产实际资料, 如矿山总平面现状图、矿床开拓系统图、采场现状图和主要采选设备清单等。
二、矿产品需求现状和预测
㈠该矿产在国内需求情况和市场供应情况
1、矿产品现状及加工利用趋向。
2、国内近、远期的需求量及主要销向预测。
㈡产品价格分析
1、国内矿产品价格现状。
2、矿产品价格稳定性及变化趋势。
三、矿产资源概况
㈠矿区总体概况
1、矿区总体规划情况。
2、矿区矿产资源概况。
3、该设计与矿区总体开发的关系。
㈡该设计项目的资源概况
1、矿床地质及构造特征。
2、矿床开采技术条件及水文地质条件。
本读书笔记分为4个主要部分,第一部分:linux命令行;第二部分:shell脚本编程基础;第三部分:高级shell脚本编程;第四部分:高级shell脚本编程主题。
2017-09-25:结尾感言:终于读完了这本书,先自我满足一下;其实sed部分有一些缺憾,但是sed用的太少了,不如gawk好用,那部分就暂时不管了,最后几章介绍的内容也比较简单,就没有做过多的说明,这些内容以后有时间再打算补;写完了本书的所有章节的知识总结;总共达到了10000字,页数达到了40页,真是挺多的,有些知识部分的细节我觉得有助于后续的复习,比如一些参数什么的都贴了上来,虽然如此,相比原书本六几百多页的大小,已经是比较少了,看的快的话,1个小时就能浏览一遍了,我觉得此文档还是有一些作用的;文档中由于时间所限,出现了很多记录不够全面细致的部分,需要具体参考书本的语境与例子加深理解;而且文档的错别字也很多,只能后期校验了。
其实我是java开发程序员,平时只用到很少的shell,本来不想在shell上花费太多时间,同时期读的书《JavaScript高级程序设计》与《深入理解JAV A虚拟机》都是大部头,我读的非常辛苦,速度又慢,枯燥无聊之际,读一读本书,又简单,成就感又大,不知不觉就读了很多内容,最后索性决定就读完了吧。
最后,为了防止篡改,我提供了文档的PDF版本。
联系方式:zyxfox@QQ:2424078348微信:zyx163766第一部分linux命令行第一部分分为9章,介绍了基本的bash shell命令,linux的环境变量与文件系统以及编辑器软件的使用等。
第1章初识linux shell1.1什么是linuxLinux分为linux内核、GNU工具组件、图形化桌面环境以及应用软件。
系统核心是内核,控制计算机的所有硬件与软件;主要职责是系统内存管理、软件程序管理、硬件设备管理、文件系统管理。
内核管理虚拟内存与物理内存包括页面替换等,cat/proc/meminfo包含了虚拟内存的状态;共享内存页面是所有进程都可以写入读出的,ipcs命令查看共享内存页面软件程序是进程,内核从虚拟内存中加载init进程,然后init进程再加载其他的进程,自启动进程列表在/etc/inittab文件夹中,ubuntu中为/etc/init.d目录,目录里含有启动或者停止进程的脚本;这些脚本通过/etc/rcX.d目录下的入口启动(符号链接),X代表运行级别。
如果一个命令太长,一行放不下时,要在第一行行尾键入“\”字符并按Enter 键。这时shell 会返回一个大于号(>)作为提示符,表示允许命令延续到下一行。然后,可以接着输入命令。例如: [wuxy@localhost wuxy]$echo this line is too long to fit\ >on one line. this line is too long to fit on one line. 在命令与选项、参数之间要用空格或制表符隔开。连续的空格会被shell 解释为单个空格。 用Crtrl+U 键可以删除光标所在的命令行。如果命令多于一行,首行末尾有反斜线,则只删除当前行。 shell 提供了许多控制符及特殊字符,用于简化命令的输入。 (1)Ctrl+H 键为默认的删除符号,它的功能与Backspace 键(退格)的功能相同。 (2)Ctrl+U 键可以删除光标所在的命令行。 (3)Ctrl+J 键相当于回车。 (4)如果在命令行中使用一对单引号,shell 将不解释被单引号括起的内容,包括其中的 空格和回车字符。 (5)分号可以将两个命令隔开,这样可以实现在一行中输入多个命令。命令的执行顺序与输入的顺序相同。 为方便管理文件,应遵循以下规则: 文件名应量简单,并且应反映出文件内容。文件名没有必要超过14 个字符。 除斜杠(/)和空字符以外,文件名可以包含任意的ASCII 字符,因为这两个字符被核心当做表示路径名的特殊字符来解释。 习惯上允许使用下线符(_)和句点(.)来区别文件的类型,使文件名更易读。但是应避免使用以下字符,因为对系统的shell 来说,它们有特殊的含义。这些字符是: ; | < > ` “ ‘ $ ! % & * ? \ ( ) [ ] 文件名应避免使用空格、制表符或其他控制字符。 同类文件应使用同样的后缀或扩展名。 Linux 系统区分文件名的大小写,例如名为letter 的文件与名为Letter 的文件不是同一个文件; 以圆点(.)开头的文件名是隐含文件,默认方式下使用ls 命令并不能把它们在屏幕上显示出来。同样,在默认情况下,shell 通配符并不匹配这类文件名。 文件名扩展字符主要有以下几种。 星号(*):与0 个或多个任意的字符相匹配,可以匹配当前目录下的所有文件,但以点(.)开头的隐含文件除外。例如:file*可以代表file123、fileabc 或file。 问号(?):只与一个任意的字符匹配。可以使用多个问号。例如:file?可以与file1、file2、file3 匹配,但不与file、file10 匹配。 方括号([ ]):只与方括号中字符之一匹配,可以用短横代表一个范围内的字符,在方括号中如果以惊叹号开始,表示不与惊叹号后的字符匹配。例如,file[1234]只与文件file1、file2、file3 或file4 匹配;file[!1234]除了file1、file2、file3 和file4 这4 个文件外,与其他任何一个以file 起始的文件名匹配。 显示文件cd.txt 的内容,但不列出文件名标题。 [root@localhost/root]#head -q cd.txt
第一部分.Shell第一章。
安全与权限$ ls –lTotal 3433 (占用空间)—rwxr—xr—x 硬链接数文件属主属主所在组文件字节数更新时间文件名最前面的---表示文件类型为普通文件,此外还有d. l s b c p等代替----作为文件类型。
$ touch johnpon 创建一个文件名为johnpon的文件$ chmod u/g/o +/--/= r/w/x/s/t/l 文件名对属主或者同组或者其他用户的文件增加减少或者设定某个权限。
Eg:chmod u+x o-w dave以上为符号模式,改变权限位,下面是绝对模式:$ chmod 八进制数文件名0400 0200 0100 分别代表属主的读、写、执行0040 0020 0010 属主同组。
0004 0002 0001 其他用户。
Eg: $ chmod 664 johnpon目录权限为:直接把文件权限位的—换成d就可以了,drwxr-x—x ……………………..二、suid/guid使任何用户具有属主或属主所在组的权限位。
要想设置,就要在相应权限位前加4,使X变成S,而且必须是具有X的权限前提下。
rwxrw-r—764$ chmod 4764 johnpon - $ ls –l rwsrw-r-- 主意X变成S或者$ chmod u +s johnpon (推荐)三、chown和chgrp改变属主和组。
$ chown yuguang johnpon$ chgrp group1 johnpon 把文件johnpon改为玉光所有,归group1组。
$ group 找出自己属于哪个组$ group 用户名找出其他用户所在组四.Umask该命令确定了创建文件时的缺省权限。
和chmod 恰恰相反,正好拿走相应权限文件最大是6,目录是7Umask 002 对应文件是664 ,目录是775想知道当前权限可以用$ umask也可以设定权限$ umask 002五.使用软链接保存文件的多个映像指向文件的指针。
shell_学习笔记Shell学习笔记1、shell其实就是一个解释执行命令的程序,更简单的说就是用一定的语法将各种基本的命令组合起来,让shell程序去解释执行。
2、shell有好几种,例如bash,sh,tcsh,ksh,而我们常用的是bash..。
查看当前使用的shell命令:echo $SHELL。
3、shell中常用的命令。
4、环境变量PATH(路径PATH)。
在Unix中,我们使用的命令都是去环境变量中去找,如果我们希望我们自己写的shell能够执行,就必须把我们写的shell文件放到环境变量指定的其中之一的路径中,或者把shell当前的路径设置为环境变量。
5、修改环境变量,例如,我们可以把当前路径加到环境变量中:export PA TH=$PATH:.这只是临时的修改,一旦重启,重新登陆就无效。
要永久性的修改,就要对一个文件进行修改vi /etc/profile 在最后添加下面两行PATH=$PA TH:.export PA TH保存退出使用source 命令,让profile马上生效source /etc/profile6、shell脚本编程简单的常用操作:直接输入vi 可以看到版本信息重点:[INSERT]输入模式和命令模式的切换VIM - Vi IMprovedversion 7.0.237按[Esc]键切换到命令模式:w mytest.txt 保存文件名:q 退出:q! 强制退出---------------------------------我们新建一个文件并且进行编辑一般使用vi + 一个文件名编辑完毕就:wq 保存并且退出-------------------------------在网上看到一些命令大全, 我这里只演示一下我常用的输入模式和命令模式的切换,配合一般键盘上的功能键,例如方向键、[Delete]键等等,基本上可以操作vi对于要求不高的用户,并不需要用太多一些命令。
linux shell知识点Linux Shell是一种命令行解释器,用于在Linux系统中执行各种操作。
它是一种强大而灵活的工具,可以帮助用户管理文件、运行程序、执行脚本等。
本文将介绍一些常用的Linux Shell知识点,帮助读者更好地理解和使用Shell。
一、Shell的基本概念Shell是用户与操作系统内核之间的接口,它接收用户输入的命令并将其转发给内核执行。
Shell可以解释和执行用户输入的命令,并将结果输出给用户。
在Linux系统中,常见的Shell有Bash、Zsh、Csh等。
二、Shell的基本命令1. 文件和目录操作命令:- ls:列出当前目录下的文件和目录;- cd:切换当前工作目录;- pwd:显示当前工作目录的路径;- mkdir:创建新的目录;- rm:删除文件或目录;- mv:移动或重命名文件或目录;- cp:复制文件或目录;- touch:创建空文件或更改文件的访问和修改时间;- cat:连接文件并打印到标准输出;- grep:在文件中搜索指定的模式;- find:搜索文件系统中的文件;- chmod:修改文件或目录的权限;- chown:修改文件或目录的所有者;- chgrp:修改文件或目录的所属组。
2. 文件内容操作命令:- echo:在标准输出上打印指定的字符串;- head:显示文件的开头部分;- tail:显示文件的结尾部分;- less:逐页显示文件内容;- more:一页一页显示文件内容;- wc:统计文件的行数、单词数和字节数;- sort:对文件进行排序;- uniq:去除文件中的重复行;- cut:从文件中提取指定的字段;- sed:对文件进行流编辑操作;- awk:文本处理工具。
3. 系统管理命令:- ps:显示当前运行的进程;- top:实时显示系统资源使用情况;- kill:终止指定的进程;- shutdown:关闭或重启系统;- reboot:重启系统;- ifconfig:显示或配置网络接口信息;- ping:向指定的主机发送网络请求;- netstat:显示网络连接、路由表和网络接口信息;- ssh:远程登录到另一台计算机;- scp:在本地和远程主机之间复制文件。
第一章:shell基础 ●umask --查看当前用户创建文件或文件夹时的默认权限
eg: [test@szbirdora 1]$umask
0002 [test@szbirdora 1]$ls -lh -rw-rw-r-- test test myfile drwxrwxr-x test test 1 上面的例子中我们看到由test默认创建的文件myfile和文件夹1的权限分别为664,775.而通过umask查到的默认权限为002.所以可以推断出umask的计算算法为: umask file directory 0 6 7 1 5 6 2 4 5 3 3 4 4 2 3 5 1 2 6 0 1 7 0 0
●连接ln 硬连接 ln sourcefile targetfile 连接后的target文件大小和source文件一样 软连接 ln -s sourcefile targetfile 类似于windows的快捷方式
●shell script 基本结构 #!/bin/bash --------bash shell开头必须部分 # description --------注释部分(可有可无,为了阅读方便最好加以说明) variable name=value ---------变量部分,声明变量,赋值 control segment ---------流程控制结构,如判断、循环、顺序 eg. helloworld.sh #! /bin/bash # This is a helloworld shell script printchar = "hello world" echo $printchar
[test@szbirdora 1]$sh helloworld.sh hello world
●shell 特性 ①别名 alias eg. alias ll = “ls -l” ②管道 a |b 将a命令的输出作为b命令的输入 eg. ls |sort 将ls列举的项排序 ③命令替换 a `b` 将b命令的输出作为a命令的输入 eg. ls `cat myfile` 列举出cat myfile的输出项 ④后台运行 nohup command& 可通过jobs -l查看后台运行的脚本 ⑤重定向 >,< 可以改变程序运行的输出来源和输入来源 ⑥变量 可以用$varname 来调用变量 ⑦特殊字符 `用来替换命令 \用来使shell无法认出其后的特殊字符,使其失去特殊含义 ;允许一行放多个命令 () 创建成组的命令 ?? {} 创建命令块 ??
第二章:变量和运算符 ●本地变量:在用户现在的shell生命期的脚本中使用。设置变量:various_name=value.可用set 来查看。用readonly可以使变量只读。 ●环境变量:用于当前用户下所有用户进程(不限于现在的shell)。 设置变量:export various_name=value。用env查看。 用readonly可以使变量只读。 ●变量替换 echo ${variable name} 显示实际值到variable name echo ${variable name:+value} 如果设置了variable name,则显示其值,否则为空 echo ${variable name:?value} 如果未设置variable name,则显现用户定义错误信息value echo ${variable name:-value} 如果未设置,则显示其值 echo ${variable name:=value} 如果未设置,则设置其值,并显示 ●清除变量 unset variable name ●位置变量 位置变量表示$0,$1,$2...$9 $0 ----脚本名字 $1 ----根据参数位置表示参数1 eg. #! /bin/bash #parm.sh echo "This is script name : $0" echo "This is parameter 1: $1" echo "This is parameter 2: $2" [test@szbirdora 1]$sh parm.sh a b This is script name : parm.sh This is parameter 1: a This is parameter 2: b ●向系统中传递位置变量
#!/bin/bash #parm.sh find /u01/test/1 -name $1 -print [test@szbirdora 1]$ sh parm.sh myfile /u01/test/1/myfile ●标准变量 bash默认建立了一些标准环境变量,可在/etc/
profile中定义 EXINIT HOME IFS LOGNAME --当前登录用户名 MAIL MAILPATH PATH TERM --终端信息 TZ --时区 PS1 --登录提示,如[test@szbirdora 1]$ [test@szbirdora 1]$ echo $PS1 [\u@\h \W]\$ --\u -user --\h -host --\W -document PS2 --一命令多行,换行提示,如> PWD --当前目录 MAILCHECK --每隔多少秒检查是否有新邮件 [test@szbirdora 1]$ echo $MAILCHECK 60 SHELL MANPATH --帮助文档位置 TERMINFO --终端信息 ●特殊变量
$# 传递到脚本的参数个数 $* 以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个 $$ 脚本运行的当前进程ID号 $! 后台运行的最后一个进程的进程ID号 $@ 传递到脚本的参数列表,并在引号中返回每个参数 $- 显示shell使用的当前选项,与set命令功能相同 $? 显示最后命令的退出状态,0表示没有错误,其他表示有错误 eg. #!/bin/bash #parm echo "this is shellname: $0" echo "this is parm1 : $1" echo "this is parm2 : $2" echo "show parm number : $#" echo "show parm list : $*" echo "show process id: $$" echo "show precomm stat: $?" [test@szbirdora 1]$ sh parm.sh a b this is shellname: parm.sh this is parm1 : a this is parm2 : b show parm number : 2 show parm list : a b show process id: 24544 show precomm stat: 0 ●影响变量的命令
declare 设置或显示变量 -f 只显示函数名 -r 创建只读变量 -x 创建转出变量 -i 创建整数变量 使用+替代-,可以颠倒选项的含义 export -p 显示全部全局变量
shift[n] 移动位置变量,调整位置变量,使$3赋予$2,使$2赋予$1 n 前移n typeset 和declare同义
注意:双引号不能解析$,\,`三个字符,所以在双引号中可以引用变量、转义字符、替换变量 单引号可以解析,所以单引号中引用变量等无效 [test@szbirdora 1]$ echo "$test" test [test@szbirdora 1]$ echo '$test' $test
●运算符类型 ⒈按位运算符 ~ 取反 << 左移运算符 >> 右移运算符 & 与 | 或 ^ 异或 $[ ] 表示形式告诉shell对方括号中表达式求值 $[a+b] 2.逻辑运算符 && || >,<,=,!= 3.赋值运算符 let variablename1 +=variablename1+ varablename2
1.echo echo [option] string -e 解析转移字符
-n 回车不换行,linux系统默认回车换行 转移字符 \c \t \f \n #!/bin/bash #echo echo -e "this echo's 3 newlne\n\n\n" echo "OK" echo echo "this is echo's 3 ewline\n\n\n" echo "this log file have all been done">mylogfile.txt [test@szbirdora ~]$ sh echod.sh this echo's 3 newlne
OK this is echo's 3 ewline\n\n\n 上面可以看到有-e则可以解析转移字符,没有不能解析。echo空输出为空
2.read 可以从键盘或文件的某一行文本中读入信息,并将其赋给一个变量 read variable1 variable2 eg. #!/bin/bash #readname echo -n "first name:" read firstname echo -n "last name:" read lastname echo "this name is $firstname $lastname"
3.cat 显示文件的内容,创建内容,还可以显示控制字符 cat [options]filename1 filename2 -v 显示控制字符(Windows文件) cat命令不会分页显示,要分页可以采用more、less