Linux 笔记

删除

x 小写的x表示向后删除一个字符,也就是删除光标所在字符

nx n表示数字,表示向后删除每个字符,例如:10x表示删除包括光标在内的后面10个字符

X 大写的X表示删除光标前的一个字符,不包括光标所在字符

nX n表示数字,表示向前删除每个字符,例如:10X表示删除光标前的10个字符,不包括光标所在字符

dd 删除光标所在的行,其实也是剪切

ndd n表示数字,删除光标所在的向下n行

d1G 删除光标所在行到第一行数据

dG 删除光标所在行到最后一行数据

d0 删除光标所在到该行第一个字符

d$ 删除光标所在到该行最后一个字符

yy 复制光标所在的行

nyy n表示数字,复制光标所在的向下n行

y1G 复制光标所在行到第一行数据

yG 复制光标所在行到最后一行数据

y0 复制光标所在到该行第一个字符

y$ 复制光标所在到该行最后一个字符

p 小p表示将已复制的数据粘贴在光标的下一行

P 大P表示将已复制的数据粘贴在光标的上一行

J 将光标所在的行与下一行的数据合并为一行

u 小u表示撤销上一步操作(特别重要,类似于windows里面的word里面的crtl+y)

ctrl+r 与u相反,表示重做前一步操作(特别重要,类似于windows里面的word里面的crtl+y)

. 点,表示重复前一个操作,例:想多次复制,一直按这个就行了

注:以上删除、复制和粘贴均是在非编辑模式下的操作

 

语法规则:命令 -选项 参数(命令操作的目录){之间要有空格}

2个特殊的目录:.和..分别代表当前目录和当前目录的父目录

alt+F#从字符界面到其他    ctrl+Alt+F#从图形界面到其他

shutdown -h now(立即关闭)

shutdown -h +5(5分钟后关闭)        系统会播报

shutdown -P +5(5分钟后关闭)       P是大写 。小写无效

shutdown -r +5"the system will be power off in 5minutes" (5分钟后关闭,并推送信息到每个用户)

                                                                                      ↑所有组

   -普通的二进制文件                                            ↑所有者    ↑          ↑ 4096个文件

d    rwx             rwx                 rwx          4       root        root     4096

↑     --              --                   --             ↑4个硬链接文件

↑     ↑               ↑                     ↑rwx统称其他o

↑     ↑               ↑rwx统称所有组g

↑     ↑ 

↑     ↑  r:读操作,w 写操作,x执行操作 .  rwx 统称为所有者u

↑ d代表目录   f二进制文件

 

以上都可以通过shutdown -c取消

 

pwd 查看当前工作目录

 命令ls    命令所在路径/bin/ls

ls 选项[-ald][文件或目录]

-a显示所有文件,包括隐藏文件

-l详细信息显示

-d查看目录属性

 

语法规则:cd [目录]

cd .. 返回上级   

cd /返回根目录  

cd /etc 到etc 目录下

cd 若不指定则切换到$HOME下

 

touch[文件名]   创建文件    

touch a                               -->删除的话直接用 rm a    ,然后y既可

touch -a -t 201610210941 myfile 修改文件的存取时间

touch -m -t 201610210941 myfile 修改文件的修改时间

 

mkdir [目录名]  创建一个目录。

mkdir dir1                          -->删除的话直接用 rm -r dir1    ,然后y既可,若用上面的会无法删除,且xx是一个目录

 

rm  -r[文件或目录]       rm即remove

rm a 然后输入y既可删除当前的a文件-->用ls 查看既可发现

rm -r a 也可以      -r是删除目录

rm -rf etc既可强制删除

 

cp -R[源文件或目录][目的目录]  复制目录  

cp file1 file2 dir1    -->将file1 file2复制到dir1目录中

cp /etc/services ./services 复制到当前目录

cp services ser 可以边复制边改名

cp -R /etc ./所有的文件复制到当前目录

 

mv[源文件或目录][目的目录]  移动

mv ./etc/inittab ./ 把当前目录下的Inittab移动到当前目录下

mv file1 file2     将当前文件名字改为file2  

mv file1 newdir    将当前file1移动newdir目录中

touch a    mkdir newdir     mv ./a ./newdir    ls      cd ..    rm -r newdir

 

