提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
TODO:写完再整理
- 系列文章目录
- 前言
- 一、linux的认识
- 1.Linux的应用领域
- 2.Linux学习建议
- 3.Linux的系统文件架构介绍
- 二、用户开机、重启、登录、注销命令
- 1.关机&重启命令
- 2.用户登录和注销
- 三、Linux用户管理
- 1.添加用户
- 2.给用户指定或者修改密码
- 3.删除用户
- 4.查询用户信息
- 5.切换用户
- 6.用户组
- 注意
- 四、实用文件操作指令(常用)
- 1.帮助指令
- (1)man 获得帮助信息
- (2)help 指令
- 2.文件目录类指令(最常用)
- 1、pwd 指令
- 2、ls 指令
- 3、cd 指令
- 4、mkdir 指令
- 5、rmdir 指令
- 6、touch 指令
- 7、cp 指令
- 8、rm 指令
- 9、mv 指令
- 10、cat 指令
- 11、more 指令
- 12、less 指令
- 13、> 指令 和 >> 指令
- 14、echo 指令
- 15、head 指令
- 16、tail 指令
- 17、ln 指令
- 18、history 指令(crtl+r)
- 19、date 指令
- 20、cal 指令
- 21、find 指令
- 22、locate 指令
- 23、grep 指令和 管道符号 |
- 24、gzip/gunzip 指令
- 25、zip/unzip 指令
- 26、tar 指令
- 27、kill 命令
- 3.Linux命令查询
- 五、vi、vim编辑器的使用(常用)
- 1.介绍
- 2.正常模式
- 3.插入模式/编辑模式
- 4.命令行模式
- 5.快捷键的使用
- (1)复制粘贴,在正常模式下
- (2)删除,正常模式下
- (3)撤销,正常模式
- (5)快捷键到底文档的最末行、最首行,正常模式
- (6)查找, 在命令行模式
- (7)设置文件的行号,取消文件的行号,命令行模式
- (8)编辑文件,将光标移动到第 n 行,命令模式
- 6.vim 插件攻略
- Vundle:
- YouCompleteMe:
- 六、shell脚本编程(.sh)
- 1.Shell的介绍
- 2.硬件、内核、shell、应用程序的关系
- 3.编写shell脚本
- (1)工具
- (2)脚本格式要求
- (3)语法
- (1)把一堆命令行和逻辑一起写进去一个.sh文件里面,一键启动,相当于ROS中的lanch文件
- (2)shell变量
- (1)Shell的用户和系统变量
- (2)位置参数变量
- (3)预定义变量
- (3)算术运算符
- (4)条件判断与判断流程
- (5)read读取控制台输入
- (6)系统函数与自定义函数
- (7)程序注释
- (4)示例
- 示例1:获取参数
- 示例2:遍历目录+常用指令操作
- 4.shell脚本的常用执行方式
- (1)方式1
- (2)方式2
- 七、PRM包、YUM包,apt软件管理
- 1.rpm包
- (1)介绍
- (2)rpm包的简单查询指令
- (3)rpm包名基本格式
- (4)卸载rpm包
- (5)安装rpm包
- 2.yum
- (1)介绍
- (2)yum的基本指令
- 3.apt软件管理
- (1)apt介绍
- (2)更新Ubuntu软件下载地址
- (3)Ubuntu软件操作的相关命令
- 八、远程登陆(常用)
- 1.基本概念
- 2.Xshell5 和 Xftp远程登陆到Ubuntu
- 3.ssh远程登录Ubuntu
- 九、linux自带编译器
- 1.g++ -> Makefile -> Cmak的关系
- 2.g++编译器
- (1)安装 g++
- (2)g++编译流程
- 3.Makefile
- Makefile 介绍
- Makefile 语法
- 4.CMake
- 安装 CMake
- CMake 编译流程
- 十、定时任务调度
- 十一、磁盘分区挂载(不常用)
- (1)分区基础知识
- (2)磁盘操作命令
- (3)增加一块硬盘步骤
- 十二、网络配置
- 1.查看网络IP和网关
- 2.linux网络环境配置
- 3.ping 测试主机之间网络连通性
- 十三、进程管理
- 1.基本介绍
- 2.显示系统执行的进程
- 3.终止进程kill和killall
前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!
继嵌入式的单片机的寄存器开发、库开发、FreeRTOS实时操作系统开发,本文讲讲也顺便记录一下更偏向于PC的linux(ubuntu)系统开发
本文先对**linux(ubuntu)实操相关知识记录(第一篇)**做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章
提示:以下是本篇文章正文内容
一、linux的认识Linux 是一款操作系统,免费,开源, 安全,高效,稳定
1.Linux的应用领域1、Linux 应用层开发(需求比较大,用C语言)
JavaEE、大数据、pythoh、c/c++、php
2、Linux 运维工程师
服务器(主要强项)
【防盗标记–盒子君hzj】
3、linux底层开发(做驱动开发)
.
.
1、先建立一个整体框架,然后细节
2、需要掌握所有的 Linux 指令,要学会查询手册和百度(学会主要的,背和用)
3、先 知道怎么做 ,再 知道为什么
4、适当的囫囵吞枣
5、Linux 不是编程,重点是实际操作,各种常用指令要玩的溜
.
.
linux 的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/”
在 Linux 世界里,一切皆文件,文件夹目录
/bin(重要)【是binary的缩写,用来存放最常用的命令】
/sbin【是super user binary的意思,用来存放管理员管理系统的常用指令和程序】
/home(重要)【用来存放配普通用户user的的主目录,一般每个用户都会有自己的目录而且以椅子的名字命名】
/root(重点)【该目录是系统管理员,也称超级管理员用户的主目录】
/boot(重要)【用于存放linux系统启动的核心文件,包括一些镜像和镜像文件】
/tmp(重要)【用于存放临时文件】【防盗标记–盒子君hzj】
/dev(重要)【把所有的硬件用文件的形式管理起来】
/mnt(重点)【让用户临时挂载的文件系统】
/media(重要)【识别linux系统的设备,如U盘、光驱】
/var(重要)【存放系统可扩充的东西,包括日志】
/opt(重要)【存放安装包的】
/usr/local(重要)【存放安装软件后的软件目录】
/proc(一般不要动)【存放虚拟目录,管理内存的】
/srv(一般不要动)【用于linux启动服务的】
/sys(一般不要动)【存放系统内核的】
注意:管理的时候规划好,不要乱放文件
二、用户开机、重启、登录、注销命令如果远程只能使用一个终端进行访问时才会用这种方法,【防盗标记–盒子君hzj】在真正运用中远程可以连接整个操作界面而不是仅仅一个终端,这时候用桌面操作更加便捷
1.关机&重启命令shutdown
shutdown -h now : 表示立即关机 shutdown -h 1 : 表示 1 分钟后关机 shutdown -r now: 立即重启
reboot
就是重启系统
注意:当我们关机或者重启时,【防盗标记–盒子君hzj】都应该先执行以下 sync 指令,把内存的数据写入磁盘,防止数据丢失
.
.
注销(远程登陆)用户:在提示符下输入 logout
注意:
1、登录时尽量少用 root 帐号登录,1)可以利用普通用户登录,登录后再用”su - 用户名’命令来切换成系统管理员身份.
2、ogout 注销指令在图形运行级别无效,在 运行级别 3 (远程连接)下有效
.
.
如果远程只能使用一个终端进行访问时才会用这种方法,【防盗标记–盒子君hzj】在真正运用中远程可以连接整个操作界面而不是仅仅一个终端,这时候用桌面操作更加便捷
1.添加用户1、基本语法:useradd [选项] 用户名【useradd hzj】 2、基本语法:useradd -d 指定目录 新的用户名【useradd -d/home/a hzj】2.给用户指定或者修改密码
基本语法:passwd 用户名3.删除用户
1、删除用户 xm,但是要保留家目录:基本语法:userdel 用户【userdel hzj】 2、删除用户 xh 以及用户主目录:基本语法:userdel -r 用户【userdel -r hzj】(建议)4.查询用户信息
基本语法:id 用户名 注意:当用户不存在时,返回”无此用户”5.切换用户
基本语法:su –切换用户名 按exit能回到原来的用户中 注意:在操作 Linux 中,如果当前用户的权限不够,可以通过 su - 指令,切换到高权限用户【防盗标记--盒子君hzj】6.用户组
介绍:类似于角色,系统可以对有共性的多个用户进行统一的管理 增加组:基本语法:groupadd 组 名【groupadd hzj】 删除组:基本语法:groupdel 组 名【groupdel hzj】 增加用户时直接加上组:基本语法:useradd-g 用户组 用户名【useradd-g abc hzj】 修改用户的组:基本语法:usermod-g 用户组 用户名【useradd-g abc hzj】 /etc/passwd 文件:用户(user)的配置文件,记录用户的各种信息,每行的含义:用户名:口令:用户标识号(id):组标识号(id):注释性描述:主目录:登录 Shell /etc/group 文件:每行含义:组(group)的配置文件,记录 Linux 包含的组的信息.组名:口令:组标识号:组内用户列表注意
1、Linux 系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。 2、Linux 的用户需要至少要属于一个组【防盗标记--盒子君hzj】
.
.
.
Shell 是一个应用程序,它负责接收用户输入的命令,然后根据命令做出相应的动作
1.帮助指令介绍:当我们对某个指令不熟悉时,我们可以使用 Linux 提供的帮助指令来了解这个指令的使用方法,直接百度指令用法更为简单有效
(1)man 获得帮助信息基本语法:man [命令或配置文件](功能描述:获得帮助信息)【man ls】(2)help 指令
基本语法help 命令 (功能描述:获得 shell 内置命令的帮助信息)【help ls】2.文件目录类指令(最常用)
以下这些指令既可以单独运行,也可以按照语法要求组合起来在运行
1、pwd 指令功能描述:显示当前工作目录的绝对路径 基本语法:pwd2、ls 指令
功能描述:查看当前目录信息 ,列出路径或当前目录下的所有文件信息【防盗标记--盒子君hzj】 基本语法:ls [ 选 项][目录或是文件] 常用选项 -a :显示当前目录所有的文件和目录,包括隐藏的。 -al:以列表的方式显示信息 示例 ls / 显示根目录下的所有文件及文件夹。 ls -l /data 显示/data 路径下的所有文件及文件夹的详细信息。 ls -l 显示当前路径下的所有文件及文件夹的详细信息 ls *l wc 显示当前目录下面的文件数量3、cd 指令
功能描述 切换到指定目录,用于切换当前用户所在的路径,其中路径可以是绝对路径也可以是相对路径 基本语法:cd[参数] 常用参数 绝对路径(从根目录开始定位) 相对路径:从当前工作目录定位到所需的目录 常用指令 cd ~ 或者 cd :回到自己的home目录 cd .. 回到当前目录的上一级目录 使用绝对路径切换到 root 目录:cd/root 使用相对路径到/root 目录:cd ../../root【防盗标记--盒子君hzj】 示例 cd /system/bin 表示切换到/system/bin 路径下。 cd logs 表示切换到 logs 路径下。 cd / 表示切换到根目录。 cd ../ 表示切换到上一层路径。4、mkdir 指令
功能描述:mkdir 是 make directory 的缩写,用于创建文件夹目录 基本语法:mkdir[选项]要创建的目录(文件夹) 常用选项:-p :创建多级目录 常用指令 创建一个目录 /home/dog【mkdir /home/dog】 创建多级目录 /home/animal/tiger【mkdir -p /home/animal/tiger 】(创建多级目录要加上-p) 示例 mkdir /data/path 在/data 路径下创建 path 文件夹。 mkdir -p a/b/c 参数 -p 用于创建多级文件夹,这句命令表示在当前路径下创建文件夹 a, 而 a 文件夹包含子文件夹 b,b 文件夹下又包含子文件夹 c5、rmdir 指令
功能描述:指令删除空目录 基本语法:rmdir[选项]要删除的空目录 常用指令 删除一个目录 /home/dog【rmdir /home/dog】 注意:rmdir 删除的是空目录,如果目录下有内容时无法删除的。如果需要删除非空目录,需要使用 rm -rf 删除的目录6、touch 指令
功能描述:指令创建空文件 基本语法:touch 文件名称【touch hello.txt】【防盗标记--盒子君hzj】7、cp 指令
基本语法:touch 文件名称【touch hello.txt】 基本语法:cp [选项] source dest 常用选项::递归复制整个文件夹 基本用法: 递归复制整个文件夹,举例将/home/test 整个目录拷贝到 /home/zwj 目录【cp -r test/zzwj/】 将 /home/aaa.txt 拷贝到 /home/bbb 目录下[拷贝单个文件]【cp aaa.txt bbb/】 示例 cp /data/logs /data/local/tmp/logs 复制/data 路径下的 logs 到/data/local/tmp 路径下 cp 1.sh /sdcard/ 复制当前路径下的 1.sh 到/sdcard 下8、rm 指令
功能描述:rm 是 remove 的缩写,用于删除文件或文件夹 基本语法:rm [选项]要删除的文件或目录 常用选项 -r :递归删除整个文件夹 -f : 强制删除不提示 基本用法 将 /home/aaa.txt 删除【rmaaa.txt】 递归删除整个文件夹 /home/bbb【rm -r bbb/】或者【rm -rf bbb/】【防盗标记--盒子君hzj】 示例 rm -rf path 删除 path。 rm test.txt 删除 test.txt9、mv 指令
功能描述:移动文件与目录或重命名 基本语法 mv oldNameFile newNameFile(功能描述:重命名) mv /temp/movefile /targetFolder (功能描述:移动文件) 基本用法 将 /home/aaa.txt 文件 重新命名为 pig.txt【mv aaa.txt pig.txt】 /home/pig.txt文件 移动到 /root 目录下【mv pig.txt /root/】10、cat 指令
功能描述:查看文件内容,是以只读的方式打开,读取文件内容及拼接文件 基本语法:cat [选项] 要查看的文件 常用选项 -n :显示行号 基本用法 打开/etc/profile文件内容,并显示行号【cat -n /etc/profile | more】 注意:cat 只能浏览文件,而不能修改文件,为了浏览方便,一般会带上 管道命令 | more 示例 cat /sys/devices/system/cpu/online 读取 /sys/devices/system/cpu/路径下online 文件内容11、more 指令
功能描述:是一个基于 VI 编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。more 指令中内置了若干快捷键,详见操作说明 基本语法;more 要查看的文件 基本用法:采用 more 查看文件/etc/profile【more /etc/profile】 快捷键 空白键:表示向下翻一页 Enter:表示向下翻一行 q:离开阅读该文件12、less 指令
功能描述:指令用来分屏查看文件内容,它的功能与 more 指令类似,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。 基本语法:less 要查看的文件 基本用法:采用 less 查看一个大文件文件 /opt/aaatxt【less aaa.txt】 快捷键 packdowm:向下翻一页 packup:向上翻一页 q:离开less程序13、> 指令 和 >> 指令
功能描述 > 输出重定向 : 会将原来的文件的内容覆盖【防盗标记--盒子君hzj】 >> 追加: 不会覆盖原来文件的内容,而是追加到文件的尾部 基本语法 ls -l >文件(功能描述:列表的内容写入文件 a.txt 中(覆盖写))【>ls -l .a.txt】 ls -al >>文件 (功能描述:列表的内容追加到文件 aa.txt 的末尾)【>> -l a.txt】 cat 文件 1 > 文件 2 (功能描述:将文件 1 的内容覆盖到文件 2)【cat /etc/profile>a.txt】14、echo 指令
功能描述:输出内容到控制台 基本语法:echo[选项][输出内容] 基本用法:使用 echo 指令输出环境变量,输出当前的环境路径【echo #PATH】15、head 指令
功能描述:用于显示文件的开头部分内容,默认情况下 head 指令显示文件的前 10 行内容 基本语法 head 文件(功能描述:查看文件头 10 行内容) head -n 5 文件(功能描述:查看文件头 5 行内容,5 可以是任意行数)【防盗标记--盒子君hzj】 基本用法 查看/etc/profile 的前面 5 行代码【head -n 5 /etc/profile】16、tail 指令
功能描述:用于输出文件中尾部的内容,默认情况下 tail 指令显示文件的后 10 行内容 基本语法 tail 文件 (功能描述:查看文件后 10 行内容)【tail /etc/profile】 tail -n 5 文件 (功能描述:查看文件后 5 行内容,5 可以是任意行数)【tail -n 5 /etc/profile】 tail -f 文件 (功能描述:实时追踪该文档的所有更新,工作经常使用)【tail -nf /etc/profile】17、ln 指令
功能描述:软链接指令,软连接也叫符号链接,类似于 windows 里的快捷方式,主要存放了链接其他文件的路径 基本语法:ln -s [原文件或目录] [软链接名] 基本用法 在/home 目录下创建一个软连接 linkToRoot,连接到 /root 目录【ln -s /root linkToroot】【防盗标记--盒子君hzj】 删除软连接 linkToRoot【rm -tf linkToroot】18、history 指令(crtl+r)
功能描述:查看已经执行过历史命令,也可以执行历史指令 基本语法:history 基本用法 显示所有的历史命令【history】 显示最近使用过的 10 个指令【history 10】19、date 指令
功能描述:设置日期、显示当前日期 基本语法 date(功能描述:显示当前时间) date +%Y(功能描述:显示当前年份) date +%m(功能描述:显示当前月份) date +%d(功能描述:显示当前是哪一天) date "+%Y-%m-%d %H:%M:%S"(功能描述:显示年月日时分秒) date -s 字符串时间20、cal 指令
功能描述:查看日历指令【防盗标记--盒子君hzj】 基本语法:cal [选项] 基本用法 显示当前日历【cal】 显示 2020 年日历【cal 2020】21、find 指令
功能描述:find 指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端。 基本语法:find[搜索范围][选项] 选项说明 name<查询方式>,以指定的文件名搜索文件 user<用户名>,以指定的用户名查找所有文件 size<文件大小>,以指定文件大小查找文件 基本用法 按文件名:根据名称查找/home 目录下的 hello.txt 文件 【find /home -name hello.txt】 按拥有者:查找/opt 目录下,用户名称为 nobody 的文件【find /opt-user nobody】 查找整个 linux 系统下大于 20m 的文件(+n 大于 -n 小于 n 等于)【find / size +20M】22、locate 指令
功能描述:locaate 指令可以快速定位文件路径【防盗标记--盒子君hzj】 基本语法:locate 搜索文件 注意: 由于 locate 指令基于数据库进行查询,所以第一次运行前,必须使用 updatedb 指令创建 locate 数据库。 基本用法 使用 locate 指令快速定位 hello.txt 文件所在目录【updatedb】【locate hello.txt】23、grep 指令和 管道符号 |
功能描述:在文件里面查找关键字,grep 过滤查找,管道符,“|”,表示将前一个命令的处理结果输出传递给后面的命令处理。 基本语法:grep [选项] 查找内容 源文件 常用选项 -n 显示匹配行和行号 - i忽略字母大小 基本用法 请在 hello.txt 文件中,查找"yes"所在行,并且显示行号【cat hello.txt | grep -n yes】(区分字母大小)、【cat hello.txt | grep -ni yes】(不区分字母大小)24、gzip/gunzip 指令
功能描述:压缩和解压类 基本语法 gzip 用于压缩文件(不能打包:压缩文件夹) gunzip 用于解压的 gzip 文件 (功能描述:压缩文件,只能将文件压缩为*.gz 文件) gunzip 文 件.gz(功能描述:解压缩文件命令) 基本用法 gzip 压缩, 将 /home 下的 hello.txt 文件进行压缩【gzip hello.txt】 gunzip 压缩, 将 /home 下的 hello.txt.gz 文件进行解压缩【gunzip hello.txt.gz】 注意:当我们使用 gzip 对文件进行压缩后,不会保留原来的文件。【防盗标记--盒子君hzj】25、zip/unzip 指令
功能描述::压缩和解压类 基本语法 zip 用于压缩文件 zip[选项] XXX.zip将要压缩的内容(功能描述:压缩文件和目录的命令) nzip 用于解压的,unzip[选项] XXX.zip (功能描述:解压缩文件) 常用选项 zip常用选项-r:递归压缩,即压缩目录 unzip常用选项-d<目录> :指定解压后文件的存放目录 基本用法 将 /home 下的 所有文件进行压缩成 mypackage.zip【zip -r mypackage.zip/home/】 将 mypackge.zip 解压到 /opt/tmp 目录下【unzip -d /opt/tmp mypackge.zip】26、tar 指令
功能描述:打包指令,最后打包后的文件是 .tar.gz 的文件【防盗标记--盒子君hzj】 基本语法:tar [选项] xxx.tar.gz 打包的内容 常用选项 -c :产生.tar打包文件 -v :显示详细信息 -f :指定打包后的文件名 -z :打包时同时压缩 -x :解包tar文件 基本用法 压缩多个文件,将 /home/a1.txt 和 /home/a2.txt 压缩成 a.tar.gz【tar -zcvf a.tar a1.txt a2.txt 】 将/home 的文件夹 压缩成 myhome.tar.gz【tar -zcvf myhome.tar.gz /home/】 将 a.tar.gz解压到当前目录 【tar -zxvf a.tar.gz】 将 myhome.tar.gz解压到 /opt/ 目录下【tar -zxvf a.tar.gz--C /opt/】27、kill 命令
功能描述:结束当前进程 基本用法 先通过输入命令 ps au 查看进程,找到需要终止进程的 PID 再通过 kill PID 即可【防盗标记--盒子君hzj】
.
.
直接百度指令用法更为简单有效
https://www.linuxcool.com/
https://man.linuxde.net/
所有的 Linux 系统都会内建 vi 文本编辑器。Vim 具有程序编辑的能力,可以看做是 Vi 的增强版本 小型的文件或者脚本可以用vivim,快速查文件内容(log)vim是十分好用的, 工程上的文件我们一般可以用vscode进行编辑,2.正常模式
以 vim 打开一个档案就直接进入一般模式了(这是默认的模式),【防盗标记--盒子君hzj】 在编辑模式和命令行模式下一般来说按 **Esc**可以退出到正常 可以使用『上下左右』按键来移动光标,你可以使用『删除字符』或『删除整行』来处理档案内容, 也可以使用『复制、贴上』来处理你的文件数据。3.插入模式/编辑模式
程序员可以输入内容 在正常模式下,一般来说按 i进入编辑模式4.命令行模式
在正常模式下,一般来说按 /进入编辑模式
w写入、q退出、wq写入并退出、q!退出不保存
在这个模式当中, 可以提供你相关指令,完成读取、存盘、替换、离开 vim 、显示行号等的动作则是在此模式中达成的!
5.快捷键的使用 (1)复制粘贴,在正常模式下拷贝当前行:yy 拷贝当前行向下的 5 行:5yy 粘贴:p(2)删除,正常模式下
删除当前行:dd 删除当前行向下的 5 行: 5dd(3)撤销,正常模式
输入u(5)快捷键到底文档的最末行、最首行,正常模式
到底文档的最末行[G] 最首行[gg](6)查找, 在命令行模式
/关键字 回车 查找 , 输入 n 就是查找下一个【防盗标记--盒子君hzj】(7)设置文件的行号,取消文件的行号,命令行模式
设置文件的行号: set nu 取消文件的行号:set nonu(8)编辑文件,将光标移动到第 n 行,命令模式
第一步:显示行号 :set nu 第二步:输入 20 这个数 第三步: 输入 shift+g6.vim 插件攻略 Vundle:
用于管理 vim 插件,Vundle 允许你安装新的插件、配置已有的插件、更新插件配置、搜索安装的插件和清理不使用的插件
YouCompleteMe:自动补全插件,一个随键而全的、支持模糊搜索的、高速补全的插件
六、shell脚本编程(.sh) 1.Shell的介绍Shell是一个命令行解释器,它向Linux内核发送请求,用户可以用Shell来启动、挂起、停止甚至是编写一些程序,脚本常用于获取参数,循环遍历
2.硬件、内核、shell、应用程序的关系可以认为shell就是操作内核的一个窗口就行了,够用了对于应用层开发【防盗标记–盒子君hzj】
3.编写shell脚本 (1)工具使用vim编辑器或者vscode编辑器
(2)脚本格式要求1) 脚本以#!/bin/bash开头 2)输入各种我们需要的命令行(3)语法 (1)把一堆命令行和逻辑一起写进去一个.sh文件里面,一键启动,相当于ROS中的lanch文件 (2)shell变量 (1)Shell的用户和系统变量
1)用户自定义变量 2)系统变量:$HOME、$PWD、$SHELL、$USER等等。比如: echo $HOME
(2)定义Shell变量的规则
1) 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。【防盗标记--盒子君hzj】 3) 变量名称一般习惯为大写 2) 等号两侧不能有空格
(3)定义、撤销、声明shell变量的方法
1)定义变量:变量=值 2)撤销变量:unset 变量 3) 声明静态变量:readonly 变量
(4)将命令的返回值赋给变量方法
1)A=`ls -la` 反引号,运行里面的命令,并把结果返回给变量A 2)A=$(ls -la) 等价于反引号
(5)设置环境变量
可把变量提升为全局环境变量,可供其他shell程序使用,环境变量相当于系统的全局变量 (1)基本语法 1) export 变量名=变量值 (功能描述:将shell变量输出为环境变量) 2) source 配置文件(功能描述:让修改后的配置信息立即生效) 3) echo $变量名(功能描述:查询环境变量的值) (2)步骤 1) 在/etc/profile文件中定义环境变量XXX 2) 可查看环境变量XXX的值 3) 在另外一个shell程序中使用环境变量XXX (3)注意 在输出环境变量XXX前,需要让其生效source /etc/profile【防盗标记--盒子君hzj】(2)位置参数变量
介绍
当我们执行一个shell 脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量比如 :./myshell.sh 100 200 %2c 这个就是一个执行 shell 的命令行,可以在 myshell 脚本中获取到参数信息
基本语法
$n(功能描述: n 为数字, $0 代表命令本身, $1-$9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10}
$*(功能描述:这个变量代表命令行中所有的参数, $* 把所有的参数看成一个整体
$@(功能描述:这个变量也代表命令行中所有的参数, 不过 $@ 把每个参数区分对待
$#(功能描述:这个变量代表命令行中所有参数的个数)
(3)预定义变量
基本介绍 就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用 基本语法 $$(功能描述:当前进程的进程号(PID)) $!(功能描述:后台运行的最后一个进程的进程号(PID)) $?(功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了【防盗标记--盒子君hzj】(3)算术运算符
基本语法 方法一: “$((运算式 ))” 或 “$[ 运算式 ]” 方法二: expr +,-,*, /, %分别表示加减乘除和取余 注意:expr命令的运算符间要有空格(4)条件判断与判断流程
(1)判断条件
(1)判断条件基本语法 [ condition ](注意condition前后要有空格) 返回结果:非空返回true,可使用$?验证(0为true,>1为false) (2)判断条件应用实例 [ atguigu ] 返回true [ ] 返回false [condition] && echo OK || echo notok 条件满足,执行后面的语句【防盗标记--盒子君hzj】 (3)常用判断条件 1) 两个整数的比较 = 字符串比较 -lt 小于 -le 小于等于 -eq 等于 -gt 大于 -ge 大于等于 -ne 不等于 2) 按照文件权限进行判断 -r 有读的权限 -w 有写的权限 -x 有执行的权限 3)按照文件类型进行判断 -f 文件存在并且是一个常规的文件 -e 文件存在 -d 文件存在并是一个目录
(2)判断流程
1)if 语句
基本语法 方式一: if [ 条件判断式 ];then 【防盗标记--盒子君hzj】 程序 fi 方式二【推荐】: if [ 条件判断式 ] then 程序 elif [条件判断式] then 程序 fi
(2)case语句
基本语法 case $变量名 in "值1") 如果变量的值等于值1,则执行程序1 ;; "值2") 如果变量的值等于值2,则执行程序2 ;; …省略其他分支… *) 如果变量的值都不是以上的值,则执行此程序 ;; esac
(3)for语句
基本语法 for (( 初始值;循环控制条件;变量变化 )) do 程序 done
(4)while语句
基本语法 while [ 条件判断式 ] 【防盗标记--盒子君hzj】 do 程序 done(5)read读取控制台输入
基本语法 read(选项)(参数) 选项: -p:指定读取值时的提示符; -t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了 参数: 变量:指定读取值的变量名(6)系统函数与自定义函数
1、函数介绍
shell编程和其它编程语言一样,有系统函数,也可以自定义函数
2、系统函数
(1)basename函数
功能:返回完整路径最后 / 的部分,常用于获取文件名
基本语法
basename [pathname] [suffix]
basename [string] [suffix] (功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’)
字符,然后将字符串显示出来。
选项:
suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。
(2)dirname函数
功能:返回完整路径最后 / 的前面的部分,常用于返回路径部分
基本语法:dirname文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))
3、自定义函数
基本语法
function ] funname()
{
Action;
[return int;]
}
调用直接写函数名:funname [值]
(7)程序注释
(1)单行注释:在命令行之前加上“#” (2)多行注释: :< (4)示例 示例1:获取参数#!/bin/sh a="hello world!" num=2 echo "a is : $a num is : ${num}nd" 运行结果: a is : hello world! num is : 2nd可以看出,用$来获取变量值示例2:遍历目录+常用指令操作问题: 1. 切换工作目录至/tmp 2. 依次向/tmp 目录中的每个文件或子目录问好(Hello,log)【防盗标记--盒子君hzj】 3. 统计/tmp 目录下共有多个文件,并显示出来 #!/bin/bash cd /tmp for i in /tmp/* do echo "Hello , $i" done count=`ls -l|grep '^-'|wc -l` echo "====file_count:$count===="4.shell脚本的常用执行方式 (1)方式11)首先要赋予.sh 脚本权限 如果脚本文件没有可执行权限时不可以执行的 【使用chmod指令】 命令:chmod+x xxx.sh 2)执行脚本(2)方式2不用赋予脚本+x权限,直接执行即可 用绝对路径来执行:(sh+脚本)命令:sh ./root/shell/myshell.sh 用相对路径来执行:(sh+脚本)命令:sh ./myshell.sh.
七、PRM包、YUM包,apt软件管理 1.rpm包 (1)介绍
.一种用于互联网下载包的打包及安装工具,它生成具有.RPM扩展名的文件,类似windows的setup.exe
(2)rpm包的简单查询指令(1)rpm -qa :查询所安装的所有rpm软件包 rpm -qa | more rpm -qa | grep X [rpm -qa | grep firefox ] (2)rpm -q 软件包名 :查询软件包是否安装【防盗标记--盒子君hzj】 rpm -q firefox (3)rpm -qi 软件包名 :查询软件包信息 rpm -qi file (4)rpm -ql 软件包名 :查询软件包中的文件 rpm -ql firefox (5)rpm -qf 文件全路径名 查询文件所属的软件包 rpm -qf /etc/passwd rpm -qf /root/install.log(3)rpm包名基本格式一个rpm包名:firefox-45.0.1-1.el6.centos.x86_64.rpm 名称:firefox 版本号:45.0.1-1 适用操作系统: el6.centos.x86_64(4)卸载rpm包基本语法:rpm -e RPM包的名称 1) 如果其它软件包依赖于您要卸载的软件包,卸载时则会产生错误信息。(5)安装rpm包rpm -ivh RPM包全路径名称 参数说明 i=install 安装 v=verbose 提示 h=hash 进度条2.yum (1)介绍Yum 是一个Shell前端软件包管理器。基于RPM包管理,能够从指定 的服务器自动下载RPM包并且安装, 可以自动处理依赖性关系,并 且一次安装所有依赖的软件包【防盗标记--盒子君hzj】 使用YUM的前提是可以联网(2)yum的基本指令(1)查询yum服务器是否有需要安装的软件指令 yum list|grep xx软件列表 (2)安装指定的yum包 yum install xxx 下载安装3.apt软件管理 (1)apt介绍apt是Advanced Packaging Tool的简称,是一款安装包管理工具。 在Ubuntu下,我们可以使用apt命令可用于软件包的安装、删除、清理等,类似于Windows中的软件管理工具(2)更新Ubuntu软件下载地址APT采用的 C/S 模式,也就是客户端 服务器模式,我们的 PC 机作为客户端,当需要下载软件的时候就向服务器请求 更新Ubuntu软件下载地址的目的是提高网络通讯的速度,加快下载和安装的速度 方法一 翻墙,直接用美国的网络 方法二 下载地址换为中国的镜像源。镜像源可以理解为提供下载 软件的地方, 比如Android手机上可以下载软件的安卓市场;iOS手机上可 以下载软件的AppStore(3)Ubuntu软件操作的相关命令(1)较常用的指令
(1)更新源:sudo apt-get update (2)安装包:sudo apt-get install package (3)删除包:sudo apt-get remove package (4)获取包的相关信息,如说明、大小、版本等:sudo apt-cache show package (5)下载该包的源代码:sudo apt-get source package(2)拓展指令
(1)搜索软件包:sudo apt-cache search package (2)重新安装包:sudo apt-get install package --reinstall (3)修复安装:sudo apt-get -f install (4)删除包,包括配置文件等:sudo apt-get remove package --purge (5)安装相关的编译环境:sudo apt-get build-dep package (6)更新已安装的包sudo apt-get upgrade (7)升级系统sudo apt-get dist-upgrade (8)了解使用该包依赖那些包sudo apt-cache depends package (9)查看该包被哪些包依赖sudo apt-cache rdepends package.
八、远程登陆(常用)
.远程连接及可以仅仅连接一个终端,又可以连接一个桌面的操作界面,当然后者更好【防盗标记–盒子君hzj】
1.基本概念linux 服务器是开发小组共享的,正式上线的项目是运行在公网的,因此程序员需要远程登录到 ubuntu 进行项目管理或者开发
2.Xshell5 和 Xftp远程登陆到Ubuntu
远程登录客户端有 Xshell5, Xftp5 , 我们学习使用 Xshell5 和 Xftp , 其它的远程工具大同小异.不常用了
3.ssh远程登录Ubuntu(1)ssh介绍
SSH为Secure Shell的缩写靠,专为远程登录会话和其他网络服务提供安全性的协议。 常用于远程登录,以及用户之间进行资料拷贝(2)ssh原理
使用SSH 服务,需要安装相应的服务器和客户端。 客户端和服务器的关系:如果 A 机器想被B 机器远程控制, 那么,A 机器需要安装 SSH 服务器, B 机器需要安装 SSH 客户端(3)安装SSH和启用
(1)安装SSH:【指令为:sudo apt-get install openssh-server】 执行上面指令后,在当前这台Linux上就安装了SSH服务端和客户端 (2)启用SSH:【指令为:service sshd restart】 执行上面的指令,就启动了 sshd 服务。会监听端口22(4)从linux系统客户机远程登陆linux系统服务机【防盗标记–盒子君hzj】
基本语法【ssh 用户名@IP】 例如:ssh atguigu@192.168.188.130 使用ssh访问,如访问出现错误。可查看是否有该文件 ~/.ssh/known_ssh 尝试删除该文件解决(5)登出linux系统服务机
登出命令:exit或者logout.
九、linux自带编译器 1.g++ -> Makefile -> Cmak的关系
.
.不掌握 g++根本就不会写 Makefile,因为Makefile就是对 g++代码的整理,有了 Makefile,执行程序会更加快速方便。 另外 CMake 就是为了简化 Makefile 的编写,它可以自动生成 Makefile2.g++编译器 (1)安装 g++(1)sudo apt-get install g++ (2)安装好后也可以通过 g++ --version 查看是否安装成功 (3)Tips:ubuntu 安装后就默认安装了 g++,如果不想作死,就不要手贱去降级或者升级 g++版本。(2)g++编译流程(1)通过 vim 创建一个 test.cpp 文件 (2)测试代码完成后,我们来进行下编译,打开终端,在终端输入 g++ 文件名即可 g++ test.cpp (3)在终端输入下面命令就能看到结果,这个.out 文件,实际上这是个经过相应的链接产生的可执行文件。还有个.o 文件,它是个中间文件,一般是通过编译的但还未链接3.Makefile Makefile 介绍Makefile 描述了整个工程的编译、链接等规则,它定义了一系列规则来指定哪些文件需要编译以及如何编译、需要创建哪些库文件以及如何创建这些库文件、如何产生我们想要的可执行文件【防盗标记–盒子君hzj】
Makefile 语法Makefile 包含了五个重要的东西:显示规则、隐晦规则、变量定义、文件指示和注释
4.CMake 安装 CMakesudo apt-get install cmake cmake --versionCMake 编译流程1.准备自己编写的源程序文件 2.编写 CMake 配置文件 CMakeLists.txt,我们可以认为CMakeLists.txt 就是 CMake 所处理的"代码"。 3.执行命令 cmake path 生成 Makefile,其中 path 是 CMakeLists.txt所在的目录 4.使用 make 命令进行编译。catkin_make(ROS)也类似~
十、定时任务调度(1)定时任务调度定义 是指系统在某个时间执行的特定的命令或程序 (2)任务调度分类 1)系统程序:有些重要的系统程序必须周而复始地执行。如病毒扫描等【防盗标记--盒子君hzj】 2)个别用户编写的脚本程序:个别用户希望定时执行的某些程序 【用户自己先写好脚本文件,在利用crontab命令进行定时执行】 (3)基本语法 crontab [选项] (4)常用选项 -e:编辑crontab定时任务 -l:查询crontab任务 -r:删除当前用户所有的crontab任务 service crond restart:重启任务调度(5)定时任务调度示例
十一、磁盘分区挂载(不常用)
在 Linux 中一般不叫“分区”而叫“挂载点”
(1)分区基础知识
这个步骤一般在刷系统的时候已经配置好了,如果系统没有重要的文件或者环境,要重新管理磁盘我建议重新刷一个系统还比较容易,要用到磁盘分区挂载指令的情况时系统大家都在用,或者有重要的文件或者环境,具体遇到问题,百度解决更快(1)分区的方式【防盗标记–盒子君hzj】
1) mbr分区 1.最多支持四个主分区 2.系统只能安装在主分区 3.扩展分区要占一个主分区 4.MBR最大只支持2TB,但拥有最好的兼容性 2) gtp分区 1.支持无限多个主分区(但操作系统可能限制,比如 windows下最多128个分区) 2.最大支持18EB的大容量(1EB=1024 PB,1PB=1024 TB ) 3.windows7 64位以后支持gtp(2)windows下的磁盘分区
直接通过磁盘管理器就可以完成了~(3)Linux下的磁盘分区
(1)Linux来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录 ,一个独立且唯一的文件结构,Linux 中每个分区都是用来组成整个文件系统的一部分 (2)Linux采用了一种叫“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录, 且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得【防盗标记--盒子君hzj】(4)硬盘类型
Linux硬盘分IDE并行硬盘和SCSI串行硬盘,目前基本上是SCSI串行硬盘,现在IDE并行硬盘几乎已经停产了.
(2)磁盘操作命令
.1、磁盘分区命令 fdisk 2、格式化命令 mkfs 3、挂载分区命令 mount 4、卸载命令 umount 5、查看所有设备挂载情况指令:命令 :lsblk 或者 lsblk -f.
(3)增加一块硬盘步骤
.(1)添加硬盘 若使用虚拟机,在设备列表中直接添加 若仅仅使用linux系统,插入一块新的硬盘 (2)分区 分区命令 fdisk /dev/sdb (3)格式化 分区命令:mkfs -t ext4 /dev/sdb1 (4)挂载 设置可以自动挂载 将一个分区与一个目录联系起来.
十二、网络配置 1.查看网络IP和网关
.(1)查看虚拟网络编辑器 (2)修改ip地址 (3)查看网关 (4)查看windows环境的中VMnet8网络配置 (ipconfig指令)【防盗标记--盒子君hzj】2.linux网络环境配置(1)第一种方法(自动获取) 【适用于个人的PC】 登陆后,通过界面的来设置自动获取ip,linux启动后会自动获取IP,缺点是每次自动获取的ip地址可能不一样 (2)第二种方法(指定固定的ip) 【适用于共用的服务器】 (1)直接修改配置文件来指定,并可以连接到外网(程序员推荐 ), 编辑 vi/etc/sysconfig/network-scripts/ifcfg-eth0 (2)ifcfg-eth0文件说明 (3)重启网络服务或者重启系统生效3.ping 测试主机之间网络连通性基本语法 ping 目的主机 (功能描述:测试当前服务器是否可以连接目的主机)十三、进程管理如果是应用开发的时候自己创建的进程,用界面的删除标志号进行删除更直观;
1.基本介绍
如果是用于服务器,后台管理很多用户的且没有界面可以操作的,只能用ps和kill命令进行操作了;(1)基本在LINUX中,每个执行的程序(代码)都称为一个进程。每一个进程都分配一个ID号介绍 (2)每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程 (3)每个进程都可能以两种方式存在的。前台与后台 , 所谓前台进程就是用户目前的屏幕上可以进行操作的。 后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行 (4)一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才才结束2.显示系统执行的进程(1)介绍
ps命令:用来查看目前系统中,有哪些正在执行,以及它们执行的状况。 可以不加任何参数,也可以加参数(2)ps命令行(加参数的)
(1)ps-a: 显示当前终端的所有进程 (2)ps-u: 以用户的形式,显示当前终端的所有进程 (3)ps-x: 显示当前终端的所有进程的运行参数 (4)ps -ef|grep xxx:仅仅查看xxx的相关进程,使用管道命令|grep进行过滤【防盗标记--盒子君hzj】(3)查看终端信息显示内容
3.终止进程kill和killall
.(1)介绍
若是某个进程执行一半需要停止时,或是已消了很大的系统资源时,此时可以考虑停止该进程。使用kill 命令来完成此项任务(2)基本语法
(1)kill [选项] 进程号(功能描述:通过进程号杀死进程)【防盗标记–盒子君hzj】
(2)killall 进程名称(功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)(3)常用选项
-9 :表示强迫进程立即停止(4)典型应用
案例1:踢掉某个非法登录用户
案例2: 终止远程登录服务sshd%2c 在适当时候再次重启sshd服务
案例3: 终止多个gedit 编辑器
案例4:强制杀掉一个终端



