
正文
实践命令linux 实训linux常用命令
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
Linux Shell 脚本编程最佳实践
IT路边社
前言
与其它的编码规范一样,这里所讨论的不仅仅是编码格式美不美观的问题, 同时也讨论一些约定及编码标准。这份文档主要侧重于我们所普遍遵循的规则,对于那些不是明确强制要求的,我们尽量避免提供意见。
编码规范对于程序员而言尤为重要,有以下几个原因:
本文档中的准则致力于最大限度达到以下原则:
尽管本文档涵盖了许多基础知识,但应注意的是,没有编码规范可以为我们回答所有问题,开发人员始终需要再编写完代码后,对上述原则做出正确的判断。
注 :未明确指明的则默认为必须(Mandatory)
主要参考如下文档:
仅建议Shell用作相对简单的实用工具或者包装脚本。因此单个shell脚本内容不宜太过复杂。
在选择何时使用shell脚本时时应遵循以下原则:
可执行文件不建议有扩展名,库文件必须使用 .sh 作为扩展名,且应是不可执行的。
执行一个程序时,无需知道其编写语言,且shell脚本并不要求具有扩展名,所以更倾向可执行文件没有扩展名。
而库文件知道其编写语言十分重要,使用 .sh 作为特定语言后缀的扩展名,可以和其他语言编写的库文件加以区分。
文件名要求全部小写, 可以包含下划线 _ 或连字符 - , 建议可执行文件使用连字符,库文件使用下划线。
正例:
反例:
源文件编码格式为UTF-8。避免不同操作系统对文件换行处理的方式不同,一律使用 LF 。
每行最多不超过120个字符。每行代码最大长度限制的根本原因是过长的行会导致阅读障碍,使得缩进失效。
除了以下两种情况例外:
如出现长度必须超过120个字符的字符串,应尽量使用here document或者嵌入的换行符等合适的方法使其变短。
示例:
除了在行结束使用换行符,空格是源文件中唯一允许出现的空白字符。
对从来没有用到的或者被注释的方法、变量等要坚决从代码中清理出去,避免过多垃圾造成干扰。
Bash 是唯一被允许使用的可执行脚本shell。
可执行文件必须以 #!/bin/bash 开始。请使用 set 来设置shell的选项,使得用 bash echo "Process $: Done making $$$."
# 示例7:命令参数及路径不需要引号 grep -li Hugo /dev/ "$1"
# 示例8:常规变量用双引号,ccs可能为空的特殊情况可不用引号 git send-email --to "${reviewers}" ${ccs:+"--cc" "${ccs}"}
# 示例9:正则用单引号,$1可能为空的特殊情况可不用引号 grep -cP '([Ss]pecial||?characters*) ${1:+"$1"}
# 示例10:位置参数传递推荐带引号的"$@",所有参数作为单字符串传递用带引号的"$*" # content of t.sh func_t { echo num: $# echo args: 1:$1 2:$2 3:$3 }
func_t "$@" func_t "$*" # 当执行 ./t.sh a b c 时输出如下: num: 3 args: 1:a 2:b 3:c num: 1 args: 1:a b c 2: 3:
使用 $(command) 而不是反引号。
因反引号如果要嵌套则要求用反斜杠转义内部的反引号。而 $(command) 形式的嵌套无需转义,且可读性更高。
正例:
反例:
条件测试
使用 [[ ... ]] ,而不是 [ , test , 和 /usr/bin/[ 。
因为在 [[ 和 ]] 之间不会出现路径扩展或单词切分,所以使用 [[ ... ]] 能够减少犯错。且 [[ ... ]] 支持正则表达式匹配,而 [ ... ] 不支持。参考以下示例:
尽可能使用变量引用,而非字符串过滤。
Bash可以很好的处理空字符串测试,请使用空/非空字符串测试方法,而不是过滤字符,让代码具有更高的可读性。正例:
反例:
正例:
反例:
正例:
反例:
文件名扩展
当进行文件名的通配符扩展时,请指定明确的路径。
当目录中有特殊文件名如以 - 开头的文件时,使用带路径的扩展通配符 ./* 比不带路径的 * 要安全很多。
应该避免使用eval。
Eval在用于分配变量时会修改输入内容,但设置变量的同时并不能检查这些变量是什么。反例:
请使用进程替换或者for循环,而不是通过管道连接while循环。
这是因为在管道之后的while循环中,命令是在一个子shell中运行的,因此对变量的修改是不能传递给父shell的。
这种管道连接while循环中的隐式子shell使得bug定位非常困难。反例:
如果你确定输入中不包含空格或者其他特殊符号(通常不是来自用户输入),则可以用for循环代替。例如:
使用进程替换可实现重定向输出,但是请将命令放入显式子 shell,而非 while 循环创建的隐式子 shell。例如:
总是检查返回值,且提供有用的返回值。
对于非管道命令,使用 $? 或直接通过 if 语句来检查以保持其简洁。
例如:
当内建命令可以完成相同的任务时,在shell内建命令和调用外部命令之间,应尽量选择内建命令。
因内建命令相比外部命令而言会产生更少的依赖,且多数情况调用内建命令比调用外部命令可以获得更好的性能(通常外部命令会产生额外的进程开销)。
正例:
反例:
加载外部库文件不建议用使用.,建议使用source,已提升可阅读性。正例:
反例:
除非必要情况,尽量使用单个命令及其参数组合来完成一项任务,而非多个命令加上管道的不必要组合。常见的不建议的用法例如:cat和grep连用过滤字符串; cat和wc连用统计行数; grep和wc连用统计行数等。
正例:
除特殊情况外,几乎所有函数都不应该使用exit直接退出脚本,而应该使用return进行返回,以便后续逻辑中可以对错误进行处理。正例:
反例:
推荐以下工具帮助我们进行代码的规范:
原文链接:
获取更多的面试题、脚本等运维资料点击: 运维知识社区 获取
脚本之---短信轰炸机
脚本之---QQ微信轰炸机
ansible---一键搭建redis5.0.5集群
elk7.9真集群docker部署文档
全球最全loki部署及配置文档
最强安全加固脚本2.0
一键设置iptbales脚本
相关问答
Q1: Docker之Linux Cgroup实践
Docker通过cgroup技术实现对容器资源实践命令linux的限制,在我们自己实践命令linux的应用中通过对某些不重要的应用做cpu、内存资源上限的限制来确保任何时候重要的应用有足够的资源使用。下面是对docker容器做cpu与内存资源限制的实践记录,环境为centos7.2+docker1.12.6。
Linux Cgroup最主要的作用是为一个进程组设置资源使用的上限,这些资源包括CPU、内存、磁盘、网络等。在linux中,Cgroup给用户提供的操作接口是文件系统,其以文件和目录的方式组织在/sys/fs/cgroup路径下。更多的cgroup介绍可以阅读 、 、
等文章。
通过一个简单的例子,对一个进程的cpu使用率做限制,操作如下实践命令linux:
这里同样以cpu设置为例,探索docker容器是如何通过cgroup做限制的
由此可知在创建一个容器时实践命令linux:
这里仅对最为常用的两个参数--cpu-period、--cpu-quota做设置,使用stress服务做验证
这里针对--memory,--memory-swap,--memory-swappiness三个参数做实践
实践一(不设置--memory与--memory-swap)
经过一段时间,容器并没有发生oom,stats命令中的MEM %参数的值一直是100.00%
可知容器只有在设置实践命令linux了memory限制之后,--oom-kill-disable才会起作用
实践二(设置--memory,不设置--memory-swap):
根据docker文档说明,这时容器可以使用到的最大的内存为2倍的memory的内存(memory=memory-swap, 2倍=memory+memory-swap)
此时,经过一段时间的检测,并没有发生oom,docker stats stress:
实践三(设置--memory与--memory-swap)
由docker文档知,memory-swap等于memory+swap的和,因此要求memory-swap = memory(Minimum memoryswap limit should be larger than memory limit)
MEM %的值也一直是在100.00%以内浮动,另外也可知LIMIT仅是memory的值
当前实践的机器的swap为5G,因此这里设置用完5Gswap
设置使用系统的swap超出5G
通过设置memory-swappiness参数使得容器禁用系统交换空间
上述是对容器较为常用的cpu与内存的限制做了一些实践记录,了解了docker是如何通过linux cgroup对容器的资源做的限制。当然除了cpu、内存之外的其他资源的限制我们同样可以通过实践的方式一点一点去探索,求证。
Q2: 《Linux系统命令及Shell脚本实践指南》pdf下载在线阅读全文,求百度网盘云资源
《Linux系统命令及Shell脚本实践指南》百度网盘pdf最新全集下载:
链接实践命令linux:
?pwd=fdhg 提取码:fdhg
简介:《linux系统命令及shell脚本实践指南》由浅入深、全面、系统地介绍了linux系统实践命令linux的基础命令和shell脚本的开发。作为一本面向linux入门用户的书籍实践命令linux,本书力求语言通俗易懂实践命令linux,
用例简单明了,便于读者阅读领会。同时,全书穿插了不少要求读者动手实践的内容,不但可加深读者对内容的理解和消化,同时也可通过动手实践激发读者对linux系统和shell编程的兴趣,从而更好地驱动读者学习。
全书共计18章,从知识结构上分为三部分。第一部分为前8章,全面介绍了linux的基础知识和常用命令;第二部分为第9章和第10章,主要是linux下交互和非交互编辑器的使用;
第三部分为第11~18章,主要是shell脚本开发。这三部分内容各有偏重,读者可以根据实际需要选择阅读。
《linux系统命令及shell脚本实践指南》根据作者多年来linux环境运维管理工作的经验编著而成,内容丰富,且注重实践讲解,非常适合linux初学者和基于linux平台的软件开发者学习或查阅。
从内容结构上来看,本书摒弃了各章独立的写作风格,而是采取了各章有机结合的方式,自上而下自成一体,既加深了读者对单个知识点的理解,也有利于从全局把控linux系统和shell编程的精髓。
Q3: 嵌入式linux要学哪些
您好实践命令linux,关于该问题,解答如下:
嵌入式linux要学什么:
1.Linux 基础
安装Linux操作系统 Linux文件系统 Linux常用命令 Linux启动过程详解 熟悉Linux服务能够独立安装Linux操作系统 能够熟练使用Linux系统的基本命令 认识Linux系统的常用服务安装Linux操作系统 Linux基本命令实践 设置Linux环境变量 定制Linux的服务 Shell 编程基础使用vi编辑文件 使用Emacs编辑文件 使用其实践命令linux他编辑器
2.Linux 下的 C 编程基础
linux C语言环境概述 Gcc使用方法 Gdb调试技术 Autoconf Automake Makefile 代码优化 熟悉Linux系统下的开发环境 熟悉Gcc编译器 熟悉Makefile规则编写Hello,World程序 使用 make命令编译程序 编写带有一个循环的程序 调试一个有问题的程序
3.Shell 编程基础
Shell 简介 认识后台程序Bash编程熟悉Linux系统下的编辑环境 熟悉Linux下的各种Shell 熟练进行shell编程熟悉vi基本操作 熟悉Emacs的基本操作 比较不同shell的区别 编写一个测试服务器是否连通的shell脚本程序 编写一个查看进程是否存在的shell脚本程序 编写一个带有循环语句的shell脚本程序
4.嵌入式系统开发基础
嵌入式系统概述 交叉编译 配置TFTP服务 配置NFS服务 下载Bootloader和内核 嵌入式Linux应用软件开发流程熟悉嵌入式系统概念以及开发流程 建立嵌入式系统开发环境制作cross_gcc工具链 编译并下载U-boot 编译并下载Linux内核 编译并下载Linux应用程序
5.嵌入式系统移植
Linux内核代码 平台相关代码分析 ARM平台介绍 平台移植的关键技术 移植Linux内核到 ARM平台 了解移植的概念 能够移植Linux内核移植Linux2.6内核到 ARM9开发板
6.嵌入式Linux下串口通信
串行I/O的基本概念 嵌入式Linux应用软件开发流程 Linux系统的文件和设备 与文件相关的系统调用 配置超级终端和MiniCOM 能够熟悉进行串口通信 熟悉文件I/O 编写串口通信程序 编写多串口通信程序
7.嵌入式系统中多进程程序设计
Linux系统进程概述 嵌入式系统的进程特点 进程操作 守护进程 相关的系统调用了解Linux系统中进程的概念 能够编写多进程程序编写多进程程序 编写一个守护进程程序 sleep系统调用任务管理、同步与通信 Linux任务概述任务调度 管道 信号 共享内存 任务管理 API 了解Linux系统任务管理机制 熟悉进程间通信的几种方式 熟悉嵌入式Linux中的任务间同步与通信编写一个简单的管道程序实现文件传输 编写一个使用共享内存的程序
8.嵌入式系统中多线程程序设计
线程的基础知识 多线程编程方法 线程应用中的同步问题了解线程的概念 能够编写简单的多线程程序编写一个多线程程序
9.嵌入式 Linux 网络编程
网络基础知识 嵌入式Linux中TCP/IP网络结构 socket 编程 常用 API函数 分析Ping命令的实现 基本UDP套接口编程 许可证管理 PPP协议 GPRS 了解嵌入式Linux网络体系结构 能够进行嵌入式Linux环境下的socket 编程 熟悉UDP协议、PPP协议 熟悉GPRS 使用socket 编写代理服务器 使用socket 编写路由器 编写许可证服务器 指出TCP和UDP的优缺点 编写一个web服务器 编写一个运行在 ARM平台的网络播放器
10.Linux 字符设备驱动程序
设备驱动程序基础知识 Linux系统的模块 字符设备驱动分析 fs_operation结构 加载驱动程序了解设备驱动程序的概念 了解Linux字符设备驱动程序结构 能够编写字符设备驱动程序编写Skull驱动 编写键盘驱动 编写I/O驱动 分析一个看门狗驱动程序 对比Linux2.6内核与2.4内核中字符设备驱动的不同Linux 块设备驱动程序块设备驱动程序工作原理 典型的块设备驱动程序分析 块设备的读写请求队列了解Linux块设备驱动程序结构 能够编写简单的块设备驱动程序比较字符设备与块设备的异同 编写MMC卡驱动程序 分析一个文件系统 对比Linux2.6内核与2.4内核中块设备驱动的不同
11.GUI 程序开发
GUI基础 嵌入式系统GUI类型 编译QT 进行QT开发熟悉嵌入式系统常用的GUI 能够进行QT编程使用QT编写“Hello,World”程序 调试一个加入信号/槽的实例 通过重载QWidget 类方法处理事件
12.文件系统
虚拟文件系统文件系统的建立 ramfs内存文件系统 proc文件系统 devfs 文件系统 MTD技术简介 MTD块设备初始化 MTD块设备的读写操作了解Linux系统的文件系统了解嵌入式Linux的文件系统了解MTD技术 能够编写简单的文件系统为 ARM9开发板添加 MTD支持移植JFFS2文件系统 通过proc文件系统修改操作系统参数 分析romfs 文件系统源代码 创建一个cramfs 文件系统
——如有帮助,请采纳一下。
Q4: 怎么才能学好linux?
学习Linux步骤实践命令linux:
1、先了解了解基础吧实践命令linux,找一本薄一点的实践命令linux,浅一点的书,了解一下什么是linux。有个基本了解即可。不建议马上看《鸟哥的Linux私房菜》,这本书很不错,如果你了解linux基础之后再看,对你可以说是不受益匪浅都不行。没基础看《鸟哥的Linux私房菜》比较痛苦,内容很多。
2、了解之后,在自己电脑上弄个虚拟机,装上linux系统(redhat或ubuntu都行)。专攻《鸟哥的Linux私房菜》。当你把这本书攻下来时,才知道原来命令行并不可怕,自己打着打着就很长啦。
学linux最主要靠实践,不实践,只看书对你没好处的哦。自己在虚拟机上慢慢玩吧,玩多了就知道咋回事啦。不懂的多找资料弄懂,弄懂之后再实践,这才会有收获。
Q5: 2019-03-26 第十四章 linux 用户管理知识与应用实践
Day19
归档:课堂笔记
时间:2019/3/26
老男孩教育教学核心思想6重:重目标、重思路、重方法、重实践、重习惯、重总结
学无止境,老男孩教育成就你人生的起点!
第十四章 linux 用户管理知识与应用实践
命令:
groupadd -g 指定组ID
groupdel 删除组
chage 查看和修改密码属性
-l 列表显示账户信息
[root@CentOS-F~]# chage -l oldboy01
Last password change : Mar 25, 2019
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
命令:
w 谁登陆了,在干什么
last 显示登陆过的用户信息列表
lastlog 查看最近登录过的用户报告
su 用户身份切换
-c 以指定用户身份执行命令
工作中怎么使用****su
1、外企先登录普通用户,没事不允许登录root,只有执行的任务需要root权限的时候才允许登录root。
系统维护通道。
用su 管理,必须知道root密码,安全隐患。
10个运维,都得知道root密码,安全隐患。
需求:
1、不用知道root密码还能管理服务器。
2、最小化管理服务器,想关机,就只给你halt权限。
sudo****命令:可以以最小化的权限(单个命令),执行命令时拥有****root****用户的权限
suid针对的时命令,任何用户执行命令都有root身份。任何用户执行某个命令:模糊
sudo针对用户,给某个用户以root身份执行某个命令。指定用户用户执行某个命令:具体
(相对比较安全)
如何编辑配置sudo?
Sudo是一个提权的命令(对应权限通过/etc/sudoers文件实现的)
配置/etc/sudoers可以使用visudo命令,或vim /etc/sudoers(不推荐)
[oldboy@CentOS-F~]$ ls /root
ls: cannot open directory /root: Permission denied
完成上面的动作:
给oldboy用户,针对ls设置权限
[root@CentOS-F~]# visudo visudo进入编辑状态,100G
root ALL=(ALL) ALL
oldboy ALL=(ALL) /usr/bin/ls #===增加一行
用户 主机=(角色) 命令
注意:
1、命令的路径要用全路径
2、尽量不要vim /etc/sudo,容易报错(语法错误),如果非要用,编辑完visudo -c检查语法
为了安全,禁止root****远程链接linux****。
[root@CentOS-F~]# su – oldboy
[oldboy@CentOS-F~]$ sudo ls /root
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
[sudo] password for oldboy:
以上是需要oldboy用户密码,回root用户下,passwd oldboy设置密码。
[oldboy@CentOS-F~]$ ls /root
ls: cannot open directory /root: Permission denied(没有权限)
[oldboy@CentOS-F~]$ sudo ls /root 前缀加sudo
anaconda-ks.cfg pass user.log
sudo 运行原理图
关于实践命令linux和实训linux常用命令的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。





