《linux命令行与shell脚本编程》 内容整理读后感

常用linux

ps-ef|grep        根据程序名称查询pid
netstat anp |grep    根据端口查询pid
pwdx pid         根据pid查找程序路径及名称
chmod +x xxx.sh     给Sh脚本可执行权限
chown -R user:usergroup filename 给文件更换用户及用户组
scp filepath user@ip:filepath  复制文件到目标地
adduser xxx
passwd user
rpm -qa | grep java 查看所有的套件
curl -r ip 返回请求头体的请求
mv -t移动多个文件
cp -rf复制多个文件
scp+ip夸机器复制文件
unzip    解压命令
zip -r 目标文件 当前文件
netstat -anp |grep port ->> ps -ef |grep pid 根据端口查项目路径
curl -X POST -d '{}' -H "Content-Type:application/json" http://hsdata-alpha.huawei.com/metadata/restful/analysis/exeAssetAnalysisTask
/etc/profile:配置java环境变量
/etc/passwd:配置用户名和密码

linux 路径及命令
/etc/rcX.d
/etc/passwd  /etc/shadow具体pwd linux系统核心是用户,所以这两个文件比较重要
/etc/profile  主要的初始化文件,如umask设定的文件创建时的权限026
/etc/export nfs工具的配置文件
/bin/xterm  /bin/xterm安装各种软件
ll -R |grep localhost -R 递归显示当前目录的所有文件
cp -i  source destination
cp -r  source destination -r递归
cp -i source destination/ -i和/非常重要
.代表当前目录,将一个文件复制到当前目录名称很长时可用其代替
mkdir -p /doc1/doc2 -p递归,比较特殊
tree doc1
rm -rf 之前最好tree一下,因为一旦删除就什么都没有了
tail -200f 实时监控
ps -ef 显示所有进程
kill+pid  killall+name或者pid
top
(pwd ; ls ; cd /etc ; pwd ; cd ; pwd ; ls ; echo $BASH_SUBSHELL)
jobs命令可以显示出当前运行在后台模式中的所有用户的进程
type/which+外置命令
history
env  printenv 后者功能更多 
printenv a = echo $a
用户权限是通过创建用户时分配的用户ID(User ID,通常缩写为UID)来跟踪的
chmod/chown/chgrp
yum list installed
yum list xterm yum擅长找出某个特定软件包的详细信
yum install xterm 从仓库中安装软件包、所有它需要的库以及依赖的其他

who 记录登录记录,IP

date当前时间

ll |more    grep 'aa' a.txt b.txt | more   

ehco $? 查看某个命令的退出码,0表示正常结束

if then else fi

if then elif then fi

if test condition || test condition then  = if [  ] && [  ] then 


1103
一 初识linux shell
1.linux内存
内存分为:物理内存和虚拟内存
交换空间:虚拟内存
2.管理程序
/etc/inittab或/etc/rcX.d初始化内容
Linux操作系统的init系统采用了运行级。运行级决定了init进程运行/etc/inittab文件或/etc/rcX.d目录中定义好的某些特定类型的进程。
Linux操作系统有5个启动运行级,5代表图形化界面
3.管理硬件设备
可插入内核的设备驱动模块,编译进内核的设备驱动代码
三类文件,字符,块,网络文件
4.文件系统
Linux内核支持通过不同类型的文件系统从硬盘中读写数据
如nfs samba这些挂载
Linux内核采用虚拟文件系统(Virtual File System,VFS)作为和每个文件系统交互的接口。
当每个文件系统都被挂载和使用时,VFS将信息都缓存在内存中。
5.GNU工具
a.核心GNU工具
用以处理文件的工具
用以操作文本的工具
用以管理进程的工具
b.shell
GNU/Linux shell是一种特殊的交互式工具
shell的核心是命令行提示符。
命令行提示符是shell负责交互的部分。它允许你输入文本命令,然后解释命令,并在内核中执
你也可以将多个shell命令放入文件中作为程序执行。这些文件被称作shell脚本
在Linux系统上,通常有好几种Linux shell可用。默认bash shell
6.桌面图形化
7.常见发行版 centOS ubuntu
二.走进shell
图形化界面
控制台终端:gnome konsole xterm(最老,适宜老内核)
第三章 基本的shell命令
1.bash手册
man命令
2.
根目录和家目录:/所有的顶端  、/home/user某用户的家目录,~是root用户的家目录即/root
binary --》bin
bin用户级GNU工具 sbin管理员级别的GNU工具
隐藏文件通常是以.开头的文件,用来配置信息
3.
符号链接:a>b
硬链接:大小相同
4.进程
探查 实时监控 结束
5.磁盘监控
Linux文件系统将所有的磁盘都并入一个虚拟目录下。在使用新的存储媒体之前,需要把它放到虚拟目录下。这项工作称为挂
mount unmount top 
6.数据处理
排序 搜索 压缩 归档
sort grep zip tar
五 理解shell
1.
文本命令行界面(command line interface,CLI)
shell不单单是一种CLI。它是一个时刻都在运行的复杂交互式程
2.shell类型
/bin/sync
/bin/bash
/sbin/nologin
3.shell的父子关系
用于登录某个虚拟控制器终端或在GUI中运行终端仿真器时所启动的默认的交互shell,是一个父shell
在CLI提示符后输入/bin/bash命令或其他等效的bash命令时,会创建一个新的shell程序
进程列表、协程和管道(第11章会讲到)都利用了子shell
4.后台模式
要想将命令置入后台模式,可以在命令末尾加上字符
使用tar(参见第4章)创建备份文件是有效利用后台进程列表的一个更实用的例
5.内建命令和外部命令

