linux shell笔记

1.主题命令

touch 创制空文件(当然,你也可行使echo >filename)

ln 创设链接符号(快速形式|引用):

  1. 标记链接:ln –s
  2. 硬链接:ln

 

区别:

  1. 符链接爆发了一个快捷格局,是对源文件之一个链接。
  2. 刚链接是底层字节的链接,简而言之,十分给是一个文件,两单文本称,占用同样块扇区,好处是看看空间,尽管删除一个,只要还有刚连接,那么些文件就仍旧在。

ls –i
查看文件inode编号(唯一的,可以确认文件是否也跟一个,类似于hash值)

mv 移动|重命名

file 查看文件(文件夹)类型等音讯

cat 呈现内容 -n:所有行号 ;-b:有配加行号;-T:不呈现制表符;

more 按页呈现;例如:cat xxx |more

tail 查看文件结尾;-n
number(或-number):指定最终几乎履;-f:追踪,可以动态追踪日志文件。

head 与tail类似,不过尚未-f参数

ps 进程

top 呈现linux进程(Linux版任务管理器)

kill 干少进程

df 查看硬盘空间

sort 文件内容排序

grep 搜索文本

$BASH_SUBSHELL 子shell检测变量

sleep timeCount(s)

句子结尾加&:后台情势运行

jobs 工作

(command 1;command 2…) 任务列表,可以而且举办

coproc 协程(后台有只子shell,执行你的通令,同时转一个job)

which 查看命令程序所在地点

history 命令历史记录

  !! 上一个历史命令(省着本提升箭头了)

  !number 第n条历史命令于实践

1、> file  
眼前没有令,shell会创设一个拖欠文件(长度为0独字符),假诺文件在此之前都是,其内容即碰面丢掉。 
 
2、一行中可是坐键入多条命令,命令中为此分好分隔。 
 
3、假设以键入的一声令下后和一个&符号,该令就发送至后台执行,也就是说,该令不再占已终端,可以延续处理其他工作。 
 
4、$字符是shell的特殊字符,即便$后与一个合法的变量名,shell会将她当作在此间用变量所蕴藏的价来替换的通令。表明式可以形容为$((expression))。 
 
5、shell变量$#,里面存的凡命令执行被所键入的参数个数。 
 
6、$*好引用传递给程序的有着的参数,在参数不确定或者参数数目可变的主次中,平时是雅有因而底。 
  
[email protected]
它会叫替换成“$n”,这里[email protected]前后的对仗引号是不可或缺的,倘若无,变量[email protected]和$*一齐相同。 
 
7、即便要叫一个序传递9独以上的参数,不可知就此$10、$11底情势来取得第10单和未来的参数,要用${n}这种格式。 
 
8、shell自动将最后所执行命令的脱离状态设置及shell变量$?中。 
    $cp phonebook phone2 
    $echo $? 
    $0 
    0操作成 非0操作败北 
 
9、内部命令test,它用来以if命令中测试相同栽或几乎种植标准,格式为 test
expression。 
    -n string 检测string不呢空为真 
    -n string 检测string为空为真 
   test命令的其余一栽格局[expression] 
    -eq 等于 
    -ge 大于等于 
    -gt 大于 
    -le 小于等于 
    -lt 小于 
    -ne 不等于 
   文件判断 
    -d  为目录  
    -e  存在 
    -f  普通文书 
    -r  可读文件 
    -s  长度不也0 
    -w  可写文件 
    -x  可执行文件 
    -L  链接文件 
   逻辑判断  
    !   逻辑非 
    -a  逻辑与 
    -o  逻辑或 
 
10、小括号格式 (  ) 
 
11、else结构 
    if command1 
    then 
       command 
    else 
       command 
    fi 
 
12、内部命令exit 它可即刻停止shell程序的行。exit n 
n为盼再次回到的脱离状态,不指定为末段一长达命令的退状态。 
 
13、elif结构 
    if command1 
    then 
       command 
    elif command2 
    then 
       command 
    else 
       command 
    fi 
 
