Linux私房菜学习笔记
用户与用户组
Linux一般将文件读写的身份分为三个类别,分别是 拥有者(owner)、所属群组(group)、其他人(others),切三种身份都有读、写、执行的权限。
- 文件拥有者
Linux是多人多任务的系统,常常会有多人同时使用这台主机进行工作,考虑到每个人的隐私和个人的工作环境,就有了文件权限拥有者这个角色。
- 用户组的概念
在进行团队协助工作的时候,会使用到用户组的概念。将不同的任务组分隔开,用户组内的成员之间可以共享文件。
在Linux中任何一个文件都有用户(User)、所属群组(Group)、其他人(Others)三种身份的个别权限。
- Linux用户身份与用户组记录的文件
在Linux系统中,默认情况下,所有系统上的账号和一般身份使用者以及root信息,都是记录在 /etc/passwd
这个文件里面的。个人的密码则是记录在 /etc/shadow
这个文件下。Linux中的群组名称都记录在 /etc/group
文件内。
- 添加组和用户
添加组:groupadd 组名
删除组:groupdel 组名
查询组:cat /etc/group
添加用户:useradd -m -g 组名 用户名 注:-m 自动建立用户家目录; -g指定用户所在组 useradd -m -g gu leo
将 用户leo添加到gu用户组中
Linux文件权限概念
- ** Linux文件属性**
在Linux系统中,执行 ls -al 可以列出当前目录下所有文件(包括隐藏文件)的详细权限与属性。
![](https://img-blog.csdnimg.cn/img_convert/c4e7638f01bbca27e4f9da76244ce258.png#height=239&id=u78842c13&margin=[object Object]&originHeight=318&originWidth=958&originalType=binary&status=done&style=stroke&width=719)
drwxr-xr-x. 者代表文件的类型与权限,一共有10个字符。
第一个字符代表这个文件是目录,文件或者链接文件等:当为[d]时,则代表目录;当为[-]则是文件;当为[l]时则表示链接文件;若是[b]则表示设备文件里面可供存储的周边设备;若是[c]则表示设备文件里面的串行端口设备,例如键盘、鼠标等。
接下来的字符中,以三个为一组,且均为[rwx]的三个参数组合。其中[r]代表可读,[w]代表可写,[x]代表可执行。这三个权限的位置不会改变,如果没有权限就会出现[-]。第一组为文件拥有者可具备的权限,图中表示该文件可读可写可执行。第二组表示加入此用户组的账号的权限。第三组为非本人且没有加入本用户组的其他账号的权限。
隐藏文件的文件的文件名前面有 .** **
- Linux文件权限的重要性
- 系统保护的功能
- 团队开发软件或者数据共享功能
- 如何修改文件的属性与权限
chgrp
: 修改文件所属的用户组chown
: 修改文件拥有者chmod
:修改文件的权限, SUID,SGIO,SBIT等特性。
chgrp [-R] dirname/filename
例如 chgrp user filename
chmod 可以更改文件的属性,其中的rwx可以使用数字来代表各个权限:r:4,w:2,x:1
rwx = 4 + 2 + 1 = 7
- 使用符号类型修改文件权限
除了上面使用数字来修改文件权限之外,还可以使用符号类型来修改文件权限。
|
chmod | u(user)
g(group)
o(others)
a(all) | +(加入)
-(移除)
=(设置) | r(读)
w(写)
x(执行) |
文件或目录 |
---|
例子:chmod u=rxw,go=rx .bashrc
chmod a+w .bashrc
chmod a-x .bashrc
- 目录的权限与意义
对于文件来说,r
表示可读取此文件的实际内容,如读取文本文件中的文字内容等;w
表示可以编辑,新增或者修改该文件的内容但是不可以删除该文件;x
表示该文件具有被系统执行的权限。rwx
都是针对的文件的内容而言的,与文件名的存在与否没有关系,因为文件记录的是实际的数据。
对于目录来说,目录主要记录文件名的列表,文件名和目录有强烈的关联。r
表示有读取目录结构列表的权限,当具有读取(r)一个目录的权限时,表示可以查询该目录下的文件名数据,就可以使用ls
命令将这个目录下的内容列表显示出来。w
表示该目录结构列表的建立新的文件与目录;删除已经存在的文件与目录;将已存在的文件或命令更名;移动该目录内的文件和目录的位置。x
代表用户是否能进入该目录成为工作目录。w
权限与该目录下的文件名的变动有关。
- Linux文件种类和扩展名
- 常规文件 属性为[-]
- 纯文本文件 可以用cat命令将文件内容读出来
- 二进制文件 例如cat命令就是二进制文件
- 数据文件 有些程序会在运行过程中读取某些特定格式的文件,这些特定格式的文件被称问数据文件。例如在linux中用户登录的过程中,会将登陆的的数据记录在/var/log/wtmp这个文件中,该文件是一个数据文件,要使用last命令读出来。
- 目录文件 属性为[d]
- 链接文件 属性为[l]
- 设备与设备文件
- 区块设备文件 第一个属性为[b] 例如 /dev/sda
- 字符设备文件 第一个属性为[c]
- 数据接口文件 例如socket文件,最常在/run 和 /tmp里面见到
- 数据输送文件 FIFO是一种特殊的文件类型解决多个程序同时读写一个文件所造成的错误的问题。代表先进先出的缩写,在数据结构上表示管道,第一个属性为[p]
- Linux文件扩展名
一个Linux文件能否被执行,与第一栏的十个属性有关,与文件名没有关系。
Linux目录配置
Linux下目录配置主要更具FHS(Filesystem Hierarchy Standard)文件层次标准来配置。FHS规范了每个特定的目录下应该要放置什么样的数据。
可分享(shareable) | 不可分享(unshareable) | |
---|---|---|
不变(static) | /usr (软件存放处) | /etc (配置文件) |
/opt (第三方软件) | /boot(启动文件与内核) | |
可变的(variable) | /var/mail(用户邮箱) | /var/run(程序相关) |
/var/spool/news(新闻组) | /var/lock(程序相关) |
(注:var 目录主要包括系统运行时要改变的数据。var目录存在的目的时把usr目录在运行过程中需要更改的文件或者临时生成的文件和目录提取出来,这样可以使usr目录以只读的方式挂载。)
Linux各目录和应该放置的内容:
/bin | 系统有很多存放执行文件的目录,但是/bin文件比较特殊。/bin放置的是在单人维护模式下还能被使用的命令。在/bin下面的命令可以被root和一般账户所使用,主要有:cat、chmod、data、mv、mkdir、cp、bash等常用命令 |
---|---|
/boot | 主要放置启动时需要的文件,包括Linux内核文件以及启动选项与启动所需的配置文件等。Linux内核常用的文件名为vmlinuz,如果使用的是grub2这个启动引导程序,则还会存在/boot/grub2这个目录。 |
/dev | 任何设备和接口设备都是以文件的形式存在这个目录中,读写这个目录下的某个文件就是读写这个目录。 |
/etc |
系统中主要的配置文件,例如人员的账号密码和各种服务的启动文件等 /etc/opt 放置第三方软件的配置文件 /etc/xml 放置xml格式相关的各项配置文件 |
/lib |
系统的库函数非常多,/lib 中放置在启动时会用到的函数库,以及在/bin和/sbin下面的命令会调用的函数库。 /lib/modules 主要放置可抽放式的内核相关的模块(驱动程序d’d’d) |
/media | 挂载可删除设备,包括软盘,光盘和DVD设备,如/media/cdrom |
/mnt | 暂时挂载设备 |
/opt | 给第三方软件放置的目录 |
/run | 早期的FHS规定系统启动后所产生的各项信息应该存放在/var/run目录下,新版的FHS规定到/run下 |
/sbin | Linux中有很多命令是来测试系统环境的,这些命令只有root才能够来设置系统,其他用户最多只能用来查询。在/sbin目录下为启动过程中所需要的所需要的里面包括了启动,修复,还原系统所需要的命令。某些服务器软件程序,一般放到/usr/sbin当中。本机自行安装的软件所产生的系统执行文件,放到/usr/local/sbin中。常见的有fsck,ifconfig,mkfs |
/tmp | 一般是用户或者程序暂时存放文件的地方。这个目录是任何人都可以能够存取的,所以需要定期清理一下 |
/var |
在系统运行后会占用很多硬盘的容量,/var目录主要针对经常性变动的文件,包括缓存cache,日志文件和某些软件运行时产生的文件,包括程序文件(lock file 和run file)或者sql数据库的文件。 /var/lock 某些文件资源一次只能被一个应用程序所使用,如果同时有两个程序使用该设备时,就可能产生一些错误的情况,需要给设备上锁, /var/log 日志文件存放的目录,比较重要的文件有/var/log/message |
/usr |
usr是unix software resource的缩写,操作系统软件资源存放的目录 /usr/bin 所有一般用户能够使用的目录都存放在这个地方, /usr/lib 与/lib的功能相同,/lib就是链接到此目录中 /usr/local 系统管理员在本机上下载的软件建议安装在此目录下 /usr/sbin 非系统运行所需要的系统命令,最常见的是某些软件服务器的服务命令。基本功能与/sbin差不多,最常见的/sbin就是链接到此目录下 /usr/share主要放置只读的数据文件和从apt-install 上下载的文件 /usr/games 游戏比较相关的数据放置 /usr/include C++/C等程序语言的头文件会在者其中 /usr/libexe某些不被用户常用的执行执行文件或者脚本,都会放置在此目录中 |
/root | 系统管理员的目录,如果进入到单人维护模式而仅挂载根目录时,该目录就能够拥有root目录。 |
/proc | 该目录是一个虚拟文件系统,其中放置的数据都是在内存中,例如系统内核,进程信息和外接设备的状态和网络状态等。比较重要的文件有:/proc/cpuinfo ,/proc/dma, /proc/net/等 |
/sys | 这个目录与/proc非常相似,也是个虚拟的文件系统,主要是记录内核与系统硬件信息相关的内容,包括已经加载的内核模块与内核检测到的硬件设备信息,这个目录同样也不占用硬盘容量。 |
## Linux文件与目录管理
- 目录相关操作
. 表示此层目录
… 表示上一层目录
- 表示前一个工作目录
~ 代表目前使用者所在的家目录
~account 代表account 这个使用者的家目录(account是这个账号的名字)
cd : 切换目录
pwd: 显示当前目录
mkdir: 建立一个新目录
rmdir :删除一个空目录
- Linux下的环境变量
shell在开始执行的时候会定义一些与系统工作环境相关的变量,用户也可重新定义这些变量
常用的shell环境变量有:
- HOME:用于保存主目录的完整路径名
- PATH : 用于保存用冒号分隔的目录路径名,shell会按照PATH变量中给出的顺序去搜索这些目录,找到第一个与命令名称一致的可执行文件将会被执行。
- SHELL 当前用户使用的shell
- UID:当前用户的UID
- LOGNAME:当前用户的登陆名
- HOSTNAME: 主机名称
使用echo可以查看当前的环境变量 echo PATH<br/>如果想要添加一个路径到PATH<br />如果想要添加一个路径到PATH<br/>如果想要添加一个路径到PATH中,例如将 /usr/bin/ 路径添加到变量中 PATH=$PATH:/usr/bin/
- 文件目录管理
- 文件与目录查看命令
ls
的用法:
-a : 全部文件,连同隐藏文件
- 文件与目录查看命令
-A : 全部的文件,连同隐藏文件,但是不包括 . 与 … 者两个目录
-d : 仅列出目录本身,而不是列出目录内的文件数据
-f : 直接列出结果,而不进行排序
-l : 详细信息显示,包含文件的属性和权限等
-h : 将文件容量以人类较为易读的方式(kb GB等)列出来 ls -lh 或者 ll -h
,ll 为ls -h 的简写
-i : 列出inode号码
-S : 以文件容量大小排序,而不是以文件名排序 ll -S
-t :文件按照时间排序
-R:能够连同子目录一起列出来,该目录下的所有文件都会显示出来
–color=never :不要依据文件特性给予颜色显示
–color=always :显示颜色
–color=auto :让系统自行依据设置来判断是否给予颜色支持
–full-time :以完整的时间模式输出
- 复制命令的用法
cp
cp [-adfilprsu] 源文件(source) 目标文件(destination)
-d :若源文件为链接文件属性(link file),则复制链接文件属性而不是文件本身
-f :为强制的意思
-i :如果目标文件存在,在覆盖时会先询问操作的进行
-l :进行硬链接的链接文件建立,而非复制文件本身
-p :连同文件的属性一起复制过去,而非使用默认属性
-r :递归复制,用于目录的复制操作
-u :dest 比 source旧才更新dest
-a :除了-p的相关属性外,还加入了如SELinux属性。
- rm删除文件或者目录
rm [-fir] 文件或目录
-f:强制
-i :交互模式,删除前会询问使用者是否操作
-r:递归删除,最常用于目录的删除
- mv [-fiu] source destination
-f : force强制的意思,如果目标文件已经存在,不会询问而直接覆盖。
-i : 如果目标文件存在,就会询问是否覆盖
-u: 如果目标文件存在,且source比较新,才会更新
basename
可以获得一个目录中的文件名basename /etc/sysconfig/network
会得到network
dirname
可以获得目录名dirname /etc/sysconfig/network
得到/etc/sysconfig
文件内容查看
- cat 从第一行开始显示文件内容
- tac 从最后一行开始显示文件内容
- nl 显示文件内容时,还显示文件中的行号
- more 一页一页的显示文件的内容
- less 可以网前翻页
- head 只看前面几行
- tail 只看后面几行
- od 以二进制方式读取文件内容
命令与文件查找
which
查找可执行文件
which默认查找的是PATH内所设置的目录
whereis
查找某些特定文件下的目录locate
locate [-ir] keyword 例如:locate -l 5 passwd
find
查找命令,可调用到磁盘读写find [PATH] [option] [action]
如果查找文件名是pass的文件夹 find / -name "pass"
- Linux文件系统的运行
当系统加载一个文件到内存中后,如果该文件没有被修改过,则在内存区段的文件数据会被设置为clean
。但是内存中的文件数据被更改了,此时内存中的数据会被设置成dirty
,此时的所有的操作都还在内存中执行,并没有写入磁盘中,系统会不定时的将内存中设置为dirty
的数据写回磁盘。
将文件系统与目录树结合的操作称为挂载,挂载点一定是目录,该目录是文件系统的入口。
- 文件系统的简单操作
- df :列出文件系统的整体磁盘的使用量
df [-ahikHTm] [目录或者文件名]
-a :列出所有的文件系统,包括系统特有的/proc等文件系统
-k :以KBytes的容量显示各文件系统
-m:以MBytes的容量显示各文件系统
-h: 以GB或者MB或者KB显示
-i :不用磁盘容量,而是以inode的数量来表示
- du :查看文件系统的磁盘使用量,用在查看目录所占的磁盘空间
-a :列出所有文件与目录文件,因为默认仅统计目录下的文件量
-h :以人们较为易读的格式展现
-k :以KBytes列出容量显示
-m:以MBytes列出容量显示
-s :仅显示出文件夹的总量大小
-S 不包括子目录下的统计,与-s有些差别
- 硬链接和符号链接
在Linux下的链接方式有两种,一种是类似于Windows的快捷方式功能的文件,可以快速的链接到目标文件或者目录;另一种是通过文件系统的inode链接来产生新的文件名,而不是产生新文件,这种则称为硬链接。
硬链接:硬式链接或实际链接。每个文件都会占有一个inode,文件内容由inode的记录来指向。读取文件必须要经过目录记录的文件名来指向到正确的inode号码才能读取。多个文件名对应到同一个inode号码,这就是硬链接。硬链接只是在某个目录下新增一条文件名链接到某inode号码的关联记录。
硬链接最好不要链接目录,如果使用硬链接到目录时,链接的数据需要连同被链接目录下面的所有数据都建立链接。
符号链接:符号链接就是一个独立的文件,这个文件会让数据的读取指向他链接的那个文件的文件名。所以当源文件被删除之后,符号链接会打不开了。
在本目录创建一个硬链接 : ln /etc/crontab .
在本目录创建一个符号链接:ln -s /etc/crontab crontab2 (-s 选项是创建软连接)
文件压缩
在Linux中,压缩文件的扩展名大多是 .tar、.tar.gz、.tgz、.gz、.bz2、.xz。
常见的几个压缩文件扩展名:
*.Z | compress程序压缩的文件 |
---|---|
*.zip | zip程序压缩的文件 |
*.gz | gzip程序压缩的文件 |
*.bz2 | bzip2程序压缩的文件 |
*.xz | xz程序压缩的文件 |
*.tar | tar程序打包的文件,没有压缩过 |
*.tar.gz | tar程序打包的文件,并经过gzip压缩 |
*.tar.bz2 | tar程序打包的文件,并经过bzip2的压缩 |
*.tar.xz | tar程序打包的文件,并经过xz的压缩 |
- tar打包命令
tar [-z | -j | -J] [cv] [-f 待建立的新的文件名] filename… <==打包与压缩
tar [-z | -j | -J] [tv] [-f 既有的tar文件名] <==查看文件名
tar [-z | -j | -J] [xv] [-f 既有的tar文件名] [-C 目录] <==解压缩
选项与参数:
-c :建立打包文件,可以搭配 -v 来查看过程中被打包的文件名
-v :在压缩/解压缩的过程中,将正在处理的文件名显示出来
-t :查看打包文件的内容有哪些文件名
-x :解压缩或者解包的功能
-z :通过gzip的支持进行压缩/解压缩:此时的文件名最好为 *.tar.gz;
-j :通过 bzip2的支持进行压缩/解压缩:此时文件名最好为 *.tar.bz2;
-J :通过 xz的支持进行压缩/解压缩:此时的文件名为 *.tar.xz。
-p :保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件
-P :保留绝对路径
–exclude=FILE :在压缩的过程中,不要将FILE打包。
VIM编辑器
此章可在网络上练习 https://www.lanqiao.cn/courses/2/
- 6种基本模式和5种派生模式
- 普通模式:使用编辑器命令,如移动光标、删除文本等。
- 插入模式:在这个模式中,使用按键向文本缓冲中插入文本。使用ESC回到普通模式。
- 可视模式
- 选择模式
- 命令行模式
- EX模式
在插入和命令行模式下,需要ESC或者CTRL+[ 即可进入普通模式。在普通模式中按 i
或者 a
都可以进入插入模式。在普通模式下按:
进入到命令行模式。命令行模式中输入wq
后回车保存退出vim。
在普通模式下输入 :e <filepath>
即可打开文件
普通模式下,使用方向键或者h,j,k,l
可以移动游标。
h左,l 右 , j 下,k 上,w 移动到下一个单词, b移动到上一个单词。
插入模式下的命令:
i | 在当前光标处插入 |
---|---|
I | 在行首插入 |
A | 在行末插入 |
a | 在光标后插入编辑 |
o | 在当前行后插入一个新行 |
O | 在当前行前插入一个新行 |
在普通模式下,输入 :w <filename>
可以将文档另存为其他文件名或者存到其他路径下
从命令行模式下退出vim
:q! | 强制退出不保存 |
---|---|
:q | 退出 |
:wq! | 强制退出并保存 |
:w<文件路径> | 另存为 |
:saveas 文件路径 | 另存为 |
:x | 保存并退出 |
:wq | 保存并退出 |
Shift+zz | 保存并退出 |
在普通模式下删除vim中的信息
x | 删除游标所在的字符 |
---|---|
X | 删除游标所在的前一个字符 |
Delete | 同 x |
dd | 删除整行 |
d$或D | 删除至行尾 |
d^ | 删除至行首 |
dG | 删除到文档结尾处 |
d1G | 删除文档首部 |
2dd | 一次删除2行 |
重复命令上次命令:在普通模式下输入x
,删除第一个字符,输入.
(小数点)会再次删除一个字符,除此之外也可以重复dd
的删除操作。在普通模式下输入dd
,删除第一个字符,输入.
(小数点)会再次删除一行。
执行制定次数相同的命令: 进入普通模式输入N<command>
,N表示重复后面的次数。输入10x
,删除10个连续字符。输入3dd
,将会删除3行文本。
在普通模式下,还可以使用dw
或者daw
删除一个单词,所以dnw
表示可以删除n
个单词。(n可以替换为相应数字)
游标快速跳转: 分为行间跳转和行内跳转
行间跳转:
nG/ngg | 游标移动到第n行(如果没有行号,可以到命令模式,输入:set nu 显示行号) |
---|---|
gg | 游标移动到第一行 |
G | 到最后一行 |
小技巧:在完成依次跳转之后,可以使用Ctrl+o
快速回到上一次(跳转前)光标所在位置。
行内跳转:
w | 到第一个单词开头 |
---|---|
e | 到当前单词结尾 |
b | 到前一个单词的开头 |
ge | 到前一个单词的结尾 |
0或^ | 到行头 |
$ | 到行尾 |
f<字母> | 向后搜索<字母>并跳转到第一个匹配的位置 |
F<字母> | 向前搜索<字母>并跳转到第一个匹配位置 |
复制和粘贴文本:
- 普通模式中使用
y
复制 - 普通模式中使用
yy
复制游标所在的整行(3yy表示复制3行) - 在普通模式中,
y^
复制至行首,或y0
y$
复制至行尾yw
复制一个单词y2w
复制两个单词yG
复制到文末y1G
复制到本文开头- 在普通模式下使用
p
粘贴p(小写)表示粘贴到光标后
,P(大写)表示粘贴到光标前
替换和撤销命令:
r+<待替换的字母> | 将游标所在的字母替换为指定字母 |
---|---|
R |
连续替换,直到按下Esc
|
cc | 替换整行,即删除游标所在的行,并进入插入模式。 |
cw | 替换一个单词,即删除一个单词,并进入插入模式 |
C(大写) | 替换游标以后至末尾 |
~ | 反转游标所在字母的大小写 |
{n}u | 撤销一次或者n次操作 |
U(大写) | 撤销当前行所有的修改 |
Ctrl+r | 即撤销undo的操作 |
使用命令进行快速缩进的操作:
使用>>可以整行向右缩进,使用<<整行向左回退
在命令行模式下可以对shiftwidth
的值进行设置,控制缩进和回退的字符数。
:set shiftwidth?
获得目前的设定值
:set shiftwidth=10
设置缩进为10个字符
在命令行模式下,使用:ce
可以使文本内容居中,输入:ri
可以使文本内容靠右,输入:le
使文本内容靠左
查找:
在普通模式下输入/
然后输入需要查找的字符串,按回车就会进行查找。?
和/
功能相同,但是?
是向上查找,/
是向下查找。进入查找之后,输入n
可以继续查找下一个内容,输入N
可以查找上一个内容。在命令行模式下,输入noh
然后回车可以取消搜索。
高级查找:
输入\*
寻找游标所在处的单词
输入\#
与\*
相同,但是是向前查找
多文件编辑:
在普通模式下,输入v
小写,进入字符选择模式,可以移动光标,shift+v
行选择模式。在可视模式下,输入d
删除选取区域内容,输入y
复制选取区域内容。
视窗模式:
使用Ctrl+w
可以打开一个新的视窗编辑文件。:sp 1.txt
打开新的水平分屏视窗来编辑1.txt,输入:vsp 2.txt
来打开新的垂直分屏视窗来编辑2.txt。
**创建加密文档: **
vim -x file1
输入您的密码,确认密码后,在下一次打开时,vim就会要求输入密码
执行vim外部的命令:
:!ls
显示当前目录的内容
:!rm filename
删除名为filename的文件
:w filename
可以将vim中正在编辑的文件另存为filename文件
查看帮助:
按F1打开vim自己的预设的帮助文档
输入:h shiftwidth
打开名为shiftwidth的帮助文档
输入:ver
显示版本和参数
功能设定:
可以修改vim的配置文件~/.vimrc
对vim的配置进行修改。配置文件也在/etc/vim/vimrc中
输入:set
显示所有修改过的值
:set all
显示所有设定的值
命令行模式下输入 :set autoindent(ai)
设置自动缩进
命令行模式下输入 :set autowrite(aw)
设置自动存档,默认未打开
命令行模式下输入 :set background=dark
或 light,设置背景风格
命令行模式下输入 :set backup(bk)
设置自动备份,默认未打开
命令行模式下输入 :set cindent(cin)
设置 C 语言风格缩进
Shell
在输入shell命令时,如果遇到命令太长,可以在可以使用反斜杠\
来转义。
ctrl+u/ctrl+k 分别从光标处向前删除命令串和向后删除命令串
ctrl+a/ctrl+e分别让光标移动到整个命令串的最前面或者最后面
Shell中的变量设置规则:
- 变量与变量内容以一个等号[=]来连接
myname=VBird
- 等号两边不能直接接空格,如下是错误
myname = VBird 或者 myname=VBird Tsai
- 变量名称只能是英文字母与数字,但是开头字符不能是数字,如下是错误:
2myname=VBird
- 变量内容若有空格可以使用双引号 `"`或者`'`将变量内容结合起来,但是`双引号`内的特殊字符如`$`等,可以保有原本的特性,如下所示:
var=“lang is $LANG” 则echo $var 可得lang is zh_CN.UTF-8
单引号
内的特殊字符则仅为一般字符(纯文本),如下所示:
var=‘lang is $LANG’ 则echo $var 可得 lang is KaTeX parse error: Undefined control sequence: \】 at position 18: …NG<br />可以用转义符【\̲】̲将特殊符号(如[Enter]、、\、空格、'等)变成一般字符。
- 如果该变量为扩增变量内容时,则可用"$变量名称"或${变量}累加内容,如PATH=${PATH}:/home/bin- 若该变量需要在其他子程序执行,则需要以export来使变量变成环境变量:export PATH- 通常大写字符为系统默认变量,自行设置变量可以使用小写字符。- 取消变量的方法为使用unset
export用于设置或者显示环境变量
在shell中有些默认的组合变量:
Ctrl + C 终止目前的命令 Ctrl + D 输入结束 Ctrl + M 就是回车
Ctrl + S 暂停屏幕的输出 Ctrl + Q 恢复屏幕的输出 Ctrl + U 在提示字符下,将整列命令删除
Ctrl + Z 暂停目前的命令
标准输入(stdin):代码为0,使用< 或者 <<
标准输出(stdout):代码为1,使用>或者>>
标准错误输出(stderr):代码为2,使用2> 或2>>
Shell脚本的编写要注意以下事项:
1. 命令是从上往下、从左往右分析和执行的。1. 命令的执行过程中:命令、选项和参数间的多个空格都会被忽略掉。1. 空白行也会被忽略掉,并且[TAB]按键所产生的空白同样视为空格键。1. 如果读到一个Enter符号(CR),就尝试开始执行该行的命令。1. 如果一行的命令太多,则可以使用【\[Enter]】来扩展到下一行。1. 【#】为注释,任何加在 # 后的数据间全部视为注释文字而被忽略。
假设shell程序的文件名是 /home/leo/shell.sh ,那这个文件如何执行
- 直接命令执行:shell.sh文件必须具备可读与可执行(rx)的权限,然后:- 绝对路径:使用 /home/leo/shell.sh- 相对路径:假设工作目录在/home/leo下,则使用 ./shell.sh- 变量【PATH】功能:将shell.sh放在PATH指定的目录内,例如:~/bin/- 以 bash 程序来执行:通过【bash shell.sh】或者【sh shell.sh】来执行。
在写脚本时,良好的脚本编程习惯:
- 脚本的功能- 脚本的版本信息- 脚本的作者与联络方式- 脚本的版权声明方式- 脚本的History- 脚本内较为特殊的命令,使用【绝对路径】的方式来执行- 脚本运行时需要的环境变量预先声明与设置
正则表达式
正则表达式就是处理字符串的方法,它以行为单位来进行字符串的处理操作,正则表达式通过一些特殊的符号的辅助,可以让用户轻易的完成【查找、删除、替换】某特定字符串的处理过程。
grep
的用法:grep
[-acinv] [–color=auto]
-a:将二进制文件以文本的方式查询数据
-c:计算找到‘查找字符的次数’
-i :忽略大小写的不同
-n:顺便打出行号
-v:反向选择,也就是显示出没有‘查找字符’内容的那一行
一些特殊符号和代表意义:
[:alnum:] 代表英文大小写字符和数字,也就是09,AZ,a~z
[:alpha:] 代表任何英文大小写字符,也就是AZ,az
[:blank:] 代表空格键与[TAB]按键两者
[:cntrl:] 代表键盘上面的控制按键,包括CR、LF、Tab、Del
[:digit:] 代表数字,0~9
[:graph:] 除了空格符以外的其他所有按键
[:lower:] 代表小写字符,即a~z
[:print:] 代表任何可以被打印出来的字符
[:punct:] 代表标点符号,即: " ’ ? ! ; : # $
[:upper:] 代表大写字符,即A~Z
[:space:] 任何会产生空白的字符
[:xdigit:] 代表十六进制的数字类型,因此包括09,AF,a-f的数字与字符
awk使用方法见书(p.380)
su为切换用户,sudo为超级权限
make和configure
执行make时,make会当前目录下查找Makefile这个文本文件,而Makefil里面记录了源代码如何编译的详细信息。make会自动判断源代码是否变动,而自动更新执行文件。
通常软件开发商会写一个检测程序来检测用户的操作环境,以及该操作环境是否有软件开发商所需要的其他功能,该检测程序检测完毕后,就会主动的建立这个Makefile的规则文件,这个检测程序的文件名为configure或者config。
一般检测程序会执行下面这些内容:
- 是否有合适的编译器编译本软件的程序代码
- 是否存在本软件所需要的函数库,或者其他需要的依赖软件
- 操作系统平台是否适合本软件,包括Linux内核版本
- 内核的头文件是否存在
Linux私房菜学习笔记相关推荐
- 鸟哥的linux私房菜运维篇,鸟哥的Linux私房菜学习笔记之SAMBA
鸟哥的Linux私房菜学习笔记之SAMBA 发布时间:2020-06-24 01:44:50 来源:51CTO 阅读:185 作者:tomshen NFS仅能让Unix/linux之间共享数据,CIF ...
- 第十一章 认识与学习BASH【鸟哥linux私房菜学习笔记】
认识与学习BASH 一.认识bash这个shell (一)bash shell 的功能 1.history指令 默认的命令记忆功能为1000条命令.本次登录过程中使用的命令保存在内存中,之前登录的命令 ...
- 鸟哥的Linux私房菜学习笔记(2)登录与在线求助
以管理员身份运行VMware Player,点击之前安装好的CentOS 7版本的虚拟机,会出现以下界面: 这是我建立的一般账户,ROOT由于身份比较特殊,所以没有被列出来. 点击 "未 ...
- 鸟哥linux群,【鸟哥的linux私房菜-学习笔记】linux的帐号与群组
linux的帐号与群组 使用者标识符: UID 与 GID ID 与账号的对应就在 /etc/passwd 当中: 计算机只认得ID(即数字),并不能区别账号: 每个登陆的使用者至少都会取得两个 ID ...
- u盘 linux centos 5.3,鸟哥linux私房菜学习笔记,U盘安装centos5.3不能正常进入图形界面的问题...
前面说过自己成功引导了centos系统,现在进入启动界面,首次进入会进行相关设置,按照步骤一步一步完成,取消完光盘安装,点击下一步,就进入下面这个界面,没有登录框...没错!怎么蓝屏了,这可是linu ...
- 鸟哥的linux私房菜学习笔记《二十》bash简介
shell的功能: 提供用户操作系统的一个接口. 系统上合法的shell要写在/etc/shells这个文件,因为系统某些服务在运行过程中会去检查用户能够使用的shells,而这些shell的查询就是 ...
- Linux管道命令——《鸟哥的Linux私房菜》笔记
Linux管道命令--<鸟哥的Linux私房菜>笔记 0 前言 看完书之后,总感觉不记录下来的话,很快就会忘了,然后又需要重新到处翻书找资料,所以还是把内容记录下来,方便以后复习.本文大部 ...
- 鸟哥的Linux私房菜学习心得-基础操作
<鸟哥的Linux私房菜>特别适合新手作为Linux的入门教材,即使没有计算机知识基础也能学明白,鸟哥算是很用心了.半个月来学习了鸟哥主页教程的基础篇,感觉良好,因此特意写下学习的感受,以 ...
- 鸟哥 Linux 私房菜学习心得(一)
一.鸟哥的私房菜 http://cn.linux.vbird.org 有些地方空格不是很明显,总之给自己个尝试的机会吧!万一发现什么呢! 二.root@kali:~# 与root@kali:/# 的 ...
最新文章
- git 裁切_裁切参数设计(DOE试验)
- 64.JPA命名策略【从零开始学Spring Boot】
- MySQL第12天:MySQL索引优化分析之性能优化案例实践
- 使用 CSS3 Flexible Boxes 布局
- Hibernate Annotation中英文文档链接下载 (Hibernate 注解)
- spring拦截器覆盖_Spring中使用Interceptor拦截器
- 放肆地使用UIBezierPath和CAShapeLayer画各种图形
- mysql可以存储标点么_MySQL查询(进阶)(每个标点都是重点)
- 超级计算机阿波罗11,阿波罗11号制导计算机中指令模块和登月模块原始代码已在 GitHub 上开源...
- LATEX--页边距设置
- 集成/信息系统项目管理师学习笔记共享 (1)
- 你不可不知的《哈利波特》秘密之卑鄙的海尔波
- Python+Django+sqlite3实现基于内容的音乐推荐系统
- int型的取值范围是?
- 超全智能 电子设备cc0高清摄影图片素材网站整理
- 云图科技,长沙VR全景打造旅游业新视角
- TP5后端,VUE前端请求聚合数据新闻接口
- siliconc8051f Silicon C8051F编程器使用出错解决办法
- 找到年龄最大的人,并输出
- 3des加密 java php_php 3des加密 兼容JAVA 多么痛的领悟呀