cat[文件名]    显示文件信息

如 cat /etc/issue   显示版本信息

cat -n 按行号显示信息

 

move[文件名] 分页显示文件内容

 

tail -num[文件名]  查看文件的后几行

tail -10 /etc/services 

tail -f /etc/services   动态变化

 

head -num[文件名]  查看文件的前几行

head -20 /etc/services              

如在根目录下:  mkdir newdir     cd newdir      touch a     vi a    "sdgjhajkltelkwajtkl这里是文本信息"   保存退出

head  -1 /newdir/a      -->sdgjhajkltelkwajtkl这里是文本信息

 

ln -s[源文件][目标文件]     产生连接文件  ln  link 的缩写

ln -s /etc/issue    软连接文件-->指向源文件    源文件删除的话,软文件也会没有

ln /etc/issue    硬链接文件       为防止源文件被删除,  一般需要被封硬链接文件

 

(1)chmod[{ugo}{+-=}{rwx}][文件或目录]   改变文件或目录权限  (2){mode=421}[文件或目录]

+是增加权限   -删除权限  =直接赋予权限    

 

如:chmod  ugo+rwx file1 赋予文件file1 所有人所属组其他人 读写执行能力

 通过ls -l 查看   当前目录里文件的权限

chmod 777 file1  设定file1为所有用户具有全部权限   7 既4+2+1  4是读   2是写 1 是执行

 

chown [用户][文件或目录]  改变文件或目录的所有者

chown nobody file1     ls -l      chown root file1   ls -l

 

chgrp [用户][文件或目录] 改变文件或目录的所有组

chgrp nobody file1      ls -l  

 

whoami   显示当前的登入用户 

 

 umask [选项] [掩码]  

umask [-S]        s要大写,显示设置文件的缺省权限    权限掩码 022   

umask 022  

umask 027 //更加安全

 

022表示默认创建文件权限为755,也就是rwx r-x r-x 。 

027表示默认创建文件权限为750,也就是rwx r-x --- 。   

ls -ld newdir  看目录的权限

 

which[命令名称]  文件搜素命令

which ls                 ls  --color 有颜色区分

which rm               rm -i询问   

 

find[搜索路径][搜素关键字] 查找文件或目录

find /etc -name init 在目录/etc中查找init文件

find /etc -name init*在目录/etc中查找所有带有init的文件

find /etc -name init???在目录/etc中查找所有带有init的7位文件

   通配符  *:0个或多个字符   ?:代表单个字符

find /etc -size +204800  在etc目录下查找大于100m的文件

find /etc -size +163840 -a size -204800  在etc目录下查找大于80m小于100m的文件       

-a 是逻辑与 相当于and  -o 是逻辑或,相当于或

find /etc -type f  在etc目录下查找二进制类型的文件

find /etc size +163840 -a -type f 在etc 目录下查找大于80m并且是二进制类型的文件

mkdir newdir   chown xxx newdir   ls -l     find  / -user xxx     在根目录下查找所有者为xxx的文件

find  /etc  -ctime -1 在根目录下查找24小时内被修改过的文件

c是change改变文件的属性 如:所有者,所有组,权限。。。

m是modify改变的是文件的内容

a是access访问

以天为单位 ctime,atime,mtime 

以分钟为单位 cmin, amin,mmin

find /bin -type f -exec ls -l {} \;

在bin目录下查找二进制文件并显示其内容, 最后是有分号的。

 

locate [搜素关键字]搜素与关键字相关的所有文件

locate file 列出所有跟file有关的文件  ,若是a ,就列出所有带有a的文件

updatedb更新数据库,与上面是配对的。  

 

grep[指定字串][源文件] 在文件中搜素字串匹配的行并输出

grep ftp /etc/services 列出目录下所有ftp的行

 

man[命令或配置文件] 获得帮助信息

man ls 查看ls命令的帮助信息

man cd 不能查看,它是内置信息  只能 help cd

 date                 #以默认方式显示当前日期和时间

date -u     #传统unix风格选项

 

 

通过IO重定向生成文件myf:

ls -l /usr > myf     ;  ls >> myf

分屏显示文件内容(more/less)

more myf   或  ls -l /myf | less    

>或>>输出重定向