14、case结构 
    case value in 
    pat1)  command 
           command 
        … 
           command;; 
 
    pat2)  command 
           command 
        … 
           command;; 
    … 
    patn)  command 
           command 
        … 
           command;; 
    esac 
 
    case语句被的特殊字符指定匹配形式: 
        ?表示无论是一个字符 
        *申示0或几单随机字符一个 
 
15、-x 调试程序选项 
    sh -x 程序名 程序参数 
 
16、空命令  : 
    其目标是呀吗无举办,多用于规范语句 
 
17、&&和||结构 
    &&       假如当旁要shell命令的岗位写了 command1 && command2
则优先实施command1,即便回去的脱离状态为0则履行command2;假如command1再次回到的退状态不也0,则超过了command2。 
    ||      
结构功效吗大都,区别在只有当第一久命令的退出状态不也0时才行第二长达命令。 
     
   
在这种结构的左右点滴度都得以为此管道线。若是就此在左手,检测的是管道线中最终一条命令的离状态。 
 
18、for命令 
    for var in  word1 word2 …  wordn/filenames[1-n]/$* 
    do 
        command 
        command 
        … 
    done 
 
19、while命令 
    while command1 
    do  
        command 
        command 
        … 
    done 
while
平常跟shift命令共同选拔。shift命令使地点变量向下转移(即$n到$n-1),并且$#递减。 
 
20、until命令 
    until command1 
    do 
        command 
        command 
        … 
    done 
及while格局相反 
 
21、sleep n 程序挂于n秒 
 
22、break n、continue n从循环中脱离 
 
23、PATH 
    PATH是执行命令时shell要摸的目,这么些目录互相之间用冒号{:}分隔 
 
24、exec 命令 
    exec program  以新shell代替当前程序 

环境

printenv 查看环境变量(env只好查看有的全局变量);
本命令辅助查看有条变量(不欲加以美金符号,echo需要)

set 查看|设置环境变量

export
到处变量为全局变量,就好以各类shell中拔取了(并无可知如shell的父shell环境变量发生变化)

unset 删除环境变量

passwd (chpasswd) 密码查看|修改

umask 为文件分配默认权限

chmod 更改权限

chown 改变归属权

http://www.bkjia.com/Linuxjc/556784.htmlwww.bkjia.comtruehttp://www.bkjia.com/Linuxjc/556784.htmlTechArticle1、 file
前边没有令,shell会创造一个拖欠文件(长度也0单字符),假如文件从前曾在,其内容就是相会少。
2、一行中唯独为键入多漫漫命令…

分区

fdisk 分区;p:显示基本配备音讯;n:new独分区;w:write进设备

mkefs 格式化ext分区;

mke2fs 格式化ext2分区;

mkfs.ext3 格式化ext3分区;

mkfs.ext4 格式化ext4分区;

mkreiserfs 格式化reiserfs分区

jfs_mkfs 格式化jfs分区

mkfs.xfs 格式化xfs分区

mkfs.zfs 格式化zfs分区

mkfs.btrfs 格式化btrfs分区

fsck 检查修复分区
-a:自动检测修复;-A:列有fstab中负有分区,并检测;-C:显示扶助之文件系统检测时的快慢条(ext2、3);-s:五只文件系统依次检查;

LVM
可以增长六只硬盘到一个卷组(整合呢一个大分区也没问题),可以创制快照,镜像。

何以成立LVM物理卷?使用fdisk
t来改分区类型(为8e);或使pvcreate成立,pvdisplay查看成立进度;

vgcreate 成立卷组(为物理卷);例如:vgcreate Vol1
/dev/sda1;vgdisplay查看进度

lvcreate 创设逻辑卷;例如:lvcreate –l 100%FREE –n lvtest
Vol1;lvdisplay查看进度

冷艳这样还不够!!!还要起文件系统,如ext4的LVM:mkfs.ext4
/dev/Vol1/lvtest。上述成立了一个ext4品类的逻辑卷lvtest。还要手动挂载:mount
/dev/Vol1/lvtest /mnt/my_partation