外部命令:文件系统命令,存在于bash shell程序之外的命令。
外部命令常存在于/bin /sbin /usr/bin usr/sbin中
当外部命令执行时,会创建出一个子进程。这种操作被称为衍生

就算衍生出子进程或是创建了子shell,你仍然可以通过发送信号与其沟通,这一点无论是
在命令行还是在脚本编写中都是极其有用的。发送信号(signaling)使得进程间可以通过
信号进行通信。

内建命令:不会创建子进程,它就在当前终端的进程中。
命令历史记录被保存在隐藏文件.bash_history中,它位于用户的主目录
六.linux环境变量
1.两种 全局和局部
2.
全局环境变量对于shell会话和所有生成的子shell都是可见的。局部变量则只对创建它们的shell可见
env可查看全局变量
3.局部变量
遗憾的是,在Linux系统并没有一个只显示局部环境变量的命令
set命令会显示为某个特定进程设置的所有环境变量,包括局部变量、全局变量以及用户定义变量
通过等号给环境变量赋值,只在当前bash shell中起效,子和父shell都不起效
4.删除环境变量
在unset命令中引用环境变量时,记住不要使用$
如果要用到变量,使用$,即用到其值;如果要操作变量,不使用$,即操作其值
5.设置PATH环境变量
当你在shell命令行界面中输入一个外部命令时,shell必须搜索系统来找到对应的程序。
PATH环境变量定义了用于进行命令和程序查找的目录
设置方法:echo  等号 export
6.环境变量的作用持久化
在你登入Linux系统启动一个bash shell时,默认情况下bash会在几个文件中查找命令。这些文件叫作启动文件或环境文
:/etc/profile主启动文件
以下四个作用:提供一个用户专属的启动文件来定义该用户所用到的环境变量
$HOME/.bash_profile
$HOME/.bashrc
$HOME/.bash_login
$HOME/.profile
7.交互式shell 进程
如果你的bash shell不是登录系统时启动的(比如是在命令行提示符下敲入bash时启动),那么你启动的shell叫作交互式shell
如果bash是作为交互式shell启动的,它就不会访问/etc/profile文件,只会检查用户HOME目录中的.bashrc文件
8.非交互式shell
最后一种shell是非交互式shell。系统执行shell脚本时用的就是这种shell
由父shell设置但并未导出的变量都是局部变量。子shell无法继承局部变量
9.环境变量持久化
在/etc/profile
/etc/profile.d目录中创建一个以.sh结尾的文件。把所有新的或修改过的全局环境变量设置放在这个文件中
存储个人用户永久性bash shell变量的地方是$HOME/.bashrc文件
七 linux文件权限
1.Linux安全系统的核心是用户账
用户权限是通过创建用户时分配的用户ID(User ID,通常缩写为UID)来跟踪的。
UID是数值,每个用户都有唯一的UID,但在登录系统时用的不是UID,而是登录名(挂载时注意两个服务器同一个用户的ID是否一致)
2.账户类型三种
Linux系统会为各种各样的功能创建不同的用户账户,而这些账户并不是真的用户。
这些账户叫作系统账户,是系统上运行的各种服务进程访问资源用的特殊账户。
所有运行在后台的服务都需要用一个系统用户账户登录到Linux系统上。
/etc/passwd  /etc/shadow
3.添加 删除 修改用户
4.使用linux组
组权限允许多个用户对系统中的对象(比如文件、目录或设备等)共享一组共用的权限
/etc/group 千万不能通过直接修改/etc/group文件来添加用户到一个组,要用usermod命令
注意:当一个用户在/etc/passwd文件中指定某个组作为默认组时,用户账户不会作为该组成员再出现在/etc/group文件
创建修改组
5.理解文件权限
第一位代表类型:六种
之后是unmask在默认配置文件中设置的026权限
6.改变文件权限
chmod命令用来改变文件和目录的安全性设置
chown命令用来改变文件的属主
chgrp命令用来改变文件的默认属组
7.管理文件系统
第九章 安装软件程序 rpm
1.yum列出已安装包及安装包
yum 可以直接从仓库安装该软件及依赖的软件 yum install xxx
也可以手动下载rpm安装文件并用yum安装,这叫作本地安装。基本的命令是:yum localinstall package_name.rpm
2.yum更新软件
yum list updates
yum update xxx 
yum update (all)
3.yum卸载软件
yum remove package_name
yum erase package_name
4.处理损坏的包依赖关系
损坏的包依赖关系:某个包的软件依赖关系可能会被另一个包的安装覆盖掉
yum clean all
yum update
yum deplist xxx
yum update --skip-broken
5.yum软件仓库
yum repolist
6.从源码安装
第十章 文本编辑器
1.vim
dd删除整行
第十一章 shell脚本编程基础
1.shell脚本