<或<输入重定向

> 是定向输出到文件,如果文件不存在,就创建文件;如果文件存在,就将其清空

 >>是将输出内容追加到目标文件中。如果文件不存在,就创建文件;如果文件存在,则将新的内容追加到那个文件的末尾,该文件中的原有内容不受影响。

输入输出重定向可以参考: http://www.cnblogs.com/chengmo/archive/2010/10/20/1855805.html

 

管道:

将一个命令的输出传送给另外一个命令,作为另外一个命令的输入;

例如:ls -l /etc | more 

命令连接符

;间隔的命令按顺序依次执行

&&前后命令存在逻辑与关系,只有前面的关系被执行了,后面的关系才能被执行

||前后命令存在逻辑或关系,只有前面的关系执行失败了,后面的关系才能被执行

 

命令替换符

将以个命令的输出作为另外一个命令的参数

命令1 `命令2`  此处为反引号

ls -l `which touch`

 

 

  

gzip选项[文件]   压缩文件  gzip a 

gunzip [文件] 解压文件   gunzip a.gz

 

 

 

 

tar 选项[cvf][目录]   -c产生.tar打包文件 -v显示详细信息  -f指定压缩后的文件名 -z打包同事压缩

mkdir a

打包同时压缩tar -zcvf b.tar.gz a 

解包同时解压tar -zxvf b.tar.gz    2者原文件都还在

 

打包tar -cvf b.tar a 

解包tar -xvf b.tar

zip选项[-r][压缩后文件名称][文件或目录]

-r压缩目录

zip services.zip /etc/services 压缩文件

zip -r test.zip/test压缩目录

unzip解压缩

 

 write 

write <用户名>

向另外一个用户发送信息  ,ctrl+d作为结束

$write feng 

 

wall

wall [message] [文件名]

向所有用户广播信息

$wall happy new year

 

ping

ping 选项IP地址

ping 211.67.116.9

 

Shell变量

变量:是shell传递数据的一种方法,用来代表每个取值的符号名。 

Shell有两类变量:临时变量和永久变量。 

临时变量是shell程序内部定义的,其使用范围仅限于定义它的程序,对其它程序不可见。包括:用户自定义变量、位置变量。

永久变量是环境变量,其值不随shell脚本的执行结束而消失。

 

1、用户自定义变量

用户定义的变量由字母或下划线开头,由字母、数字或下划线序列组成,区分大小写。变量名长度没有限制。在使用变量值时,要在变量名前加上前缀“$”。 

 

2、设置和使用变量

设置变量:习惯上用大写字母来命名变量。变量名只能以字母表中的字符开头,不能用数字。 

变量赋值:“=”两边没有空格。 

定义时赋值,如NUM=1 

将一个命令的执行结果赋给变量,如:TIME=`date`;TIME=$(date +%F)   //注意date 后面有一个空格

将一个变量的值赋给另一个变量,如:B=120 ; A =$B 

使用echo命令查看变量值。例如:echo $A 

 

 

单引号会原封不动的把变量输出。双引号则输出内容。 

 

 

删除变量:unset [变量名]

unset time 

 

7. 特殊变量

$@  相当于数组

$* 这个程序的所有参数

$# 这个程序的参数个数

$$ 这个程序的PID

$! 执行上一个后台命令的PID

$? 执行上一个命令的返回值

 

#!/bin/sh
if [ $# -le 0 ]
then
 echo "not enough "
exit 0
fi
while [ $# -gt 0 ]
do
 echo "$@"
echo "$*"
echo "$#"
echo "$$"
echo "$!"
echo "$?"
break
done

sh b.sh 1 2 3 4 5

输出结果为:1 2 3 4 5

1 2 3 4 5

5

3295

0

 

 

9. read 命令

read 的例子:

#! /bin/sh

read first second third

echo "the first parameter is $first"

echo "the second parameter is $second”

echo "the third parameter is $third"

 

 expr命令:对整数型变量进行算术运算

语法: expr  表达式    #注意 运算符之间要有空格

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@hpc test]# expr 3 + 5
8
[root@hpc test]# var1=8
[root@hpc test]# var2=2
[root@hpc test]# exp
expand       exportfs     expresskeys  
export       expr         
[root@hpc test]# expr $var1 - 5  //expr 后面要有空格 操作符之间也要有空格
3
[root@hpc test]# expr $var1 / $var2
4
[root@hpc test]# expr $var1 * $var2
expr: syntax error
[root@hpc test]# expr $var1 \* $var2   //2 个数相乘,需要要转译符\*
16

2 expr 程序的例子

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@hpc test]# cat expr.sh  
#! /bin/sh  
 a=10
 b=20
 c=30
 value1=`expr $a + $b + $c`
 echo "The value of value1 is $value1"
 value2=`expr $c / $b`
 echo "The value of value2 is $value2"
 value3=`expr $c \* $b`    #整除
 echo "The value of value3 is $value3"
 value4=`expr $a + $c / $b`
 echo "The value of value4 is $value4"