LVM的同堆积管理命令:

vgchange 激活和剥夺卷组
vgremove 删除卷组
vgextend 将大体卷加到卷组中
vgreduce 从卷组中删去物理卷
lvextend 扩充逻辑卷的大大小小
lvreduce 减小逻辑卷的分寸

2.shell编程

变量是宽松的概念,任何由字母、数字或者下划线组成的文本字符串,长度不跳20只。用户变量区分轻重缓急写,所以变量
Var1 和变量 var1 是殊之。

shell编程最强劲的地点在可自console的输出中取回这多少个输出,并无拔取,一旦这样做,则好下shell做其余业务了,只要您可知以console中输出它。

怎么着由shell中收获输出的情?二种植情势:

  1. 倒引号符号;
  2. $();

 例如,使用date命令可以出口当前些天,假若写shell脚本的话,可以透过如下两栽写法获取console的date:

1 date=$(date);
2 date=`date`;

字符串假设统一的话,直接各个引号,而无需要+或者此外的操作,如:

str1="string1";
str2="string2";
str3=$str1$str2;

出口或引用一个变量,则可以:

echo $str3;

出口重定向:>

每当已有些文件被益内容:>>

输入重定向:<

内联输入重定向:<<

管道:|

其实,windows console中呢支撑管道.

譬如,以前用more对console的始末开展分页:ls -al |more

既是是管道,必然协理多管道,虽然可能单会由此到零星单

shell中计算:expr

比如总括1+2:

expr 1 + 2
#注意上式的空格,运算符间都是有的
表11-1 expr 命令操作符
arg1 |arg2  如果arg1既不是null也不是0,返回arg1;否则arg2
ARG1 & ARG2 如果没有参数是null或零值,返回 ARG1 ;否则返回 0
< 如果 ARG1 小于 ARG2 ,返回 1 ;否则返回 0
<= 如果 ARG1 小于或等于 ARG2 ,返回 1 ;否则返回 0
= 如果 ARG1 等于 ARG2 ,返回 1 ;否则返回 0
!= 如果 ARG1 不等于 ARG2 ,返回 1 ;否则返回 0
>= 如果 ARG1 大于或等于 ARG2 ,返回 1 ;否则返回 0
> 如果 ARG1 大于 ARG2 ,返回 1 ;否则返回 0
+  
 
*  
/  
%  
STRING : REGEXP 如果 REGEXP 匹配到了 STRING 中的某个模式,返回该模式匹配
match STRING REGEXP 如果 REGEXP 匹配到了 STRING 中的某个模式,返回该模式匹配
substr STRING POS LENGTH 返回起始位置为 POS (从 1 开始计数)、长度为 LENGTH 个字符的子字符串
index STRING CHARS 返回在 STRING 中找到 CHARS 字符串的位置;否则,返回
index STRING CHARS 返回字符串 STRING 的数值长度
+ TOKEN 将 TOKEN 解释成字符串,即使是个关键字
(EXPRESSION) 返回 EXPRESSION 的值

内需专注,尽可能的把运算符号以前增长转义字符,否则很可能会晤促成expr收到错误!

例如 expr 1 * 2

于是,bash shell为了保全和Bourne shell的配合而富含了 expr
命令,但它同为提供了一如既往种植更简便方法来推行数学表明式。在bash中,在将一个数学运算结果给予给某个变量时,可以用美金符和方括号(
$[ operation ] )将数学表明式围起来。

然,就分外便宜了,依然1+2,则可写成:

$[1+2]

倘向不需考虑空格的题目~~~

这里需要注意的是,bash
shell本身不援助浮点数运算,所以可以利用其他的点子:

bash计算器:bc;

动用bash需要留意,精度(scale)默认为0,所以用安装:scale=0

bc本身补助定义变量

 在本子中选拔bc:

