第一章 初始 Linux shell

Linux内核主要四种功能:

1.系统内存管理 2.软件程序管理
3.硬件设备管理 4.文件系统管理

shell:交互工具。

第三章 基本的bash shell 命令

1.man:查系统手册。

2.cd:切换目录。

绝对文件路径:从“\”目录开始访问路径。可用 pwd 查看当前目录绝对路径值。

相对文件路径:从当前目录开始,路径不以“/”开头。

.. :上级目录。
. :当前目录。

3 . ls

ls -l :显示当前目录下的文件和目录。

ls -a :显示隐藏文件。

ls -R :递归显示当前目录下包含的子目录中的文件。

ls -F :区分文件和目录(后面有/)

4.文件操作

文件:

创建空文件:touch filename

删除文件:rm fielname (加-f 不提示)。

复制文件:cp source destination (加 -i 询问是否要覆盖已有文件)。

递归复制整个目录的内容:cp -R source destination。

创建链接文件:

符号链接:新文件,存在唯一的inode,依赖于源文件。ln -s file ls_file

硬链接:源文件的别名。ln file ls_file

ls_fiel:链接文件的名字

文件重命名:mv file1 file2 (fiel1 改名为file2)

文件位置移动:mv file destination

查看文件内容:cat filename (-n 给所有的行加上行号)

目录:

创建目录:mkdir directoryname

删除空目录:rmdir directoryname

删除非空目录:rm -rf directoryname

5.more 与 less

分页工具:more

more filename 后,可以按空格或回车逐行向前了浏览文件,按q键退出。

less :可以在本文件中前后翻动。

6.查看部分文件:

tail -n 10 查看文件倒数10行数据

head -n 10 查看文件前10行数据

第四章 更多的bash shell 命令

1.查看系统上运行的所有进程 ps -ef 或 ps -aux

2.实时显示系统进程信息: top

3.进程信号

ctrl+ z :变成后台进程,发送信号SIGSTOP
ctr + c :结束当前进程,发送信号SIGINT
ctrl+ / :退出当前进程,发送信号 SIGQUIT

4.挂载存储媒体

例:挂载U盘步骤

  1. 虚拟机检测到U盘,并连接。
  2. fdisk -l 查看磁盘分区情况。
  3. mount -t vfat /dev/sdb1 /mnt/USB 挂载到/mnt/USB
  4. ls -al /mnt/USB 查看U盘文件
  5. 卸载U盘 umount /mnt/USB
  6. 如果device is busy 则切换到home下 cd /home ,然后 umount /home/mnt/USB
    就可以了

5.查看所有已挂载磁盘的使用情况 df

6.显示当前目录下所有的文件、目录和子目录的磁盘使用情况: du

7.sort 排序命令

cat sort.txt | sort //根据每行首字母排序,默认升序
或sort sort.txt

sort -t , -k 1 sort.txt
-t:指定域分割字符
-k:指定域

[root@localhost home]# sort -t , -k 2 sort.txt
[root@localhost home]# sort a //根据字符ascii编码值排序
[root@localhost home]# sort -n a //根据整数大小
[root@localhost home]# sort -n -r a //改变排序方向(倒序)
[root@localhost home]# sort -t , -k 3.2 sort.txt //根据指定域

8.grep 搜索数据

-a:搜索二进制

-i:忽略大小写

-n:显示文本行数

grep [option] pattern [file]

例:

在文件file1 中查找“hello”:grep hello file1

查找以’t’开头的行:grep ‘^t’ passwd

查找以’t’结尾的行:grep ‘t$’ passwd

查找不以A-Z,a-z开头的行:grep ‘^[^a-z A-Z]’ passwd

9.tar 命令:

[root@localhost home]# tar -cf hello.tar.gz hello2.c
hello.c
//创建压缩文件
[root@localhost home]# tar -cvzf hellonew.gz hello2.c
hello.c //”z”,压缩算法

[root@localhost home]# tar -tvf hellonew.gz //列出压缩文件中
有文件信息

[root@localhost home]# tar -xvzf hellonew.gz //解压

[root@localhost home]# tar -xvf hello.tar.gz //解压

