linux笔记
Linux快速入门(Ubuntu)
Linux应用领域
服务器领域
- Linux 在服务器领域的应用是其重要分支
- Linux 免费、稳定、高效等特点在这里得到了很好的体现
- 早期因为维护、运行等原因同样受到了很大的限制
- 近些年来 Linux 服务器市场得到了飞速的提升,尤其在一些高端领域尤为广泛
嵌入式领域
- 近些年来 Linux 在嵌入式领域的应用得到了飞速的提高
- Linux 运行稳定、对网络的良好支持性、低成本,且可以根据需要进行软件裁剪,内核最小可以达
- 到几百 KB 等特点,使其近些年来在嵌入式领域的应用得到非常大的提高
Tip
主要应用:机顶盒、数字电视、网络电话、程控交换机、手机、PDA、等都是其应用领域,得到了
Google、三星、摩托罗拉、NEC 等公司的大力推广
个人桌面领域
- 此领域是传统 Linux 应用最薄弱的环节
- 传统 Linux 由于界面简单、操作复杂、应用软件少的缺点,一直被 Windows 所压制
- 近些年来随着 Ubuntu、Fedora 等优秀桌面环境的兴起,同时各大硬件厂商对其支持的加大,
- Linux 在个人桌面领域的占有率在逐渐的提高
移动设备操作系统
各种品牌的Android手机
文件系统
windows 文件系统
在 Windows 下,打开 “计算机”,我们看到的是一个个的驱动器盘符:
每个驱动器都有自己的根目录结构,这样形成了多个树并列的情形,如图所示:
Linux 文件系统
在 Linux 下,我们是看不到这些驱动器盘符,我们看到的是文件夹(目录):
Ubuntu 没有盘符这个概念,只有一个根目录 /,所有文件都在它下面
用户根目录
位于 /home/user,称之为用户工作目录或家目录,表示方式:
/home/user
或者
~
Note
/home/user`中的`user`是用户目录名,目前我们的用户是`itcast
目录 描述
/ 根目录。一般根目录下只存放目录,在/home,其实是在告诉电脑,先从 /(根目录)开始,再进入到 linux 下有且只有一个根目录,所有的东西都是从这里开始 home 目录^ 当在终端里输入
/bin,/usr/bin 可执行二进制文件的目录,如常用的命令 ls、tar、mv、cat 等
/boot 放置 linux 系统启动时用到的一些文件,如 linux 的内核文件:/boot/vmlinuz,系统引导管理器:/boot/grub
/dev 存放/mntlinux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱mount /dev/cdrom
/etc 系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有,/etc/inittab,/etc/fstab,/etc/init.d,/etc/X11,/etc/sysconfig,/etc/xinetd.d
/home 系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下
~ 表示当前用户的家目录,~edu 表示用户 edu 的家目录
/lib /usr/lib
/usr/local/lib 系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助
/lost+fount 系统异常产生错误时,会将一些遗失的片段放置于此目录下
/mnt,/media 光盘默认挂载点,通常光盘挂载于 /mnt/cdrom 下,也不一定,可以选择任意位置进行挂载
/opt 给主机额外安装软件所摆放的目录
/proc 此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的文件有:/proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/*等
/root 系统管理员root的家目录
/sbin
/usr/sbin
/usr/local/sbin
放置系统管理员使用的可执行命令,如 fdisk、shutdown、mount 等。与 /bin 不同的是,这几个目录是给系统管理员
root 使用的命令,一般用户只能"查看"而不能设置和使用
/tmp 一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下
/srv 服务启动之后需要访问的数据目录,如 www 服务需要访问的网页数据存放在 /srv/www内
/usr 应用程序存放目录
/usr/bin 存放应用程序
/usr/share 存放共享数据
/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件
/usr/local 存放软件升级包
/usr/share/doc 系统说明文件存放目录
/usr/share/man 程序说明文件存放目录
/var 放置系统执行过程中经常变化的文件
/var/log 随时更改的日志文件
/var/spool/mail 邮件存放的目录
/var/run 程序或服务启动后,其 PID 存放在该目录下
linux主要目录速查表
Note
特别关注:
用户目录/home/user或~
其他的作为后续查询使用
终端命令行
为啥要学Linux终端命令
序号 命令 作用 对应英文
1 ls 查看当前文件夹下的内容 list
2 pwd 查看当前所在文件夹 print wrok directory
3 cd [目录名] 切换文件夹 change directory
4 touch [文件名] 如果文件不存在,新建文件 touch
5 mkdir [目录名] 创建目录 make directory
6 rm [文件名] 删除指定的文件名 remove
7 clear 清屏 clear
很多人可能在电视或电影中看到过类似的场景,黑客面对一个黑色的屏幕,上面飘着密密麻麻的字
符,梆梆一顿敲,就完成了窃取资料的任务。
Linux 刚出世时没有什么图形界面,所有的操作全靠命令完成,就如同电视里的黑客那样,充满了
神秘与晦涩。近几年来,尽管 Linux 发展得非常迅速,图形界面越来越友好,但是在真正的开发
过程中,Linux 命令行的应用还是占有非常重要的席位,而且许多Linux功能在命令行界面要比图
形化界面下运行的快。可以说不会命令,就不算会 Linux。
在职场中,大量的 服务器维护工作 都是在 远程 通过 SSH 客户端 来完成的,并没有图形界面,所
有的维护工作都需要通过命令来完成。如 磁盘操作、文件存取、目录操作、进程管理、文件权限
设定等
Linux 发行版本的命令大概有 200 多个,但是常用的命令只有 10 多个而已
学习终端命令的技巧
不需要硬背,不需要硬背,不需要硬背!
常用命令,用的多了,自然就记住了
不要尝试一次学会所有的命令,有些命令是非常不常用的,临时遇到,临时查资料就可以
牢记于指尖
以下命令使用频率可以说是最高的,不断地练习,让他们变成你的肌肉记忆吧
自动补全
在敲出 文件/目录/命令 的前几个字母之后,按下 tab 键
如果输入的没有歧义,系统会自动补全
如果还存在其他 文件/目录/命令,再按一下 tab 键,系统会提示可能存在的命令
小技巧
按 ↑/↓ 光标键可以在曾经使用过的命令之间来回切换
如果想要退出选择,不想执行当前的命令,可以按 ctrl + c
终端命令格式
Note
command:命令名,相应功能的英文单词或单词的缩写
[-options]:选项,可用来对命令进行控制,也可以省略
parameter:传给命令的参数,可以是 零个、一个 或者 多个
查阅命令帮助信息
help
假如一个命令叫做command,显示 command 命令的帮助信息,一般命令参数会有长格式或短格式供选
择,分别用–和-为前缀
man
查阅某个command命令的使用手册
Tip
man 是 manual 的缩写,是 Linux 提供的一个 手册,包含了绝大部分的命令、函数的详细使用说明
使用 man 时的操作键:
command [-options] [parameter]
command --help
command -h
man command
操作键 功能
空格键 显示手册页的下一屏
Enter键 一次滚动手册页的一行
b 回滚一屏
f 前滚一屏
q 退出
/word 搜索word字符串
百度
对于一些命令,如果不是很熟悉,通过查看help或者是man还是不知道什么含义时,我们可以通过百
度搜素。
Linux的终端命令不是用来背诵的,只是个工具,反复查询几次就会了。
Linux常用操作
ls
clear
cd
pwd
mkdir
rm
cp
mv
touch
ls 文件及文件夹查看
ls是英文单词list的简写,其功能为列出目录的内容,是用户最常用的命令之一,它类似于DOS下的dir
命令。Linux文件或者目录名称最长可以有 265 个字符,“.”代表当前目录,“..”代表上一级目录,以“.”开
头的文件为隐藏文件,需要用 -a 参数才能显示。
常用示例:
ls -a 查看当前所有文件和目录,包含隐藏文件和目录
ls -l 以列表形式查看所有文件和目录
ll 等同于ls -al 即等同于以上两个命令结合
ls常用参数:
参数 含义
-a 显示指定目录下所有子目录与文件,包括隐藏文件
-l 以列表方式显示文件的详细信息
-h 配合 -l 以人性化的方式显示文件大小,即文件大小可以用mb
输出信息含义:
通配符:
与DOS下的文件操作类似,在Unix/Linux系统中,也同样允许使用特殊字符来同时引用多个文件名,这
些特殊字符被称为通配符。只要和文件或文件夹描述相关的地方几乎都可以使用通配符。常用的通配符
方式
ls te* 查看所有以te开头的文件及目录
ls *.txt 查看所有以.txt结尾的文件及目录
ls te[sx]t 将匹配test或text
clear 清屏命令
有时候控制台内容太多,可以用clear命令清空一下控制台
也可使用快捷键:Ctrl + l ( “l” 为字母L的小写 )。
cd 切换目录
在使用Unix/Linux的时候,经常需要更换工作目录。cd命令可以帮助用户切换工作目录。 Linux所有的
目录和文件名大小写敏感
cd(change directory)后面可跟绝对路径,也可以跟相对路径。如果省略目录,则默认切换到当前用
户的主目录。
poplar@PoplarTang:~/Lesson/Test$ ls -al
total 0
drwxrwxrwx 1 poplar poplar 512 May 9 10:.
drwxrwxrwx 1 poplar poplar 512 May 9 10: ..
drwxrwxrwx 1 poplar poplar 512 May 9 10:59 TestDir
drwxrwxrwx 1 poplar poplar 512 May 9 10:59 a
-rw-rw-rw- 1 poplar poplar 0 May 9 10:59 haha.txt
命
令
含义
cd
切换到当前用户的主目录(/home/用户目录), 用户登陆时,默认的目录就是用户的主目
录。
cd
~ 切换到当前用户的主目录(/home/用户目录)
cd. 切换到当前目录
cd
..
切换到上级目录
cd - 可进入上次所在的目录
cd / 切换到系统根目录/
如果路径是从根路径开始的,则路径的前面需要加上 “ / ”,如 “ /mnt ”,通常进入某个目录里的文件
夹,前面不用加 “ / ”。
pwd 显示当前路径
使用pwd命令可以显示当前的工作目录,该命令很简单,但又很常用,直接输入pwd即可,后面不带参
数。
mkdir 创建目录
通过mkdir命令可以创建一个新的目录。参数-p可递归创建目录。
需要注意的是新建目录的名称不能与当前目录中已有的目录或文件同名,并且目录创建者必须对当前目
录具有写权限。
常用示例:
mkdir TestDir
mkdir -p a/b/c/d
touch 创建文件
ty@ubuntu:~/Downloads$ pwd
/home/ty/Downloads
poplar@PoplarTang:~/Lesson/Test$ mkdir TestDir
poplar@PoplarTang:~/Lesson/Test$ mkdir -p a/b/c/d
poplar@PoplarTang:~/Lesson/Test$ tree
.
├── TestDir
├── a
│ └── b
│ └── c
│ └── d
└── haha.txt
5 directories, 1 file
参数 含义
-f 强制删除,忽略不存在的文件,无需提示
-r 递归地删除目录下的内容,删除文件夹时必须加此参数 也可使用rmdir删除一个空目录
选
项 含义
-a 该选项通常在复制目录时使用,它保留链接、文件属性,并递归地复制目录^ 简单而言,保
持文件原有属性。
-r 若给出的源文件是目录文件,则cp将递归复制该目录下的所有子目录和文件^ 目标文件必须
为一个目录名。
用户可以通过touch来创建一个空的文件:
说明:
会在当前路径下创建名字为hello.txt的空文件
Linux系统中没有严格的后缀(格式),所以创建文件时可以命名为任意的文件名
rm 删除文件
可通过rm删除文件或目录。使用rm命令要小心,因为文件删除后不能恢复。为了防止文件误删,可以
在rm后使用-i参数以逐个确认要删除的文件。
常用参数及含义如下表所示:
常用示例:
rm xxx.txt aaa.txt 删除文件:(可一次删除多个)
rm -r test_dir删除目录
rmdir test_dir 使用rmdir也可以删除目录, 但必须保证被删除目录里为空
cp 拷贝文件及目录
cp(copy)命令的功能是将给出的文件或目录复制到另一个文件或目录中,相当于DOS下的copy命
令。
常用选项说明:
常用示例:
cp file.txt abc/将当前目录的file.txt拷贝到abc目录
cp abc/*.txt. 将abc目录下的所有txt文件拷贝到当前目录
cp -r abc aaa 将abc目录拷贝为aaa目录(包含所有子目录及文件)
mv 移动、重命名
用户可以使用mv命令来移动文件或目录,也可以给文件或目录重命名。
touch hello.txt
选
项
含义
-f 禁止交互式操作,如有覆盖也不会给出提示
-i
确认交互方式操作,如果mv操作将导致对已存在的目标文件的覆盖 系统会询问是否重写,
要求用户回答以避免误覆盖文件
-v 显示移动进度
常用选项说明:
常用示例:
mv a.md abc.txt 将a.md重命名为abc.txt
mv abc.txt ./aaa 将abc.txt移动到当前的aaa目录中
echo 控制台输出
向控制台输出HelloWorld信息
> 输出重定向
Linux允许将命令执行结果重定向到一个文件,本应显示在终端上的内容保存到指定文件中。
test.txt 如果不存在,则创建,存在则覆盖其内容
注意:>输出重定向会覆盖原来的内容,>>输出重定向则会追加到文件的尾部
cat 查看&合并文件内容
cat xxx.py 可以用来快速查看某个文件内容,输出到控制台
cat test.txt >> haha.txt 将test.txt的内容追加到haha.txt中
cat 1.txt 2.txt > 1_2.txt将1.txt 2.txt内容合并到1_2.txt中
tar 归档管理¶
计算机中的数据经常需要备份,tar是Unix/Linux中最常用的备份工具,此命令可以把一系列文件归档
到一个大文件中,也可以把档案文件解开以恢复数据。
tar使用格式:
tar命令很特殊,其参数前面可以使用“-”,也可以不使用。
常用参数:
echo "HelloWorld"
ls > test.txt
tar [参数] 打包文件名 文件
参数 含义
-c 生成档案文件,创建打包文件
-x 解开档案文件
-z 压缩/解压, 此选项只针对tar.gz为结尾的文件
-v 列出归档解档的详细过程,显示进度
-t 列出档案中包含的文件
-f 指定档案文件名称,f后面一定是.tar文件,所以必须放选项最后
注意:除了f需要放在参数的最后,其它参数的顺序任意。
常用命令:
打包并压缩
当前目录所有文件tar -czvf xxx.tar.gz *
以.txt结尾的文件tar -czvf xxx.tar.gz *.txt
打包指定目录或文件tar -czvf xxx.tar.gz my-file my-dir
解压缩包
解包到当前目录:tar -xzvf xxx.tar.gz
解包到指定目录:tar -xzvf xxx.tar.gz -C my-dir (需要先创建my-dir目录)
zip、unzip 文件压缩解压
通过zip压缩文件的目标文件不需要指定扩展名,默认扩展名为zip。
压缩文件 :zip [-r] 目标文件(没有扩展名) 源文件
文件:zip bak * 当前目录所有文件,也可以指定文件
文件夹:zip -r bak * 当前目录所有文件&目录递归
解压文件 :unzip -d 解压后目录文件 压缩文件
解压到指定目录:unzip -d ./target_dir bak.zip
解压到当前目录:unzip bak.zip
scp 远程拷贝文件
从远程复制 文件 到本地
从本地复制 文件 到远程
从远程复制 目录 到本地 -r
scp root@192.168.16.66:/home/poplar/xxx.tar.gz /home/test/
scp /home/test/xxx.png root@192.168.16.66:/home/poplar/
从本地复制 目录 到远程 -r
wget 文件下载
下载普通文件
以指定文件名保存文件
断点续传
tree 目录树状结构
使用tree命令可以查看指定目录的树状结构
Warning
有的系统默认未安装tree,需要先使用sudo apt install tree安装后才可以使用tree命令
which 查看命令位置
有时我们想知道被执行的命令在哪个目录,以方便切换或更新不同版本,如Python。可以使用which
命令
scp -r root@192.168.16.66:/home/poplar/day01 /home/test/
scp -r /home/test/day01 root@192.168.16.66:/home/poplar/
wget http://p1.qhimgs4.com/t01ce0387e64e3428ca.jpg
wget -O girl.jpg http://p1.qhimgs4.com/t01ce0387e64e3428ca.jpg
wget -c http://p1.qhimgs4.com/t01ce0387e64e3428ca.jpg
poplar@PoplarTang:~/Lesson/day01$ tree
.
├── Test.sh
├── TestDir
│ └── test.sh
├── a
│ └── b
│ └── c
│ └── d
│ └── haha.txt
├── haha.txt
├── hhh.sh
├── pics
│ ├── 20190213185356_sczsq.jpg
│ ├── 20190216212132_uvtxf.thumb.700_0.gif
│ └── url-list.txt
├── test.txt
└── ttt.txt
命令 含义
reboot 重新启动操作系统
shutdown –r now 重新启动操作系统,shutdown会给别的用户提示
shutdown -h now 立刻关机,其中now相当于时间为 0 的状态
shutdown -h 20:25 系统在今天的20:25 会关机
shutdown -h +10 系统再过十分钟后自动关机
reboot、shutdown 关机重启
网络相关命令
ping 测试网络是否联通
可以执行ping baidu.com以查看是否连接了互联网
可以执行ping 192.168.1.123以查看局域网中的其他设备是否联通
ifconfig 查看ip地址
poplar@PoplarTang:~/Lesson$ which python
/usr/bin/python
poplar@PoplarTang:~/Lesson$ which ls
/bin/ls
ssh 连接远程电脑
提示是否接受签名证书:输入yes,回车即可.
如果远程电脑是新装电脑,有可能会因为ssh服务证书问题而无法连接,可以通过在远程电脑上重装ssh
服务解决。
1. 重装ssh服务,生成证书
修改sshd_config文件,确保可以使用用户名密码连接
Port 22 #默认即可,如果有端口占用可以自己修改
PasswordAuthentication yes # 允许用户名密码方式登录
**2. 重启ssh服务
- 检查sshd服务是否存活**
4.连接远程电脑
ssh root@192.168.37.
sudo apt-get remove openssh-server
sudo apt-get install openssh-server
sudo vi /etc/ssh/sshd_config
sudo service ssh restart
ps -e | grep ssh
# 或
sudo service ssh status
[ u/g/o/a ] 含义
u user 表示该文件的所有者
g group 表示与该文件的所有者属于同一组( group )者,即用户组
o other 表示其他以外的人
a all 表示这三者皆是
[ ±/= ] 含义
+ 增加权限
- 撤销权限
= 设定权限
rwx 含义
r
read 表示可读取,对于一个目录,如果没有r权限,那么就意味着不能通过ls查看这个目
录的内容。
w write 表示可写入,对于一个目录,如果没有w权限,那么就意味着不能在目录下创建新
的文件。
x excute 表示可执行,对于一个目录,如果没有x权限,那么就意味着不能通过cd进入这个
目录。
提示是否接受签名证书:输入yes,回车
用户及权限操作
chmod 修改文件权限
使用ls -l可以查看文件&目录的权限
使用chmod可以修改文件权限
有两种使用格式:字母法与数字法。
字母法权限修改:rwx
chmod u/g/o/a +/-/= rwx 文件
常用的操作如下
ssh itcast@192.168.150.
# 修改一个文件所属用户的权限为可读可写
chmod u=rw 1.py
# 为文件添加所有人可执行权限
chmod a+x 1.py
字母 说明
r 读取权限,数字代号为 "4"
w 写入权限,数字代号为 "2"
x 执行权限,数字代号为 "1"
- 不具任何权限,数字代号为 “0”
如果需要同时进行设定拥有者、同组者以及其他人的权限,参考如下:
数字法权限修改: 421
“rwx” 这些权限也可以用数字来代替
如执行:chmod u=rwx,g=rx,o=r filename 就等同于:chmod u=7,g=5,o=4 filename
chmod 751 file:
文件所有者:读、写、执行权限
同组用户:读、执行的权限
其它用户:执行的权限
注意:
如果想递归所有目录加上相同权限,需要加上参数“ -R ”。
如:chmod 777 test/ -R 递归 test 目录下所有文件加 777 权限
passwd 修改用户密码
在Unix/Linux中,超级用户可以使用passwd命令为普通用户设置或修改用户密码。用户也可以直接使
用该命令来修改自己的密码,而无需在命令后面使用用户名。
非超级用户只能修改自己的密码
超级管理员用户root,可以修改其他用户密码
为了系统安全起见,要使用比较复杂的口令,最好使用 8 位以上的口令,并且口令中包含有大写、小写
字母和数字
whoami 我是谁
whoami可以获取当前登录账户的用户名
poplar@PoplarTang:~$ passwd
Old password:******
New password:*******
Re-enter new password:*******
root@PoplarTang:/home/poplar# passwd poplar
New password:*******
Re-enter new password:*******
exit 退出登录账户
如果是图形界面,退出当前终端;
如果是使用ssh远程登录,退出登陆账户;
如果是切换后的登陆用户,退出则返回上一个登陆账号。
su 切换到普通用户
su username 切换到username用户,当前路径不变
sudo su 切换到管理员账号
sudo su 或sudo -s Linux 下切换到root的命令
系统信息命令
查看系统版本
发行版本号
内核版本及系统位数
内核版本及gcc版本
查看硬件信息
cpu信息
内存信息
运行时信息
top实时CPU&内存使用情况
free当前内存占用情况
ps -aux查看当前进程状态(CPU、内存占用、开启时间)
kill根据进程pid杀死指定进程,可以配合参数- 9 强制杀死
其他命令手册参考
su - username`切换到username用户,当前路径变更为`/home/username
lsb_release -a
uname -a
cat /proc/version
cat /proc/cpuinfo` or `lscpu
sudo dmidecode -t memory
Linux命令大全:http://man.linuxde.net/
菜鸟Linux命令:https://www.runoob.com/linux/linux-command-manual.html
Vim 编辑器
模式及切换
命令模式
切换到编辑模式
i 插入方式进入编辑模式
a 追加方式进入编辑模式
R 替换方式进入编辑模式
o 当前行下一行开始位置开始编辑
O 当前行上一行开始位置开始编辑
切换到末行模式:输入冒号:
编辑模式
切换到命令模式:按下esc
末行模式
切换到命令模式:按下esc
末行模式
在命令模式输入冒号:进入末行模式
w 保存
q 退出
x 保存并退出
set nu 显示行号
set nonu 隐藏行号
查找指定字符
/anywords
按n定位下一个,shfit+n定位上一个
命令模式
在任意状态按下esc进入命令模式
复制粘贴
yy 复制
p 粘贴
3yy 复制 3 行
2p 粘贴 2 遍
剪切
dd
3dd剪切 3 行
撤销
u 撤销
Ctrl + r 反撤销
删除
dd 删除当前行
dG 删除当前行到文件末尾
dH 删除当前行到文件开头
基本控制
上k下j左h右l
锚定符
gg跳到当前文档首行
G 跳到当前文档末行
^ 跳到当前行首
$ 跳到当前行尾
什么是Shell
Shell是一个命令解释器,是用户访问Linux操作系统内核服务的桥梁。
分类
窗口shell -> gnome, kde, explorer.exe
命令行shell -> bash, cmd.exe, powershell.exe
shell历史
sh -> ksh -> csh -> bash
Shell-初体验
编辑文件
修改权限
执行Shell脚本
Shell脚本(Shell Script)
Shell脚本是为Shell编写的脚本程序
Shell命令执行特点: 逐行输入命令,逐行确认
开发规范
#!/bin/sh
echo "Hello world!"
echo "666"
chmod +x test.sh
./test.sh
or
sh ./test.sh
source
使用source执行加载shell脚本,可以保证环境一致性,将shell脚本中定义的环境变量在当前环境也生
效。
Shell 基本语法
注意
注意等号左右两边 不能有空格
机器人端自动运行脚本:lidar_nav_sh.sh
说明:
$(cd dirname $0;pwd)
在命令行状态下单纯执行 $ cd dirname $0 是毫无意义的。因为他返回当前路径的"."。
* 这个命令写在脚本文件里才有作用,他返回这个脚本文件放置的目录,并可以根据这个目录来定
位所要运行程序的相对位置(绝对位置除外)。 *
比如在/home/itcast/test/下新建test.sh内容如下:
1.
1. 命名:要有意义,eg. `xxx.sh`
2. 首行:必须是命令解释器 eg. `#!/bin/bash`
3. 注释:简单描述脚本信息 eg. `# 测试命令输入`
4. 执行:`sh 脚本文件.sh` or `bash 脚本文件.sh` or `./xxx.sh`
5. 规范:成对符号成对写 `() [] {} "" `
source xxx.sh
#!/bin/bash
CURRENT=$(cd `dirname $0`; pwd)
IP=`ifconfig labornet | grep "inet addr:" | awk '{print $2}' | cut -c 6-`
source /opt/ros/kinetic/setup.bash
source /root/catkin_ws/devel/setup.bash
export ROS_MASTER_URI=http://$IP:11311/
export ROS_IP=$IP
cd $CURRENT
rm slam.log
stdbuf -oL roslaunch $CURRENT/lidar_nav.launch &> $CURRENT/slam.log
#roslaunch $CURRENT/slam.launch >>$CURRENT/slam.log
cd `dirname $0`
echo `pwd`
```shell
#然后返回到/home/itcast 执行
sh test/test.sh
运行结果:
这样就可以知道一些和脚本一起部署的文件的位置了,只要知道相对位置就可以根据这个目录来
定位,而可以不用关心绝对位置。这样脚本的可移植性就提高了,扔到任何一台服务器,(如果
是部署脚本)都可以执行。
注释
单行注释
多行注释
Shell变量 1
存储动态值的抽象概念;变量名不变,变量值可变
变量分类 :
本地变量:在本地有效
全局变量:在当前系统下,所有环境都有效
内置变量:bash中默认包含一些变量,可直接使用
本地变量¶
普通变量¶
变量名=变量值:变量值必须是一个整体,中间不能有特殊字符
变量名=’变量值’:看到的内容和输出的内容一致
变量名=”变量值”:如果在变量A的变量值范围内,有可以解析的变量B,那么就首先解析变量B,
将B的结果和其他内容组合后,再赋值给A eg.
/home/itcast/test
# 我是单行注释
#第一种 << EOF
<< EOF
your comment 1
comment 2
blah
EOF
<< EOF
这里是多行注释!
作者:poplar
时间: 2019 年 5 月 5 日20:53:21
联系:xxx@itcast.cn
EOF
#第二种 即 : + 空格 + 单引号, 不推荐
: '
这里是多行注释!
作者:poplar
时间: 2019 年 5 月 5 日20:53:21
联系:xxx@itcast.cn
'
命令变量
注意
注意等号左右两边 不能有空格
执行流程
1 、执行命令
2 、将命令执行后的结果,赋值给变量名
eg.
如何查看变量
全局变量
定义方式:
定义一个本地变量
使用export声明这个本地变量为全局变量
1. 如果export在一个文件中,则需要使用source filename.sh使其生效
2. 删除变量:
poplar@PoplarTang:~/Lesson$ val_b=itcast
poplar@PoplarTang:~/Lesson$ val_a='hello $val_b'
poplar@PoplarTang:~/Lesson$ echo $val_a
hello $val_b
poplar@PoplarTang:~/Lesson$ val_a="hello $val_b"
poplar@PoplarTang:~/Lesson$ echo $val_a
hello itcast
变量名=`命令`
变量名=$(命令)
aa='ls'
$aa
wo=$(whoami)
echo $wo
echo $变量名
echo "aaa ${变量名} bbb ccc"
itcast1=haha666
export itcast1
# 合并为 1 步
export itcast2=test123
env | grep itcast
# output
itcast2=test123
itcast1=haha666
系统全局变量:
在vim ~/.bashrc文件添加一下类似命令:
unset itcast1
export itcast2=test123