测试:

1
2
3
4
5
[root@hpc test]# ./expr.sh 
The value of value1 is 60
The value of value2 is 1
The value of value3 is 600
The value of value4 is 11

3 复杂的运算

1
2
3
[root@hpc test]# var4=8
[root@hpc test]# expr `expr 5 + 11` / $var4
2

【例】

1
2
3
4
5
[root@hpc test]# var1=8
[root@hpc test]# var2=2
[root@hpc test]# var4=`expr $var1 / $var2`
[root@hpc test]# echo $var4
4

 

 

 

//注意反引号

 

 

......................................................

 

 

 

 

 

 

 

 

 

 

 

 

 

 

#!/bin/sh
if [ $a1 -eq $a2 ]; then   //要有空格   [ $a1 -eq $a2 ]折是test $a1 -eq $a2的简化
echo "$a1 equals $a2"
elif [ $a1 -lt $a2 ]; then
echo "$a1 littler than $a2"
elif [ $a1 -gt $2 ]; then
echo "$a1 greater than $a2"
fi

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

     

 

 

 

 

 

#!/bin/sh
echo "what day is it taday"
read day
case $day in
"monday") echo "monday";;   //可以用|
"tuesday") echo "tuesday";;
"wednesday") echo "wednesday";;
*) echo "other day";;
esac

 

 

//上面的while后面少条件的,有错误

格式一

while 条件;

do

    语句

done

格式二 死循环

while true

do

    语句

done

格式三 死循环

while :

do

    语句

done

格式四 死循环

while [ 1 ]

do

    语句

done

格式五 死循环

while [ 0 ]

do

    语句

done

#!/bin/sh
for day in monday tuesday wednesday thursday friday saturday sunday
do
echo "what day is it taday"
read day
case $day in
"monday"|"tuesday"|"wednesday"|"thursday"|"friday"|"saturday"|"sunday") echo "$day";;
*) echo "error  day"
break;;
esac
done

 

shift 指令

#!/bin/sh
if [ $# -le 0 ]
then
 echo "not enough "
exit 0
fi
sun=0
while [ $# -gt 0 ]
do
echo "$@"
 shift
done

参数左移,每执行一次,参数序列顺

次左移一个位置,$#的值减1,

用于分别处理每个参数,移出去的参数不再可用

 

until   命令

#!/bin/bash
a=0
until [ ! $a -lt 10 ] //不小于10的时候跳出循环
do
   echo $a
   a=`expr $a + 1`
done

结果:0 1 2 3 4 5 6 7 8 9

 

16. Shell 脚本调试

sh -x script

这将执行该脚本并显示所有变量的值。

sh -n script

不执行脚本只是检查语法的模式,将返回

所有语法错误。

 

select变量

select 变量in 关键字

do

n command 1

ü... ...

n command n

done

#!/bin/sh
echo "a is 5,b is 3.Please select your method"
a=5
b=3

select var in "a+b" "a-b" "a*b" "a/b"
do
        break
done

case $var in
        "a+b") echo 'a+b='`expr $a + $b`;;
        "a-b") echo 'a-b='`expr $a "-" $b`;;
        "a*b") echo 'a*b='`expr $a "*" $b`;;
        "a/b") echo 'a/b='`expr $a "/" $b`;;
        *) echo "input error..."
esac

显示的的a+b是select上的。

 

posted @ 2016-09-22 09:28  一米阳光!  阅读(209)  评论(0编辑  收藏  举报