[root@localhost home]# tar -xvzf hellonew.gz -C /tmp //解压
到制定目录,”-C “

第五章 理解shell

1.进程列表

例:依次执行命令,命令用括号括起来,成为进程列表 (pwd ; ls;cd/etc ; pwd ; cd

; pwd ; ls)

2.后台模式

在命令后加 &字符

第六章 使用Linux环境变量

bash shell中,环境变量分两类:全局变量和局部变量。

1.查看全局变量:用 env 或者 printenv 命令

2.设置局部用户变量

例:

$ my_variable=”hello world”(变量名、等号和值之间没有空格)

echo e c h o echo my_variable

hello world

3.设置全局变量

用export ,变量名前不需要加$

4.删除环境变量

用unset ,变量名前不用加$

5.数组变量

例:

$ array=(1 2 3 4 5)

echo e c h o echo {array[*]} 输出数组全部变量

$ array[0]=3 改变数组的某个值(下标从0开始)

$ unset array[[0] 删除数组的第一个值

第七章 Linux的安全性

1./etc/passwd 用户信息文件

/etc/shadow 只有root用户才能访问

2.用户操作

添加用户

useradd 或 adduser username

删除用户

userdel username (加 -r 选项会删除系统中属于该用户的任何文件)

修改用户

-p:该密码

-L:锁定用户,使用户无法登陆

-U:解除锁定,使用户能登陆

3.修改用户密码

第一种方法:usermod -p 123456 username

第二种方法:passwd username 然后输入密码

第三种:echo “123456”| passwd –stdin username

4.文件权限

-rwxrw-r-x

-:文件类型,普通文件
rwx:文件属主的权限
rw-:属组成员的权限
r-x:其他用户的权限

r:可读(4)。 w:可写(2)。 x:可执行(1)。

改变文件访问模式 chmod :

u+|-|=:改变文件所用者操作模式(+ 新增 - 取消 = 指定模式)

[root@localhost home]# chmod u=rx a.out
[root@localhost home]# chmod u+w a.out
[root@localhost home]# chmod u-r a.out

g+|-|=:改变文件所用者同组用户操作模式

[root@localhost home]# chmod g=rx a.out
[root@localhost home]# chmod g+w a.out
[root@localhost home]# chmod g-r a.out

o+|-|=:改变其它组用户操作模式

[root@localhost home]# chmod o=rx a.out
[root@localhost home]# chmod o+w a.out
[root@localhost home]# chmod o-r a.out

a+|-|=:所有用户操作模式

[root@localhost home]# chmod a=rx a.out
[root@localhost home]# chmod a+rx a.out
[root@localhost home]# chmod a-rx a.out

[root@localhost home]# ./a.sh
bash: ./a.sh: 权限不够
[root@localhost home]# chmod u+x a.sh
[root@localhost home]# ./a.sh

改变所属关系:

chown owner filename

第十章 vim编辑器

vim/vi 文本编辑

vim 三种操作模式:

1.输入模式
2.命令模式
3.末行模式
按下 字母 :i
命令模式 ——————>输入编辑
按下:esc
输入编辑 ——————>命令模式
按下:shift+:
命令模式 ——————>末行模式

[root@localhost home]# vim test //打开文件(文件不存在先创建)

命令模式常用的命令:

yy:复制当前行
nyy:复制多行(n>=2)
pp:粘贴
dd:删除当前行
ndd:删除多行(n>=2)
shift+~:大小写替换
gg=GG:语句块自动排版
gg:快速定位到文件首行
GG:快速定位到文件末行

末行模式常用的命令:

wq:保存退出
q!:强制退出
w filename:文件另存为
set nu:显示行号
set nonu:取消行号显示
u:撤销最近一次更新
!shell指令 !ls :执行shell指令
%s/原字符/新字符/:替换每行的首次匹配的原字符
%s/原字符/新字符/g:替换整个文件匹配的原字符
:%s/\/usr\/home/111111/g :”\/”取消特殊含义
:%s/^/新字符/:在每行开头添加字符
/key word/:高亮度显示关键字
split filename :水平分屏,ctr+w 切屏
vsplit filename :垂直分屏

第二部分 shell脚本编程基础

第十一章 构建基本脚本

  • 1.创建shell脚本文件时,文件第一行必须指定使用的shell。

    格式为:#!/bin/bash

“#!”告诉系统用哪个解释器执行,可以是bash,也可以是sh

“#”注释符

  • 2.echo -n 文本字符串和命令输出显示在同一行
  • 3.使用环境变量

    环境变量前加 符号或者 符 号 或 者 符号 或者 {variable}

  • 4.命令替换

    命令输出信息赋值给变量。

    两种表示:反引号字符(“) 和 $()

例:testing=`date` 等价于 testing=$(date)
  • 5.重定向输入输出

    输出重定向:> 和 >>

 [root@localhost home]# ls -l  >  ls.txt //标准输出到文件,如果文件不存在先创建文件ls.txt,如果文件存在并且有数据,先清空文件,再写数据[root@localhost home]# echo "hello" >> ls.txt//在文件末尾追加数据

输入重定向:< 和 <<

 <  :command  < inputfile 将文件的内容重定向到命令[root@localhost home]# wc < test.txtwc统计文本的行数、单词、字节数<< :必须指定一个文本标记来划分输入数据的开始和结尾。[root@localhost home]# wc << EOF//连续多次从键盘输入,"EOF终止输入结束字符
  • 6.管道

    “|”称为管道符号(匿名管道),实现进程之间通信.把前一个进程标准输出 数据作为下一个进程的标准输入

    例:

    [root@localhost home]# cat /etc/passwd | grep root | wc

    管道最流行的用法之一是将命令行产生的大量输出通过管道传送给more命令。

  • 7.执行数学运算

  • expr 命令:处理数学表达式(+ - * / % | & < 等 )

    [root@localhost shell]# expr 1 + 2

    注意:有歧义的符号(如 *)要在前面加转义字符()

    2.使用方括号:

    [root@localhost shell]# c=$[1+2]

    3.浮点解决方案

    用内建的bash计算器:bc ,必须输入qiut来退出
    [root@localhost ~]# bc bc 1.06.95 Copyright 1991-1994, 1997, 1998,
    2000, 2004, 2006 Free Software Foundation,

    Inc. This is free software with ABSOLUTELY NO WARRANTY. For details
    type `warranty’. 8*9.999
    79.992在shell脚本中设置scale值来控制小数位数。
    4.查看退出状态码

    [root@localhost shell]# echo $?

    0 为成功结束,正数是命令结束有错误 (状态码范围0 ~ 255)

第十二章 使用结构化命令

  • 1.if-then语句:

if 条件
then
执行语句
else
执行语句
fi

if 条件;then
执行语句
else
执行语句
fi

嵌套if:

if 条件
then

执行语句
elsif
执行语句
then
执行语句
fi

  • 2.条件格式:

a.[ 条件 ] (注意两边都有空格)
b.test 条件

可用布尔逻辑来组合(&& || and or)

条件分类:

1.数字条件

   -eq     两个数是否相等
   -ne     两个数是否不相等
   -le     第一个数是否小于或等于第二个数
   -ge     第一个数是否大于或等于第二个数
   -gt     第一个数是否大于第二个数
   -lt     第一个数是否小于第二个数
[root@localhost shell]# test $a -ge $b[root@localhost shell]# echo $?[root@localhost shell]# [ $a  -lt $b ][root@localhost shell]# echo $?记住:bash shell只能处理整数。

2.字符条件

   >:第一个字符串是否大于第二个字符串= :测试两个字符串是否相等
   != :测试两个字符串是否不相等
   -z :测试字符串是空字符串
   -n :测试字符串是非空字符串
  [root@localhost shell]# test  "abc" = "abc" [root@localhost shell]# echo $?[root@localhost shell]# test  -n  "$a"  [root@localhost shell]# echo $?

3.文件系统判断条件

 -e 测试文件或目录是否存在
   -d 测试文件是否是目录文件
   -s 测试文件是否非空
   -f 测试文件是否存在
   -w 测试文件是否可写
   -L 测试文件是否是符号连接
   -x 测试文件是否可执行
   -r 测试文件是否可读
file1 -nt file2 测试file1是否比file2新
file1 -ot file2 测试file1是否比file2旧[root@localhost shell]# test  -f  test.sh[root@localhost shell]# echo $?  //0:验证正确  1:以上验证错误[root@localhost shell]# test  -d  abcd[root@localhost shell]# echo $?[root@localhost shell]# [ -d  test.sh ][root@localhost shell]# echo $?
  • 3.if-then 的高级特性

1.使用双括号:可在比较过程中使用高级数学表达式,而test只能在比较中使用简单的

算术操作。

((expression))

++ 、 – 、!、~ 、**(幂运算) 、<< 、>>、& 、|、&&、||

4.case 命令

case 变量名 in
值1 ) 执行语句;;
值2 ) 执行语句;;
值3 ) 执行语句;;
esac

例:输入 两个操作数,输入一个运算符号(+ - * /) 计算出结果

\#!/bin/bash
read  d1 op d2
case  $op  in"+" )  echo  $[$d1+$d2];;"-" )  echo  $[$d1-$d2];;"*" )  echo  $[$d1*$d2];; "/" )  echo  $[$d1/$d2];;*   )  echo  "input error" //其它输入符号esac

第十三章 更多的结构化命令

1.for命令

  1. for 变量 in 值集合
    do
    命令
    done
    值集合中根据空格区分单个值
    使用“ 把指令输出的结果变成for循环集合。

例:

filename=`ls -l /etc |  grep  '^-' | awk '{print $9}'`
for f in $filename
doecho $f
done

2.for((a;b;c))
do
命令
done
a:初始化循环体变量
b:判断条件
c:改变循环体变量值

3.改变字段分隔符

系统默认字段分隔符:空格、制表符、换行符。

用IFS=$’\n’ 忽略空格和制表符

技巧:

IFS.OLD=$IFS
IFS=$’\n’
<在代码中使用新的IFS值>
IFS=IFS.OLD

这样保证了脚本后续操作中使用的是默认的IFS值。

4.while 命令

while [ 条件 ]
do
命令
done

5.until 命令

until 当条件成立 退出循环

until [ 条件 ]
do
命令
done

6.break 和continue 控制循环

break:结束本层循环。

continue:结束本次循环(continue 后面的语句不执行,直接执行下一次
循环),继续下一次循环。

第十四章 处理用户输入

1.读取参数

例:

[root@localhost shell]# ./test 10 30

0代表程序名, 0 代 表 程 序 名 , 0 代表程序名,1 是第一个参数,依次类推下去,第十个为${10}。

2.读取文件名

用basename命令可以返回不包含路径的脚本名。

例:

3.特殊参数变量

$# 命令行参数个数。

∗和 ∗ 和 *和@:表示所有脚本参数的内容。
区别: ∗会将所有参数当做一个单词保存,而 ∗ 会 将 所 有 参 数 当 做 一 个 单 词 保 存 , 而 * 会将所有参数当做一个单词保存,而@把所有参数当做同一个字符串中的多个

独立的单词。
$$:获取当前的进程的ID值。

4.移动变量

shift :可跳过不需要的参数

shift 2:跳过两个参数。

5.分离参数选项

双破折号(–)表明选项列表结束,剩下的命令行参数当做参数。

例:

《Linux命令行与shell脚本编程大全》笔记一相关推荐

  1. 冒号课堂 编程范式与OOP思想

    上篇:编程范式与编程语言 第1课 开班导言 第2课 重要范式 第3课 常用范式 第4课 重温范式 第5课 语言小谈 第6课 语言简评 下篇:抽象机制与对象范式 第7课 抽象封装 第8课 抽象接口 第9 ...

  2. 编程范式(斯坦福大学)学习笔记《四》

    斯坦福大学开放课程--编程范式(四) 综述 本节课的主要内容是关于泛型数据的拷贝,虽然是使用C语言实现,并且没有用到C++中的模板这种泛型编程技术,但是效果却非常好.本节内容紧接上节所将的字节位拷贝的 ...

  3. 编程范式(斯坦福大学)学习笔记《二》

    斯坦福大学开放课程:编程范式学习笔记<二> 本课讲述了C/C++关于int,float等数据的底层表示,以及赋值操作所进行的处理.本节内容比较简单,应该属于组成原理的基础知识,各种码的表示 ...

  4. 冒号课堂:知识之上是思想,思想之上是精神

    http://www.cnblogs.com/xyz98/archive/2009/03/11/1408998.html 1.1开班发言--程序员的四层境界 授人以鱼不如授人以渔            ...

  5. Java面向对象编程的程序设计(OOP)思想

    文章目录 面向对象(oop) 封装 继承 多态 抽象类(abstract) 类型转化(instanceof) static关键字 面向对象(oop) 面向对象程序设计(Object Oriented ...

  6. 编程范式(斯坦福大学)学习笔记《十一》

    上次的课中都是使用C代码生成汇编代码,这次课中将使用C++代码生成汇编代码,对比结果发现这两种语言最终生成的代码形式很像. C语言版本: void foo() {int x;int y;x=11;y= ...

  7. 编程范式(斯坦福大学)学习笔记《十二》

    本节课讲解的主要是预处理器,编译和连接的异同. #define有两个功能:一个是定义常量,一个是作为宏. //定义常量 #define w 40 #define h 80 #define pere 2 ...

  8. 《冒号课堂》连载之十七——逻辑范式

    <冒号课堂>连载之十七--逻辑范式 4.2  逻辑范式--当算法失去了控制 道常无为而无不为. --<老子·道经> 关键词:编程范式:逻辑式编程:Prolog:算法:逻辑:控制 ...

  9. 《冒号课堂》连载之七——声明范式:目标决定行动

    <冒号课堂>连载之七--声明范式:目标决定行动 2.2  声明范式--目标决定行动 给我一个支点,我能挪动地球. --阿基米德 关键词:编程范式:命令式编程:声明式编程:函数式编程:逻辑式 ...

  10. 《冒号课堂》精彩书评集萃

    冒号课堂--将我带入编程的第三层境界 看山是山,看水是水. 看山不是山,看水不是水. 看山还是山,看水还是水,但是山更绿,水更清. 人生有三层境界,编程境界也和人生境界惊人的相似. 从大学期间接触编程 ...

最新文章

  1. NAR:UNITE真菌鉴定ITS数据库——处理未分类和并行分类(数据库文章阅读笔记Markdown模板)...
  2. Linux监控工具介绍系列——free`
  3. 有趣的库:pipe(类似linux | 管道)库
  4. mysql文件说明_MySQL进阶之配置文件说明
  5. underscore.js源码研究(5)
  6. hint oracle qbname_从才oracle中找到所有列名为BANK_ACC,且BANK_ACC=000的项,并将BANK_ACC=000000的项修改为BANK_ACC=111...
  7. oracle 转储 mysql_Oracle中DUMP的转储方法
  8. 坚果pro2 android 8,手机 篇一:坚果Pro2特别版使用感受
  9. android 截图 tftp,TFTP全自动智能路由刷固件软件
  10. 高级Bash脚本编程指南 在线收藏版
  11. 进程同步问题(二)——信号量机制
  12. Graphviz 画图教程
  13. 前端分页功能(通用)
  14. java-用for循环打印大写字母(部分简单大写字母)
  15. hdu 3966 树链剖分
  16. linux怎么查服务器的ip地址查询,Linux操作系统查看当前服务器网卡的IP地址
  17. fnd_profile.value的用法
  18. Elastic:使用 Elastic Stack 来监督系统日志及指标
  19. GB/T 28181-2011、2016、2022变更对比
  20. IMX.6ULL_Linux_基础篇(6) soc资源介绍

热门文章

  1. ⑨tiny4412 Linux驱动开发之1-wire子系统(DS18B20)驱动程序
  2. 电信网通的IP地址分布
  3. 细细品味Flex——BlazeDS开发指南
  4. 浅析运动健身APP开发的四种模式
  5. 海南:2021年4月前将基本实现全岛5G场景全覆盖
  6. 大牛证券公司点评主板指数目前属于蓝筹
  7. 吉林大学计算机学院课程学分,吉林大学软件学院学分规定
  8. 电影魔术|改变世界?乔布斯可不仅仅用苹果
  9. 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之36---支持BREW的手机
  10. 智能家居控制模拟套件