关键是输入多个命令并能处理多个命令的结果,甚至是将一个命令的结果传递给另一个命令。

你要跨过的第一个障碍是让bash shell能找到你的脚本文件。如第6章所述,shell会通过PATH环境变量来查找命。

使用相对路径让bash shell找到文件 ./

umask设置无执行权限,所以chmod 添加可执行权限

echo $ var显示消息

单引号双引号  、\反斜杠转义、

2.变量

数字字母下划线,变量等号值无空格,自动识别类型,脚本执行完变量删除,用户变量使用$引用 

引用一个变量值时需要使用美元符,而引用变量来对其进行赋值时则不要使用美元符

3.命令替换

将命令输出放到变量里 `` 或者$()

命令替换会创建一个子shell来运行对应的命令。子shell(subshell)是由运行该脚本的shell所创建出来的一个独立的子shell(child shell)。正因如此,由该子shell所执行命令是无法使用脚本中所创建的变量

在命令行提示符下使用路径./运行命令的话,也会创建出子shell;要是运行命令的时候不加入路径,就不会创建子shell。如果你使用的是内建的shell命令,并不会涉及子shell。

4. 重定向输出和输入

输出:将命令的内容输出到文件   >覆盖  >>追加

输入:将内容输入到命令  未

5.管道

讲一个命令输入出到另一个命令 管道连接

6.数学计算

expr  $[]  var1=$(echo "scale=4; 3.44 / 5" | bc)

7.退出脚本

shell中运行的每个命令都使用退出状态码(exit status)告诉shell它已经运行完毕。退出状态码是一个0~255的整数值,在命令结束运行时由命令传给shell。可以捕获这个值并在脚本中使用。

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

亦可exit + number指定退出码

第十二章 使用结构化命令

1.结构化命令

对命令顺序执行进行改变,控制一下命令的执行逻辑

2.条件语句

根据返回的状态码判定,0代表true,其他代表false,false会将错误信息打印出来,可设置消除

3.test []

bash shell中有个好用的工具test可以帮你通过if-then语句测试除状态码之外的其他条件 if test condition then 

bash shell提供了另一种条件测试方法,无需在if-then语句中声明test命令。if 之后添加[],第一个方括号之后和第二个方括号之前必须加上一个空格 if [  ] then 

test和[]中可进行空值判断,数字,字符串,文件比较等,bash shell只能处理整数字符串用比较符号,数字用函数,这和java中恰恰相反

str1 = str2 检查str1是否和str2相同
str1 != str2 检查str1是否和str2不同
str1 < str2 检查str1是否比str2小
str1 > str2 检查str1是否比str2大
-n str1 检查str1的长度是否非0
-z str1 检查str1的长度是否为0

n1 -eq n2 检查n1是否与n2相等
n1 -ge n2 检查n1是否大于或等于n2
n1 -gt n2 检查n1是否大于n2
n1 -le n2 检查n1是否小于或等于n2
n1 -lt n2 检查n1是否小于n2
n1 -ne n2 检查n1是否不等于n2

常用

-d file 检查file是否存在并是一个目录
-e file 检查file是否存在
-f file 检查file是否存在并是一个文件
-r file 检查file是否存在并可读
-s file 检查file是否存在并非空
-w file 检查file是否存在并可写
-x file 检查file是否存在并可执行
-O file 检查file是否存在并属当前用户所有
-G file 检查file是否存在并且默认组与当前用户相同
file1 -nt file2 检查file1是否比file2新
file1 -ot file2 检查file1是否比file2旧

4.高级test (()) [[]] 

双方括号和双大括号,针对处理数字和字符串,进行一些复杂的运算和处理。可用复杂的符号和表达式。简单的只能使用[] 和test格式

5.case

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值