由于这部分内容杂而多,我们只挑重点的讲。
第一次写这么长的文章,请大家多多点赞支持哦!
由于篇幅较长全是手打的,转载请加上原处。感谢!
Linux是自由软件的代表,同时也是一个操作系统,运行在该系统上的应用程序几乎都是自由软件,linux是免费的,源代码开放的,编写它的目的是建立不受任何商业化软件版权制约的,全世界都能自由使用的UNIX兼容产品。
简而言之,就是用户具有运行,复制,改进软件的自由。
在linux中最重要的部分就是“内核”(kernel),是linux的主题,负责控制硬件设备,文件系统,进程调度以及其他工作,但是并不包括应用程序,然而一个称职的操作系统,除了有一个强大的内核功能外,其他的应用程序也是必不可少的组件,否则空有一个好的架构也无法发挥实际功效。
所有的内核都源自Linux Torvalds 的Linux内核,无论版本名称和发行商是什么,就是因为他们有相同的内核,所以都属于Linux大家庭,差异只在于包含的软件种类和数量不同而已。Linux的版本号分为两部分:内核版本和发行版本。
Linux的内核版本表示方法发生几次变化,在1.0~2.6版本之间由3组数字组成:r.x.y。
r:目前发布的Kernel主版本。
x:偶数是稳定版本,奇数是开发中的版本。
y:错误修补次数。
一般来说,x位为偶数的版本更加稳定,如2.6.18;x为奇数一般加入了一些新内容,是测试版本,如2.7.22.
在2.6~3.0版本由4组数字构成:r.x.y.z。前三位意义不变,z代表一些Bug修复,安全更新,添加新特性和驱动的次数。
3.0版本之后是”r.x.y”格式,x随着新版本的发布而增加,y代表一下Bug修复、安全更新、新特性和驱动次数。这种表示方式不再使用偶数代表稳定版、奇数代表开发板的命名方式。
CentOS 7 系统使用的内核版本是3.10.0。
由于LInux免费的内核,以及允许用户或厂商自行搭配其他应用程序的特性,已经有几百种组合了。常见的发行版本有 Red Hat Linux,Redflag Linux,Mandrake Linux和Ubuntu Linux等。
Centos是一个基于Red Hat Linux提供的可自由使用源代码的企业级Linux发行版本。
网络上有很多博主写教程,我就不多赘述了。
下面介绍一些常用命令,这些命令只输入命令名,可以不加选项或参数,按Enter键就可以正常执行。
显示当前工作的全路径名。
[serendipity@localhost ~]$ pwd
/home/serendipity
[serendipity@localhost ~]$ date
2023年 11月 27日 星期一 15:12:27 CST
[serendipity@localhost ~]$ who
serendipity :0 2023-11-27 14:16 (:0)
serendipity pts/0 2023-11-27 15:10 (:0)
指定日期
uname命令查看当前操作系统的信息,它可以带多个选项。常用选项有以下几个。
-r:显示发行版本号
-m:显示所用机器类型
-i:显示所需硬件平台
-v:显示操作系统版本、
[serendipity@localhost ~]$ uname
Linux
[serendipity@localhost ~]$ uname -r
3.10.0-1160.el7.x86_64
[serendipity@localhost ~]$ uname -mi
x86_64 x86_64
[serendipity@localhost ~]$ uname -v
#1 SMP Mon Oct 19 16:18:59 UTC 2020
wc命令用来统计给定文件的行数、字数和字符数,其格式为:
wc [-lw] [-c] 文件名
选项含义:l为统计行数,w为统计字数,c为统计字节数;如果没u有给出的文件名,则读取标准输入。
[serendipity@localhost c7]$ wc 1.sh
5 14 102 1.sh #第一个表示行,第二个字数,第三个统计字节数
[serendipity@localhost c7]$ cat 1.sh
#!/bin/bash # 只占一个字数
echo "time:" `date`
echo "path:" `$PATH`
echo "user:" `whoami`
echo "current path:" `pwd`
前提是有该用户,命令格式为:
su [-] [用户名]
选项中的“-" 表示切换时是否切换用户的环境变量 ;如果不带用户名,是指普通用户切换到root用户。
[serendipity@localhost c7]$ su
密码:
[root@localhost c7]# pwd
/home/serendipity/c7
[root@localhost c7]# su - serendipity
上一次登录:一 11月 27 14:16:35 CST 2023:0 上
[serendipity@localhost ~]$ pwd
/home/serendipity
shell命令作为使用 Linux操作系统的最基本之一,用户需要熟练掌握常用的Shell命令,从而高效地管理Linux系统。
命令行中输入的第一个项目必须是一个命令的名称,第二个字是命令的选项或参数,命令行中的每个字必须由空格或Tab隔开,格式如下:
命令名称 [选项] [参数]
选项是一种标志,常用来扩展命令的特性或功能,可有可无。
[serendipity@localhost ~]$ ls
c7 cc 公共 模板 视频 图片 文档 下载 音乐 桌面
[serendipity@localhost ~]$ ls -l
总用量 0
drwxrwxr-x. 2 serendipity serendipity 256 11月 27 17:09 c7
drwxrwxr-x. 2 serendipity serendipity 108 11月 12 11:26 cc
drwxr-xr-x. 2 serendipity serendipity 6 11月 2 20:57 公共
drwxr-xr-x. 2 serendipity serendipity 6 11月 2 20:57 模板
drwxr-xr-x. 2 serendipity serendipity 6 11月 2 20:57 视频
drwxr-xr-x. 2 serendipity serendipity 6 11月 2 20:57 图片
drwxr-xr-x. 2 serendipity serendipity 6 11月 2 20:57 文档
drwxr-xr-x. 2 serendipity serendipity 6 11月 2 20:57 下载
drwxr-xr-x. 2 serendipity serendipity 6 11月 2 20:57 音乐
drwxr-xr-x. 2 serendipity serendipity 6 11月 2 20:57 桌面
上例中,ls为查看文件名称,ls -l列出详细信息。
有时也可以把集中表示不同含义 的选项字母组合在一起对命令发生作用
[serendipity@localhost ~]$ ls -la # 显示当前目录下的全部文件
总用量 40
drwx------. 17 serendipity serendipity 4096 11月 27 17:09 .
drwxr-xr-x. 3 root root 25 11月 2 20:41 ..
-rw-------. 1 serendipity serendipity 1463 11月 11 00:27 .bash_history
-rw-r--r--. 1 serendipity serendipity 18 4月 1 2020 .bash_logout
-rw-r--r--. 1 serendipity serendipity 193 4月 1 2020 .bash_profile
-rw-r--r--. 1 serendipity serendipity 231 4月 1 2020 .bashrc
drwxrwxr-x. 2 serendipity serendipity 256 11月 27 17:09 c7
drwx------. 15 serendipity serendipity 4096 11月 12 12:33 .cache
drwxrwxr-x. 2 serendipity serendipity 108 11月 12 11:26 cc
drwxr-xr-x. 14 serendipity serendipity 4096 11月 10 13:08 .config
drwx------. 3 serendipity serendipity 25 11月 2 20:57 .dbus
-rw-------. 1 serendipity serendipity 16 11月 2 20:57 .esd_auth
-rw-------. 1 serendipity serendipity 1860 11月 27 14:16 .ICEauthority
drwx------. 3 serendipity serendipity 19 11月 2 20:57 .local
drwxr-xr-x. 4 serendipity serendipity 39 11月 2 20:36 .mozilla
-rw-------. 1 serendipity serendipity 613 11月 27 17:09 .viminfo
drwxr-xr-x. 2 serendipity serendipity 6 11月 2 20:57 公共
drwxr-xr-x. 2 serendipity serendipity 6 11月 2 20:57 模板
drwxr-xr-x. 2 serendipity serendipity 6 11月 2 20:57 视频
drwxr-xr-x. 2 serendipity serendipity 6 11月 2 20:57 图片
drwxr-xr-x. 2 serendipity serendipity 6 11月 2 20:57 文档
drwxr-xr-x. 2 serendipity serendipity 6 11月 2 20:57 下载
drwxr-xr-x. 2 serendipity serendipity 6 11月 2 20:57 音乐
drwxr-xr-x. 2 serendipity serendipity 6 11月 2 20:57 桌面
以圆点'.'开头的文件名是隐含文件,必须用带a的选项才能显示。
有一些命令可能会限制参数数目,如cp命令至少i需要两个参数。
cp oldfile newfile
在命令行,选项要先于参数输入。在一个命令中还可以植入多个命令,用分号”;“隔开
[serendipity@localhost ~]$ date;who;pwd
2023年 11月 27日 星期一 17:40:17 CST
serendipity :0 2023-11-27 14:16 (:0)
serendipity pts/0 2023-11-27 15:10 (:0)
/home/serendipity
在线帮助命令man命令,可以查到相应命令的语法结构、主要功能、主要选项说明。另外,部分命令还列举了全称以及此命令操作后所影响的系统文件等信息。
man 命令名
[serendipity@localhost ~]$ man who
ls是内嵌,cd 是外部命令。
(1)NAME:命令名称
(2)SYNOPSIS:语法大纲
(3)DESCRIPTION:描述说明
(4)OPTIONS:选项
最重要的配置文件,也是用户登录最先检查的文件,存放的是系统的环境变量。root用户才能更改。可以使用env来查看当前所有的环境变量。
每个用户的 BASH环境配置文件存在于用户的主目录中,当系统运行/etc/profile后,将读取此文件的内容。此文件定义了USRENAME\BASHENV和PATH等环境变量。
每次运行bash时读取,主要定义了一些终端设置与以及shell提示符。
记录了用户使用的历史命令。
当你忘记一个命令时,打出前几个字符,按一下Tab,如果只有一个匹配命令就会自动补全,多个则显示出来,供用户选择。
[serendipity@localhost ~]$ if
if ifcfg ifconfig ifdown ifenslave ifstat ifup
[serendipity@localhost ~]$ !103 执行本例编号为103的命令
pwd
/home/serendipity
[serendipity@localhost ~]$ history
1 pwd
2 cd ..
3 pwd
4 cd /home
5 ls
6 cd /serendipity
7 cd serendipity
8 pwd
输出重定向’>'(将输入的信息直接写入),'>>'(将输入的信息以追加的方式写入);
输入重定向'<'
将几个命令同时运行,完成复杂的操作
[serendipity@localhost ~]$ cal | wc
8 39 152
Linux桌面系统知识作为系统下的一个应用程序。目前常见的Linux桌面版本有GNOME、KDE和Xfce,他们都是基于X-Windows协议基础的桌面系统。
X-windows系统是一套工作在UNIX计算机上的优良窗口系统。最重要的特征之一是他的结构与设备无关。
X-Windows具有以下主要特征:
(1)X-Windows系统具有网络操作的透明性。
(2)支持许多不同风格的操作界面。
(3)X-Windows系统不是操作系统必需的构成部分。
(4)X-Windows系统现在是开源项目,可以通过网络或者其他途径免费获得源代码。
文件时Linux操作系统处理信息的基本单位。在UNIX/Linux操作系统中的软件部分所有信息(包括硬件信息)都组织成文件的形式进行组织和管理。
文件系统有以下几种含义:
(1)指一种特定的文件格式。例如:Linux的文件系统是ext4或xfs,MSDOS的文件系统时FAT16,而Windows的文件系统是NTFS或FAT32。
(2)指按特定格式进行了”格式化“的一块存储介质。
(3)指操作系统中(通常在内核中)用来管理文件系统以及对文件进行操作的机制及其实现。
(1)根目录(/)。位于Linux文件目录结构的顶层。整个目录结构呈树形,因此也称为目录树。
(2)bin。/bin目录为命令文件目录,也称作二进制目录,包含了二进制可执行文件,如shell解释器。不能包含子目录,/usr/bin中存放了大部分的用户命令。
(3)boot。/boot目录中存放系统的内核文件和引导装载程序文件。
(4)dev。/dev目录也称为设备文件目录,存放连接到计算机上的设备(终端,磁盘驱动器、光驱、网卡等)的对应文件,包括字符设备和块设备。
(5)etc。/etc目录存放系统大部分配置文件和子目录,X-Windows系统问价保存在/ETC/X11子目录中,与网络有关的配置文件保存在/etc/sysconfig子目录中。
(6)home。/home目录中包含系统上各个用户的主目录,子目录名称即为个用户名。
(7)lib。/lib目录下存放了各种编程语言库,有c.c++和FORTRAN语言的库文件。/lib目录下的库映像文件可以用来启动系统并执行一些命令,并且存放了所有重要的库文件,其他的库文件则大部分存放在/usr/lib目录下。/bin/modules包含了可加载的内核模块。
(8)media。系统设置的自动挂接点,支持64位的函式库。
(9)opt。表示可选择的意思,某些都三方应用程序通常安装在这个目录,有些软件包也被安装到这里。
(10)root。系统管理员的主目录。
(11)usr。最大目录之一,存放不经常变化的数据,以及系统下安装的应用程序目录。
(12)mnt。如果想要暂时挂载某些额外的装置,一般可以放置在/mnt文件中。早期,这个目录的作用与/media相同,后来有了/media,这个目录就用来暂时挂载用了。
(13)proc。/proc目录是一个虚拟的文件系统,该目录中的文件是内存中的映像。可以通过查看该目录中的文件获取有关系统文件硬件运行的详细信息。
(14)sbin。保存系统管理员或者root用户的命令文件。/usr/sbin存放了应用软件,/usr/local/sbin存放了通用的根用户权限的命令。
(15)tmp。存放临时文件,会定期删除。
(16)var。该目录及其子目录保存经常变化的内容,如系统日志、邮件文件等。
(17)run。可以用来使用内存仿真。
内核对文件中的数据没有进行结构化,只是作为有序的字节序列把它提交给应用程序。应用程序自己组织和解释这些数据,通常把他们归并为下属类型之一。
[serendipity@localhost ~]$ file .cache #这样可以查找目录下的指定文件
.cache: directory
设备文件文件除了存放在文件节点中的信息外,他们不包含任何数据。系统利用他们来标识各个设备驱动器,内核使用他们与硬件设备通信。
同一目录下,二者不同文件名;不同目录下,被链接的文件名可以和原文件同名,只要对一个目录下的文件修改,就可以完成同名链接文件修改。
[serendipity@localhost ~]$ ls -l
总用量 0
drwxrwxr-x. 2 serendipity serendipity 256 11月 27 17:09 c7
drwxrwxr-x. 2 serendipity serendipity 108 11月 12 11:26 cc
-rw-rw-r--. 1 serendipity serendipity 0 11月 27 18:50 myshell.sh
drwxr-xr-x. 2 serendipity serendipity 6 11月 2 20:57 公共
drwxr-xr-x. 2 serendipity serendipity 6 11月 2 20:57 模板
drwxr-xr-x. 2 serendipity serendipity 6 11月 2 20:57 视频
drwxr-xr-x. 2 serendipity serendipity 6 11月 2 20:57 图片
drwxr-xr-x. 2 serendipity serendipity 6 11月 2 20:57 文档
drwxr-xr-x. 2 serendipity serendipity 6 11月 2 20:57 下载
drwxr-xr-x. 2 serendipity serendipity 6 11月 2 20:57 音乐
drwxr-xr-x. 2 serendipity serendipity 6 11月 2 20:57 桌面
使用ls -l命令列出目录时,输出信息的每一行的第一个字符代表文件类型。其中,‘-’表示普通文件。‘d'表示目录文件,’c'表示目录文件,‘b’表示块设备文件,'l‘表示符号链接文件。
ls -a:显示指定目录下所有子目录与文件,包括隐藏文件
ls -l:以长格式来显示文件的详细信息。每行依次列出的信息是:文件类型与权限、链接数、文件属主、文件属组、文件大小和建立或者最近修改的时间名称。
ls -m:按字母逆序或最早优先的顺序显示输出结果
ls -i:在输出的第一列显示文件的索引节点号
(2) cd命令
cd .. :上移一层目录
cd /home/a:从当前路径移到指定路径
cd: 移到用户主目录下
前面介绍了,就不累述了
cat命令主要功能是显示文件信息,另外利用输入输出重定向可以建立小型文件以及文件链接功能。
cat [选项] 文件名
常见的由-n 选项,用于显示编号
[serendipity@localhost c7]$ cat -n 1.sh
1 echo "time:" `date`
2 echo "path:" `$PATH`
3 echo "user:" `whoami`
4 echo "current path:" `pwd`
cat > 命名的新文件
... #输入信息
+d #存盘并退出
[serendipity@localhost c7]$ cat > 1.txt
echo "hello linux!"
echo `date`
[serendipity@localhost c7]$ cat 1.txt
echo "hello linux!"
echo `date`
cat 文件名1 文件名2 > 新文件名
分屏显示文件内容
cp [选项] 源文件或目录 目标文件或目录
cp file1 file2:将文件1复制成目标文件file2,目标文件得到新生成的创建日期和inode编号
cp ./* Dir1:将当前目录下的所有文件(不包含目录)复制到Dir1目录中
cp -f file1 file2:如果文件file2已经存在,则这个命令覆盖其内容时不先发出提示
cp -p file1 file2:将文件1复制成目标文件file2,目标文件得到原有生成的创建日期和inode编号。注意:需要在同一分区内。
cp -r Dir1 Dir2:将目录dir1整体复制到dir2目录中
mv命令来为文件或目录改名或将文件由一个目录移到另一个目录中。
mv [选项] 源文件或目录 目标文件或目录
mv file1 file2 :将file1变成file2,如果同一卷,inode号不变
mv file* Dir1 :将以file开头命名的多个文件移到一个目录中
mv -f file1 file2:如果2已经存在,则覆盖时不发出提示
为防止用户用mv命令破坏另一个命令,使用mv命令移动文件时,系统默认先发出提示。
删除文件与目录。如果没有-r选项,rm不会删除目录。使用时小心,删除后不可恢复。
rm [选项] 文件名
rm file1:删除file1文件,系统默认要求确认
rm -f file1:如存在,执行时不发出提示确认
rm -r dir1:递归删除dir1目录文件。这个命令需要确认;如不想确认可以使用-rf选项
可以在指定文件中检索出匹配关键字的信息内容,在软件包安装检索中经常用到。在不打开文件的前提下,搜索文件的字符串。
grep [选项] 字符串[文件]
-I: 忽略字符大小写差别
-n :在行首增加行号
-v:过滤检索
[serendipity@localhost c7]$ cat /etc/logrotate.conf | grep -v ^$|grep -v ^#
weekly
rotate 4
create
dateext
include /etc/logrotate.d
/var/log/wtmp {
monthly
create 0664 root utmp
minsize 1M
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}
对文件进行排序与合并
sort [选项] [文件列表]
sort file1:对file1文件按每行第一个字符进行排序输出
sort file1 file2:对file1和file2两个文件和起来进行排序并输出
sort -r file1:对file1文件按每行第一个字符进行反向排序
sort -r -o outf1 file1 :对file1文件按每行第一个字符串进行反向排序,并把结果存在outf1中
sort -n file1:对file1文件按第一个字段进行数值排序
sort -k 3 file1:对file1文件按每行以第3个字段为关键字进行排序
sort -n -k 3 file1:对file1文件按每行以第3个字段进行数值排序
[serendipity@localhost c7]$ ls -l|sort -n -r -k 5
-rw-rw-r--. 1 serendipity serendipity 511 11月 12 12:32 15.sh
-rw-rw-r--. 1 serendipity serendipity 399 11月 17 13:43 14.sh
-rw-rw-r--. 1 serendipity serendipity 268 11月 12 11:50 7.sh
-rw-rw-r--. 1 serendipity serendipity 190 11月 12 13:08 12.sh
-rw-rw-r--. 1 serendipity serendipity 133 11月 10 14:53 5.sh
-rw-rw-r--. 1 serendipity serendipity 129 11月 12 11:54 8.sh
-rw-rw-r--. 1 serendipity serendipity 125 11月 10 14:35 2.sh
-rw-rw-r--. 1 serendipity serendipity 116 11月 12 11:56 9.sh
-rw-rw-r--. 1 serendipity serendipity 112 11月 12 12:12 13.sh
-rw-rw-r--. 1 serendipity serendipity 96 11月 12 11:59 10.sh
-rw-rw-r--. 1 serendipity serendipity 92 11月 12 11:59 files.txt
-rw-rw-r--. 1 serendipity serendipity 90 11月 27 17:09 1.sh
-rw-rw-r--. 1 serendipity serendipity 85 11月 12 12:01 11.sh
-rw-rw-r--. 1 serendipity serendipity 66 11月 10 14:45 3.sh
-rw-rw-r--. 1 serendipity serendipity 57 11月 10 14:58 6.sh
-rw-rw-r--. 1 serendipity serendipity 50 11月 10 14:47 4.sh
总用量 64
-rw-rw-r--. 1 serendipity serendipity 0 11月 12 12:36 =2
-rw-rw-r--. 1 serendipity serendipity 0 11月 12 12:30 =4
-rw-rw-r--. 1 serendipity serendipity 0 11月 12 12:30 =
find [路径] [表达式]
find / -name test:从根目录查找名称为test文件或目录
find /var -name *.sh :在/var目录下查找所有以sh为拓展名的文件
find /home -user root :在/home目录下查找宿主为root用户的文件
find /home -user root -a -name *.sh:-a连接两个不同的条件(两个条件必须同时满足)
find /tmp -perm 755:查找在/tmp目录下 权限时755的文件
find /tmp -perm -222 :查找所有类别用户都满足写权限的文件,即777-222=555
find / -type d -a -atime +3:在根目录下查找3天之内没有访问的目录
find /tmp -size +2M:查找在/tmp目录下大于2MB的文件
mkdir [选项] [目录名]
不带选项时对于普通用户创建的目录权限默认为755.
mkdir Dir1 Dir2:同时创建Dir1和Dir2两个目录
mkdir -p Dir1/Dir2:递归生成两个目录
用于删除空目录,必须是空的。如果想要删除,就用rm -r Dir1。
rmdir [选项] [目录名]
-p:递归删除目录,若子目录删除后其父目录也为空,也一并删除
每个文件或者目录都有他的所有者,即属主。默认情况下,创建者就是属主,属主对文件有特别的权限。用户可以通过chown改变文件属主。
chown [选项] [所有者] 【:【组】】 文件列表
所有者或组可以是名称,也可以是UID、GID,但必须是系统已经存在的;文件列表的多个文件使用空格隔开。以上格式有两种含义。
-rw-rw-r--. 1 serendipity serendipity 92 11月 12 11:59 files.txt
[root@localhost c7]# chown root files.txt
[root@localhost c7]# ll
总用量 64
-rw-rw-r--. 1 serendipity serendipity 0 11月 12 12:30 =
-rw-rw-r--. 1 serendipity serendipity 96 11月 12 11:59 10.sh
-rw-rw-r--. 1 serendipity serendipity 85 11月 12 12:01 11.sh
-rw-rw-r--. 1 serendipity serendipity 190 11月 12 13:08 12.sh
-rw-rw-r--. 1 serendipity serendipity 112 11月 12 12:12 13.sh
-rw-rw-r--. 1 serendipity serendipity 399 11月 17 13:43 14.sh
-rw-rw-r--. 1 serendipity serendipity 511 11月 12 12:32 15.sh
-rw-rw-r--. 1 serendipity serendipity 90 11月 27 17:09 1.sh
-rw-rw-r--. 1 serendipity serendipity 0 11月 12 12:36 =2
-rw-rw-r--. 1 serendipity serendipity 125 11月 10 14:35 2.sh
-rw-rw-r--. 1 serendipity serendipity 66 11月 10 14:45 3.sh
-rw-rw-r--. 1 serendipity serendipity 0 11月 12 12:30 =4
-rw-rw-r--. 1 serendipity serendipity 50 11月 10 14:47 4.sh
-rw-rw-r--. 1 serendipity serendipity 133 11月 10 14:53 5.sh
-rw-rw-r--. 1 serendipity serendipity 57 11月 10 14:58 6.sh
-rw-rw-r--. 1 serendipity serendipity 268 11月 12 11:50 7.sh
-rw-rw-r--. 1 serendipity serendipity 129 11月 12 11:54 8.sh
-rw-rw-r--. 1 serendipity serendipity 116 11月 12 11:56 9.sh
-rw-rw-r--. 1 root serendipity 92 11月 12 11:59 files.txt
文件同时属于某个特定的组,被称为属组。
[root@localhost c7]# chown root:root files.txt #属组和属主都改
[root@localhost c7]# ll
总用量 64
-rw-rw-r--. 1 serendipity serendipity 0 11月 12 12:30 =
-rw-rw-r--. 1 serendipity serendipity 96 11月 12 11:59 10.sh
-rw-rw-r--. 1 serendipity serendipity 85 11月 12 12:01 11.sh
-rw-rw-r--. 1 serendipity serendipity 190 11月 12 13:08 12.sh
-rw-rw-r--. 1 serendipity serendipity 112 11月 12 12:12 13.sh
-rw-rw-r--. 1 serendipity serendipity 399 11月 17 13:43 14.sh
-rw-rw-r--. 1 serendipity serendipity 511 11月 12 12:32 15.sh
-rw-rw-r--. 1 serendipity serendipity 90 11月 27 17:09 1.sh
-rw-rw-r--. 1 serendipity serendipity 0 11月 12 12:36 =2
-rw-rw-r--. 1 serendipity serendipity 125 11月 10 14:35 2.sh
-rw-rw-r--. 1 serendipity serendipity 66 11月 10 14:45 3.sh
-rw-rw-r--. 1 serendipity serendipity 0 11月 12 12:30 =4
-rw-rw-r--. 1 serendipity serendipity 50 11月 10 14:47 4.sh
-rw-rw-r--. 1 serendipity serendipity 133 11月 10 14:53 5.sh
-rw-rw-r--. 1 serendipity serendipity 57 11月 10 14:58 6.sh
-rw-rw-r--. 1 serendipity serendipity 268 11月 12 11:50 7.sh
-rw-rw-r--. 1 serendipity serendipity 129 11月 12 11:54 8.sh
-rw-rw-r--. 1 serendipity serendipity 116 11月 12 11:56 9.sh
-rw-rw-r--. 1 root root 92 11月 12 11:59 files.txt
[root@localhost c7]# chown :serendipity files.txt #只改属组
[root@localhost c7]# ll
总用量 64
-rw-rw-r--. 1 serendipity serendipity 0 11月 12 12:30 =
-rw-rw-r--. 1 serendipity serendipity 96 11月 12 11:59 10.sh
-rw-rw-r--. 1 serendipity serendipity 85 11月 12 12:01 11.sh
-rw-rw-r--. 1 serendipity serendipity 190 11月 12 13:08 12.sh
-rw-rw-r--. 1 serendipity serendipity 112 11月 12 12:12 13.sh
-rw-rw-r--. 1 serendipity serendipity 399 11月 17 13:43 14.sh
-rw-rw-r--. 1 serendipity serendipity 511 11月 12 12:32 15.sh
-rw-rw-r--. 1 serendipity serendipity 90 11月 27 17:09 1.sh
-rw-rw-r--. 1 serendipity serendipity 0 11月 12 12:36 =2
-rw-rw-r--. 1 serendipity serendipity 125 11月 10 14:35 2.sh
-rw-rw-r--. 1 serendipity serendipity 66 11月 10 14:45 3.sh
-rw-rw-r--. 1 serendipity serendipity 0 11月 12 12:30 =4
-rw-rw-r--. 1 serendipity serendipity 50 11月 10 14:47 4.sh
-rw-rw-r--. 1 serendipity serendipity 133 11月 10 14:53 5.sh
-rw-rw-r--. 1 serendipity serendipity 57 11月 10 14:58 6.sh
-rw-rw-r--. 1 serendipity serendipity 268 11月 12 11:50 7.sh
-rw-rw-r--. 1 serendipity serendipity 129 11月 12 11:54 8.sh
-rw-rw-r--. 1 serendipity serendipity 116 11月 12 11:56 9.sh
-rw-rw-r--. 1 root serendipity 92 11月 12 11:59 files.txt
访问权限规定了三种不同类型的用户
1.文件属主(owner):文件所有者
2.同组用户(group):文件属组的同组用户
3.其他用户(others):可以访问文件的其他用户
访问权限表示方法:
1.三组九位字母表示法:r(读) w(写)x(可执行或查找) - (无权限)
2.三组九位二进制表示法:有权限表示1,无权限表示0,如:rwx r-x r--,对应表示为111 101 100
3.三位八进制表示法:就是将第二种二进制转化为8进制,上例结果为754
命令为chmod。必须为属主或者root才能执行。
字母模式修改权限
chmod 【选项】模式【,模式】文件名
各项含义:
1.用户对象:u(属主)g(同组用户)o(其他用户)a(以上所有用户)
2.操作符号:+(添加权限)-(取消权限)=(直接赋予该权限,有可能时添加有可能时取消)
3.操作权限:r w x (上面解释过了)
chmod u+x,g+w,o-r f1
chmod a=rw f2
chmod 644 f1
特殊权限有3位分别是用户置位s(SUID),组置位s(SGID)和粘着置位t(Stricky)。
前两个也可以写成suid和sgid或者setuid和setgid。这些特殊权限会占用x位置来表示。
rwsrw-r--:有suid标志
rwxrwsrw-:有sgid标志
rwxrw-rwt:有sticky标志
表示上区分大小写,小写时打开权限,大写关闭权限
都是使用chmod命令。八进制表示为4000、2000、1000;字母形式修改为,u+s,g+s,o+t
粘着为告诉系统在程序完成后再内存中保存一份运行程序的辈分,如果该程序常用,可以为系统节省点时间,不用每次都从磁盘加载到内存。
目录的s属性使得在该目录下创建的任何文件及目录属于该目录所拥有的组。
设置了目录T属性后,只有该目录的所有者及root才能删除。如/tmp目录:drwxrwxrwt
文件默认权限是指新创建的文件所拥有的权限,Linux通过设置umask掩码来指定。其计算公式为:
文件创建时的默认权限=0666-umask
目录创建时的默认权限=0777-umask
可以通过umask 0000(其他数字)来修改。
为了避免文件在系统中被不必要地多次复制,可以通过创建文件链接,使得各个用户在自己方便的位置存取同一文件,实现文件共享。
文件的链接其实就是为一个文件命名的多个名称,有软硬两种形式。
软链接也称符号链接,包括要链接到的文件的名称,并在符号链接之前那个文件不一定存在。软链接可以跨越不同的文件系统,并且可以创建目录之前的链接。
硬链接不能从最初的目录项上区分开来,对于文件所做的任何修改都是有效的,不依赖与访问该文件所用的名称。硬链接不能用于创建目录链接和在不同的文件系统之间创建文件的链接。
格式为:
ln 【选项】 源文件【目标文件】
[root@localhost c7]# ln 1.sh 1.txt #硬链接
[root@localhost c7]# ls -li 1.txt
8737 -rw-rw-r--. 2 serendipity serendipity 90 11月 27 17:09 1.txt
[root@localhost c7]# ls -li 1.sh
8737 -rw-rw-r--. 2 serendipity serendipity 90 11月 27 17:09 1.sh
[root@localhost c7]# ln -s 2.sh 2.txt #软链接
[root@localhost c7]# ls -li 2.txt
8728 lrwxrwxrwx. 1 root root 4 11月 28 17:27 2.txt -> 2.sh
Linux系统将用户分为组,每个用户都属于某个组,每个用户都需要进行身份验证,同时用户只能在所属组所拥有的权限内工作,这样不仅方便了管理,且增强了系统的安全性。
大家都可以cat一下,看看什么内容,其中以“:”分隔,我就不再放图了。
位置:/etc/passwd
作用:用于保存个用户账号信息
passwd对所有用户都可读,用户口令保存在shadow文件中,此文件只对root用户可读。
位置:/etc/shadow
作用:保存用户账号的密码等信息
任何用户都可读此文件
位置:/etc/group
作用:保存各用户帐户的分组信息。
只有root文件可读取
位置:/etc/ gshadow
作用:用于定义用户组口令、组管理员等信息。
- useradd:添加新用户
useradd [参数] 用户名 -d home-dir 设置用户的宿主目录,默认/home/username -e date 设置账号过期日期 -g group-name 设定用户所属组名 -s shell-path 设置用户登录所使用的shell,默认/bin/bash -u uid 设置uid,普通用户必须大于1000 -D username 用于显示用户所使用的默认值 useradd -u 1010 -g a -d /home/a -s /bin/bash -e 2019/1/1 zhang
- usermod:修改已有用户账户的属性
usermod 【参数】 用户名 由于与useradd一部分参数相同,只讲解不同部分 -l newusername username :改变已有用户名 -L username:用于锁定指定用户账号 -U username:对已锁定的用户进行解锁
- passwd:设置用户账号的口令
passwd 【参数】 用户名 -S username 用于查询指定用户的口令状态,只root可用 -l username 用于锁定指定用户的口令,只root可用 -u username 用于解锁指定用户的口令,只root可用 -d username 用于删除指定用户的口令,只root可用
userdel:删除指定账户
格式:userdel [-r] username 说明:若使用参数r则删除用户的同时删除用户所有相关的文件。
- groupadd
- groupmod
- groupdel
- groupwd
groupadd 【-r】 组名 groupmod 【-r】 组名 groupdel 组名 gpasswd 【参数】用户名 组名 gpasswd -a username groupname 将指定用户添加到指定用户组中 gpasswd -d username groupname 将组内删除用户名 gpasswd -A username groupname 设指定用户为指定组的管理员
zip -r filename.zip filedir #压缩文档命令格式
unzip filename.zip #解压缩
RPM的含义:RPM全称是RedHat Package Manager,即软件包管理器,是由RedHat公司提出的软件包管理标准,适于各种Linux系统,现已成为Linux中公认的软件包管理标准。
RPM的功能:安装、卸载、升级、查询、验证
RPM包的名称格式:name-version.type.rpm
示例:httpd-2.0.40-21.i386.rpm httpd-2.0.40-21.src.rpm
获得RPM包的途径:发行套件的光盘中查找 ;从RPM官方站点上查找下载。
命令格式:
安装RPM包的基本命令格式是:
rpm -ivh
删除RPM包的基本命令格式是:
rpm -e
查询系统中安装的所有RPM软件包:
rpm -qa
查询指定的软件包是否已安装
rpm -q
查询包中文件的信息:
rpm -qp
查询系统中已安装包的描述信息
rpm -qi
查询系统中已安装包里所包含的文件
rpm -ql
查询系统中指定文件所属的软件包
rpm -qf <文件名>
升级RPM包的基本命令格式是:
rpm -Uvh 、
验证RPM包的基本命令格式为:
rpm -V【参数】
验证已安装的httpd软件包 rpm -V httpd
验证包含文件/etc/passwd软件包 rpm -Vf /etc/passwd
YNM含义:
基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,所有软件包由集中的yum软件仓库提供。
yum最大的优势是可以去互联网上下载所需要的rpm包,然后自动安装。
软件仓库的提供方式有本地目录和网络FTP或HTTP服务方式。
yum的配置文件
基本配置文件:/etc/yum.conf
软件仓库配置文件:/etc/yum.repos.d/*.repo
日志文件:/var/log/yum.log。
YUM常用命令(需要接入网络):
yum [options] [command] [package ...]
[options]选项,包括-h(帮助),-y(当安装过程提示选择全部为"yes"),-q(不显示安装的过程)等等。 [command]为所要进行的操作, [package ...]是操作的对象。
#查询
yum repolist all #查看所有软件仓库
yum repolist enabled #查看可用软件仓库
yum list <软件包名> # 查询指定软件包安装情况
yum info <软件包名> # 查询指定软件包名详细信息
#安装
yum install <软件包名或程序组名>
#更新
yum check-update #查找可更新的程序
yum update <软件包名>
#删除
yum remove <软件包名> #删除指定的软件包
yum clean <软件包名> #清除缓存目录下的软件包
注意:在安装软件包时,有时需要变更软件依赖关系或升级软件版本,从而需要删除相关软件,因为删除不掉软件可能导致安装失败,因此需要安装前先删除相关软件包。利用rpm命令往往删除不掉,而采用yum命令删除软件成功率要高。
TAR包的含义:
Tar是“tape archive”(磁带存档)的简称,tar命令是一个将很多文件进行存档的工具,现已成为Unix下标准的文件打包格式。
TAR包的名称格式:
“*.tar”-----表示普通的,非压缩的包; “*.tar.gz”-----表示的是压缩的文件包。
TAR包的作用:
TAR包在Linux中主要用来安装第三方的程序,几乎所有的软件都有TAR包的发布。
获得TAR软件包:
获得TAR软件包要比获得一个RPM包更方便,可以通过Google,Baidu等搜索引擎查找“tar”或“tar.gz”软件包。
命令格式:
#建立tar包
tar cvf <文件或目录名> #只打包不压缩
tar zcvf <文件或目录名> #打包并压缩
#查询tar包
tar ztf #执行完该命令之后显示该软件包所包含的文件清单
#释放tar包
tar zxvf # 若释放tar包为非压缩tar包,则无须使用参数z
在TAR软件包释放后,需要查看包中是否包含了src,源代码包里的文件往往会含有源代码文件,头文件*.h、c代码源文件*.c、C++代码源文件*.cc/*.cpp等;
安装步骤: (1) 释放TAR包 (2) 查看并阅读包内附带的软件安装说明 (3) 进行编译准备:./configure (4) 进行编译:make (5) 进行软件安装:make install (6) 清除临时文件
配置IP文件
hostname 主机名:设置系统主机名,必须root
ping [-c 报文数] 目的主机地址 #-c 指定相应的树木,可以控制ping命令发送的数量
格式:
$ write username [tty] #tty为终端号
Message
…
+d
wall message
wall hello it is a test
mesg [y/n]
一般情况下,消息禁止对root及相同用户名之间无效
(1) 撰写和发送邮件
格式一:
mail username
Subject:topic //主题名
Text //正文
...
+d //组合键结束
Cc:username //同时转发的用户
格式二:
mail –s topic username < filename
(2) 接收和阅读邮件
直接输入mail命令后会看到所有的邮件,最后一行会有“&”符号,它为邮件命令提示符,在其后可输入各种邮件命令。如想看哪一封邮件,则输入如下:
& n
其中n为mail的编号
vi [选项] [filename]
vi +n filename // 打开filename文件,光标停在第n行行首;
vi + filename // 打开filename文件,光标停在最末行行首;
vi –r filename // 系统瘫痪后恢复filename文件;
vi +/词 filename // 光标停在 “词”第一次出现位置的行首。
:w <回车> # 将缓冲区内容写到比编辑文件中
:w filename <回车> # 另存到filename中
:q <回车> #直接退出
:wq <回车> #存盘并退出
:q! <回车> #强制退出
键入vi命令进入编辑器时,就处于命令模式。此时,从键盘上键入的任何字符都被当作编辑命令来解释。 命令模式可以通过命令完成光标定位、字符串检索、文本恢复、修改、替换、标记、行结合及文本位移等功能。
插入模式也叫做输入模式,在该模式下,从键盘上键入的所有字都被插入到正在编辑的缓冲区中,被当作该文件的正文在屏幕上显示出来。 插入模式下如同Windows下的“记事本”,可以完成文本的输入、修改和光标的移动等功能。
要执行底行命令模式,必须在命令模式下键入一个冒号“:”,在vi编辑器的底行出现“:”冒号后接着输入命令后回车则完成一个底行命令,冒号作为底行命令提示符出现在状态行(通常在屏幕最下一行)。 多数文件管理命令都是在底行命令模式下执行的。底行命令执行后,自动回到命令模式。 底行命令模式主要完成文本的全局替换、文本中插入shell命令、vi编辑器的设置、文本的存盘退出、文本块的复制、多个文本间的转换及其缓冲区的操作等功能。
插入命令:按“i”键,在光标之前插入。
附加命令:按“a”键,在光标之后插入。
打开新行命令:按小写“o”键,在光标所在行的下面插入一行。
移至行首 “^”及“0”(零)
移至行尾 “$”
移至指定行 “[行号]G”
移至指定列 “[列号]|”
删除字符: “x”:如同“Del键”;
“X”:如同“退格键” 删除文本对象(d与光标移动命令的组合):
dd:删除光标所在的整行。
d0 <回车> :从光标位置(不包括光标位)删至行首。
d5l <回车>:从光标位置(包括光标位)向右删5个字符。
d$ <回车>:从光标位置(包括光标位)删至行尾。与D相同。
d3G <回车>:将光标所在行(包括该行)至第3行(不包括它)删除。
“u”:小写u命令功能是取消最近一次的编辑,多次按u键,则依次取消前几次的操作;
“U”:大写U命令把当前行恢复成它被编辑之前的状态,不管你把光标移到该行后对它编辑了多少次。
“J”(大写字母):把光标所在行与下面一行结合成一行。 如果在J之前给出一个数字,例如3J,则表示把当前行及其后面的2行(共3行)结合成一行。
“>”命令:将限定正文行向右移动,通常是一个制表位(8个空格)。例如:“>4G”
“<”命令:将限定正文行向左移动。例如:“<1G”
“>>”命令:将光标所在行右移8个空格。例如:“5>>”
“<<”命令:将光标所在行左移8个空格。
(1)向前检索:/字符串 + 回车
(2)向后检索:?字符串+回车
(3)检索下一个字符串:n和N可以重复上一个检索命令。
(4)检索特殊字符:“* ^ $ [ / \ |”需要使用转义形式,即在这些字符前面加上反斜线“\”,使其失去特殊的含义 。例如:检索“/*this$”。
定位操作
“:20 <回车>”:光标移到第20行的行首。
显示指定文本区
“:m,np<回车>”:显示m至n行。
删除指定文本区
“:m,nd<回车>”:删除m至n行。
给定检索字符串的模式
“:/this/<回车>”:从光标所在行向前查找给定模式this,光标停在第一个与this匹配的行的行首。
“:?this?<回车>”:光标所在行向后查找给定模式this,光标停在首先找到的匹配行的行首。
:g/模式/命令表
“:g/字符串1/p”:屏幕输出包含字符串1的所有行;
“:g/字符串1/s//字符串2/”:在包含字符串1的所有行中用字符串2替换字符串1的首次出现。
“:g/字符串1/s//字符串2/g”:用字符串2替换字符1的所有出现。
“:g/字符串1/s//字符串2/gp”:同上并将所有修改过的行显示屏幕上。
“:g/字符串1/s//字符串2/gc”:字符串1每出现一次,就询问用户是否用字符串2替换。
其中: p----print ; c----confirm ; g----global ; s----substitute
vi编辑器中执行shell命令有两种情况:
(1) 仅执行shell命令,格式如下: :!command
(2) 读取命令的输入并插入,命令格式如下: :r !command 如 :r !ls ,会在vi所编写的当前文件光标位置插入所执行ls的输出内容
vi 在编辑某个文件时,生成一个以 . 开头,并以 .swp 结尾的临时文件。vi 在正常退出时,该文件被删除,若意外退出,而没有保存文件的最新修改内容,则可以使用恢复命令:
:recover
也可以在启动 vi 时利用 -r 选项来恢复文件。如:vi –r filename 。
为控制不同的编辑功能,vi 提供了很多内部选项。利用 :set 命令可以设置选项。
:set all #显示所有设置列表,以no开头表示未设置,现处于关闭状态
:set lines=24 #设置默认缓冲显示行
:set number #设置该选项,则在屏幕左边显示正文行号
:set autoindent #正文自动缩进
:set list #显示“$”
用户在“编辑缓冲区”中的文件副本上进行工作的。当用单一文件名参数调用vi时,就把命名的文件拷贝到临时编辑缓冲区中。编辑器记住指定的文件名,所以它以后能把缓冲区的内容拷回命名文件。在拷回原来文件之前即存盘前,该文件所新编辑操作的内容,是临时存在编辑缓冲区中的。
由字母a~z命名,即vi可以拥有26个字母命名的不同缓冲区。
从编辑缓冲区到命名缓冲区(拷贝或剪切)
命令格式为: “字母名+行号+操作命令(Y,dd)
从命名缓冲区到编辑缓冲区(粘贴)
命令格式为为: "字母名+操作命令(P,p)
删除缓冲区可以由数字1~9指定
例如,可以指定把包括光标所在行的下5行删除并放到2删除缓冲区命令如下:
"25dd 如果想在粘贴回去,则可以用命令: "2p
按行拷贝(co命令) :1, 3 co .
文本块移动(m命令) :1, 3 m 7
文件间的文本移动 :2, 5 w filename :2, 5 w >> filename
格式:
vi 文件1 文件2 …
:n #编辑完上一个文件后可打开下一个文件
:e filename #打卡另一个
:e! filename # 当前文件修改不存盘,直接打开另一个文件
:e # #返回上一个编辑文件的先前位置
具体功能:接受用户输入的命令,进行分析,创建子进程,由子进程实现命令所规定的功能,等子进程终止后,发出提示符。
主要功能有两个:命令解释程序和高级程序设计语言。
主流使用的是bash。
[serendipity@localhost c6]$ vim test1
[serendipity@localhost c6]$ cat test1
ls -l
cal
who
[serendipity@localhost c6]$ sh test1
总用量 4
-rw-rw-r--. 1 serendipity serendipity 14 11月 29 15:39 test1
十一月 2023
日 一 二 三 四 五 六
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
serendipity :0 2023-11-29 15:38 (:0)
serendipity pts/0 2023-11-29 15:38 (:0)
可以使用vim 或cat指令
vim test1
cat > test1
sh test1
sh < test1
chmod a+x test1
./test1
echo命令:用来显示文本行或变量的值,或者把字符串输入到文件 。
格式:
echo string
string 里面可以带转移控制符
\c 不换行
\t 跳格
\n 换行
注意:echo -e 才能使转义字符有效。
[serendipity@localhost c6]$ echo -e "hello\tworld"
hello world
[serendipity@localhost c6]$ echo "hello\tworld"
hello\tworld
[serendipity@localhost c6]$ echo "\\\\"
\\
[serendipity@localhost c6]$ echo "\"\""
""
read命令:从键盘或者文件的莫一行文本读入信息,并将其赋给某变量。
[serendipity@localhost c6]$ read name
hello,i am superman
[serendipity@localhost c6]$ echo $name #必须加$代表命令
hello,i am superman
[serendipity@localhost c6]$ read name suname
john make kate
[serendipity@localhost c6]$ echo $suname
make kate
# 如果输入的值个数多于变量个数,多余的值会赋给最后一个变量。每个值或每个变量之间有空格。
cat命令:用于显示文件,并且支持多个文件串联后输出。
cat [选项] file1 file2 ……
选项:-n 对所有输出行进行编号
-b 与-n相似,但空白行不编号
$cat file1 file2 file3
管道命令 | :可以通过管道把一个命令的输出传递给另外一个命令作为输入。
格式:命令 1 | 命令 2
例2: $cat test.txt | grep ‘hello’
tee 命令:把输出的一个副本送到标准输出,另一个副本拷贝到相应的文件。
如果想看到输出的同时,把输出同时拷贝到一个文件,这个命令很合适。
格式: tee -a file
-a 表示文件追加到末尾
file 表示保存输出信息的文件
tee 命令一般和管道符| 结合起来使用
例1:$who | tee who.info
该命令把信息显示到屏幕上,同时保存到文件 who.info
适用于所有用户进程,在/etc/profile 中进行定义,在用户进程使用前,必须用export命令导出环境变量,建议环境变量大写。
定义环境变量:
var_name=value; export var_name
或者:var_name=value
export var_name
查看环境变量的值:
$echo $var_name
删除某个系统环境变量:
$unset var_name
注:只是从当前用户shell进程中删除,不会从文件/etc/profile删除
一般来讲,BASH shell 有一些预留的环境变量,这些变量名不能做其他用途,通常在文件/etc/profile 中建立这些变量,但不是绝对,取决于用户。
常见的shell内部变量:
CD PATH HOME IFS LOGNAME PATH SHELL TERMINFO
本地变量:当前shell 中的变量,很显然本地变量中肯定包含环境变量。Linux 的本地变量的非环境变量不具备继承性。
在用户当前的shell进程中使用,一般在$HOME/.bash_profile中进行定义。也可以在命令行中定义,但只在用户当前shell进程中有意义,如果在shell中启动另一个进程或退出,此值将无效。
定义本地变量:
var_name=value
查看本地变量的值:
echo $var_name
或者 $echo ${var_name} ---建议使用这个方法
删除变量: $unset var_name
例子: 使用变量保存系统命令参数
srce=”/etc/passwd”
dest=”/home/fuyongming/”
cp $srce $dest
设置只读变量,可设置某个变量为只读方式,只读变量不可更改,否则系统返回错误。用法:
var_name=value
readonly var_name
例:$myvar=“100”
$readonly myvar
$myvar=“200”
作用:向shell 脚本传递参数,参数个数可以任意多,但只有前9个被访问到,shift命令可以更改这个限制。参数以数字编号,每个编号前加$,第一个参数$0 是实际的脚本名字,无论脚本是否有参数,此值均有效,$1 ~ $9 是脚本的第一至第九个参数。
例:$vi test.sh
#!/bin/bash
echo “The script name is : $0”
echo “The first parameter is : $1”
echo “The second parameter is : $2”
echo “The third parameter is : $3”
echo “The fourth parameter is :$4”
echo “The fifth parameter is : $5”
echo “The sixth parameter is : $6”
保持文件为可执行文件,执行 $./test.sh would you like tBASCo do itZZ
反应脚本运行过程中的控制信息
特定的shell变量列表:
$# 传递到脚本的参数个数
$* 以一个单字符串的形式显示所有向脚本传递的参数,与位置变量不同,此项参数可以超过9个。
$$ 脚本运行的当前进程id号
$! 后台运行的最后一个进程的进程id号
$@ 功能与$*相同,但使用时加引号,并在引号中返回每个参数
$? 显示最后命令退出的状态,0表示正确,其他任何值表示错误
整数型的运算要放在双括号之间或者放在内置命令let的后面
+ - * / % ** 加、减、乘、除、取余数、幂
++ -- 变量自增、自减
< <= > >= != == 大小比较
& | ^ ~ 位的与、或、异或、取反
<< >> 向左移位、向右移位
&& || ! 逻辑与、逻辑或、逻辑非
?: 条件运算符
+= -= *= /= %= 赋值运算符
例1: x=20 y=30 #同一行对多个变量赋值,用空格分开。
((w=x+y)) #运算放在双括号里面
echo $w
50
例2: let k=3*8 #用let 进行运算。
echo $k
24
test condition 或者 【condition】
test是关键字,”[””]”与condition之间有空格。
-d 目录 -s 文件长度大于0,非空
-f 一般文件 -w 文件可写
-L 符号链接文件 -r 文件可读
-x 文件可执行 -e 文件存在
使用逻辑操作符:测试文件状态是否ok,可以借助逻辑操作符对多个文件状态进行比较。
-a 逻辑与,操作符两边均为真,结果为真,否则为假
-o 逻辑或,操作符两边其中一个为真,结果为真,否则为假
! 逻辑非,条件为假,结果为真
例1:$[ -r myfile1 -a -w myfile1 ]
$echo $?
例2:$[ -w myfile1 -o -x myfile2 ]
$echo $?
逻辑与,或,非可以用双中括号格式,如下:
[[ condition1 && condition2 ]] 逻辑与
[[ condition1 || condition2 ]] 逻辑或
格式:test “string”
test string_operator “string”
test “string1” string_operator “string2”
[ string_operator string ]
[ string1 string_operator string2 ]
注:string_operator是操作符,它的取值:
= 等于 != 不等于 -z 空串 -n 非空串
测试变量 str1 是否等于 str2
str1=“hello”
str2=“Hello”
[ “$str1” = “$str2” ]
echo $?
注:在进行字符串比较时,建议加上引号
格式:”number1” number_operator “number2”
或者 [ “number1” number_operator “number2” ]
注:number_operator是操作符,它的取值:
-eq 数值相等 -gt -gt前面的数大于后面的数
-ne 数值不相等 -lt -lt前面的数小于后面的数
-le -le 前面的数小于等于后面的数
-ge -ge前面的数大于等于后面的数
字符串与数值操作,一般用于整数值,也可以用于字符串
1. expr语句 ------ 字符串与数值操作, 一般用于整数值,也可以用于字符串。
格式:expr argument1 operator argument2
expr 是个手工命令行的计算器。
expr 10 + 10 #注意空格 运算符旁边都有空格
expr 300 / 6 / 5
expr 30 \* 3 #注意:乘号必须用反斜线屏蔽其特定含义
2. 增量计数,expr在循环中用于增量计算,首先,循环初始化为0,然后循环加1,常用的做法:从expr接受输出赋给循环变量。
例:LOOP=0
LOOP=`expr $LOOP + 1`
3. 数值测试,可以用expr测试一个数,如果对非整数进行计算,则返回错误。
例:expr 1.1 + 1 #返回错误
expr 1 + 1 #返回2
4. 字符串测试,expr也有返回的状态,但与系统最后返回的值刚好相反,expr返回成功为1,其他值为失败。
例:value=hello
expr $value = “hello” #注意等号前后都有空格
1 #expr执行成功的值
echo $?
0 #系统命令返回成功的值
格式: if 条件1
then 命令1
else 命令2
fi
注意:使用if语句时,需要将then放在新行,否则解释会出错,如果想不分行,必须使用命令分隔符;来空格,即:
if 条件1; then
命令1
fi
多路条件判断if语句
格式: if 条件1
then 命令1
elif 条件2
then 命令2
。。。
else 命令3
fi
格式: for 变量名 in 列表
do
命令1
命令2
done
说明:for, in, do, done是关键字,命令可以是任何有效的shell命令和语句,
变量名可以是任何合法的标识符。in 列表可以包含字符串,文件名或者命令的输出。
对for循环使用参数,当循环中省去in列表选项时,它将接受命令行特定变量做为参数,即: for params in “$@” 或者 for params in “$*”
while格式: while 命令
do
命令1
……
done
注意:do 和 done 之间的命令,只有前一个返回状态为0,后面命令才执行。
until 格式: until 条件
do
命令1
……
done
注意:until执行一系列命令,直到条件为真时停止。
格式: case 变量 in
模式 1)
命令1
……
;;
模式 2)
命令2
……
;;
esac
case 变量后面必须为in,每个模式必须以右括号结束,case后面的变量可以是常数值,找到匹配模式后,执行相关命令直到;;
有时需要某些准则退出循环或者跳过循环,就需要break和continue来实现。
break 允许跳出循环或case语句,在多层循环里,break可以跳出本层循环。
continue类似于break, 区别是continue只会跳过当次的循环,不会跳出整层循环。
函数格式: 函数名( )
{
命令1
…… }
或者: function 函数名( )
{
……
}
函数可以只放在一个文件中做为一段代码,也可以放在只包含函数的单独文件中。
在脚本中定义并使用函数:
函数必须在使用前定义,一般放在脚本开始部分,直至shell 解释器首次发现它,才可以使用。
向函数传递参数就象在一般脚本中使用特殊变量$1,$2,…,$9一样,函数取得所传参数后,将原始参数传回shell,可以在函数内定义本地变量保存所传的参数,一般这样的参数名称以 _开头。
例1: $vim fun_greet1.sh
#!/bin/bash
greeting( )
{
echo “Good morning, $1, $2, $3.”
}
greeting Mike Jack Mary #调用函数greeting
调用函数greeting后面的Mike、Jack、Mary分别传递给位置参数$1、$2和$3,脚本运行的结果:Good morning, Mike, Jack and Mary
在函数内可以定义变量,变量名可以与主程序的变量同名。如果同名,它们会互相影响,函数内的变量默认跟主程序的变量一样,都是全局变量。
例1: $vim fun_var1.h
#!/bin/bash
global_var( )
{
b=200
echo “b=$b”
}
b=180; echo “b=$b”
global_var
echo “b=$b”
函数里面的变量b和主程序的变量b实际上是同一个全局变量b,所有在调用函数
global_var之后,全局变量b的值变为200,所有程序的运行结果为:
b=180
b=200
b=200
如果加上内部命令local, 变量会变为局部变量,把程序改成:
function global_var()
{
local b=200; echo “b=$b”
}
b=180; echo “b=$b”
global_var
echo “b=$b”
函数global_var里面定义的局部变量b,作用范围只在该函数内部。
主程序的变量b与函数里面的变量b虽然名字相同但不是同一个变量。
程序执行的结果:
b=180
b=200
b=180