echo “scale=4;1/2” |bc
# 或
echo “scale=4;print 1/2” |bc

 更好之艺术是使用内联输入重定向(<<):

#!/bin/bash
var1=10.46
var2=43.67
var3=33.2
var4=71
var5=$(bc << EOF
scale = 4
a1 = ( $var1 * $var2)
b1 = ($var3 * $var4)
a1 + b1
EOF
)
echo The final answer for this mess is $var5

## EOF既是输入的开始,又是输入的结束,所以计算没有问题的

剧本退出命令:

exit exitCode

翻开退出代码:

echo $?

剥离代码意图:

0 命令成功结束
1 一般性未知错误
2 不适合的shell命令
126 命令不可执行
127 没找到命令
128 无效的退出参数
128+x 与Linux信号x相关的严重错误
130 通过Ctrl+C终止的命令
255 正常范围之外的退出状态码

 条件结构:if,then,elif,fi

if command
#注意是command不是condition!
then
  commands
elif command
then
      commands
...
else
  commands
  ...
  if command
  then
    commands
  fi
fi
#或
if command;then
  commands
fi

test

如何是condition呢?答案是:

test,即if行由command 前边改吧:

test condition

数值比

例如:

ret=1
if test ret -eq 1
then
    echo ret is 1
fi

至于里面的-eq,则是判断标准的同种植样式:等于。

test 命令的数值正如效益

说明

等效

n1 -eq n2

==

=

-ge

>=

>=

-gt

>

<

-le

<=

<=

-lt

<

<

-ne

!=

!=

test的其他一样种写法是:

[ condition ]
#注意方括号都和condition有空格的!!!

如,将test子例改写一下,即:

ret=1
if [ ret -eq 1 ]
then
    echo ret is 1
fi

test可以做:

 数值相比较
 字符串相比
 文件于

字符串相比较

test字符串比较测试
str1=str2 ==
!=  
< len
> len
-n len>0
-z len=0

特意需要注意容易犯错误的地点在符号会和bash本身的片段记顶牛要致执行出错!!!包括:

<,>.

用一旦开展转义,即:

\>,\<.

文本于

文件比较功能参数
-d file 存在目录
-e file exist
-f file 存在文件
-r file read
-s file 文件空
-w file write
-x file execute
-O file own
-G file group
file1 -nt file2 new than
file1 -ot file2 old than

怎么简单的拿到条件判断时规格的结果也?

test 1 \= 1;echo $?

及句测试,为真正,显示0

留意:test的有限独参数,不应有以其间统计,而应该在头里的步骤完成,否则恐怕会晤得到错误的结果!!!(亲测)

如:一定有$HOME,所以test -e $HOME 必然也确实(0)。

唯独,要是$HOME中不存123索引或文件夹,则test -e $HOME/123依旧会回到0.

假使论自己写的专注,写吧x1=$HOME/123;test -e $1;echo
$?则会回到1,即真实了果.

就此自然即使专注这种境况!

再次多的标准:

&&,||

再次尖端的数值标准:(())

(())操作符
val++  
val–  
++val  
–val  
!
~ 按位非
**
<<  
>>  
& 按位与
| 按位或
&& 逻辑与
|| 逻辑或

测试过程中,发现,还补助广大操作:==,!=,<,>,<=,>=,+,-,*,/.

除此以外,(())不待转义以及空格!!!

还高级的字符串条件:[[]](20章)

高档功用:regex,

再度尖端的格结构:case

case variable in
pattern1 | pattern2 ) commands1 ;;
pattern3 ) commands2 ;;
*) default commands ;;
esac

 更多之结构化:for

for var in list
do
commands
done

地点所说之list,其实可以是字符串(每个件为空格分开,假诺想避免起中有空格,则可以吗每个项加一针对引号,假诺又在引号,最好转义,用此外一样种植引号次的)。

总的来说,这么些for用在依旧无编程语言的便利,假如想进行100次等某些命令,那么需要特别成一个具100码之列表。

for star in $(ls)
 do 
    echo "111 $star"
done

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图