四、Linux操作命令
Linux有着非常强大的操作指令。这也是必备的技能之一。
可以理解为linux通过我们传递给它的每一条指令去完成相应的操作,本章先了解Linux命令的语法结构,再来熟悉常用的命令。
Linux命令语法结构
command [-options] parameters1 parameters2
命令1 选项2 参数3 参数4
这就是linux命令的语法,之前我们也进行网络设置的操作。
command 就是命令,后面是参数与设置。举个例子
ls是查询当前目录文件或者目录列表。不包含隐藏文件。
ls就是命令。
ls –l //显示当前目录文件详细信息,不包含隐藏文件。
-l就是设置。
cp file1 dir1 复制文件,cp是命令,后面的文件和文件夹路径就是参数。
Linux命令知识
linux的命令为什么可以在任意目录下执行,主要是由于环境变量,输入echo $PATH,可以看到,环境变量情况。
linux命令有直接向内核直接访问的内部命令。外部命令就是通过命令解析器解析为内核命令再做执行。
linux为命令设置了帮助文档。内部命令查询帮助文档:help + 命令名称。
外部命令查询帮助文档:man + 命令名称。
输入命令错误会有提示。
也可以通过 cp --help 这种方式来查看帮助。
快捷按键
Tab键,Tab键是linux命令最棒的功能,可以进行命令补全。
Ctrl+C,可以将程序停止。
Shift+page up/down,可以翻页。
Linux常用命令
下面总结linux的常用命令。
cd
功能:切换目录
语法:
cd ../ //切换上一级目录
cd ~ // 切换根目录
cd dir //切换到当前目录的dir目录
cd /root //如果是跨目录切换,必须加/
mkdir
功能:创建目录
语法:
mkdir dir //创建单个目录
mkdir dir1 dir2 //创建多个目录
mkdir dir{1..10} //创建10个目录。
pwd
功能:查询当前所在目录位置
cp:copy
功能:复制文件,或者目录
复制文件:
cp file1 file2
如果file2文件不存在,创建file2,内容也同时复制。
如果file2存在,内容覆盖。
cp file1 dir1
把单个文件file1复制目录dir1中。
cp file2 file3 dir1
把多个文件复制dir1目录
cp * dir2
把当前目录所有文件复制dir2目录
cp file* dir3
把所有以file开头文件复制dir3目录
cp ../* .
复制上一级目录文件到当前目录。
复制目录:
直接使用cp命令不能直接复制目录,不能复制复制非空目录:
cp –R dir9 dir12
如果dir12不存在,创建一个目录,复制内容。
如果dir12存在,把dir9目录复制dir12目录下面。
cp –r dir1 dir2 dir3
把dir1,dir2 复制到dir3目录中。
cp –r * dir4
把当前目录所有文件,目录复制dir4中。
cp –r ../* . //把上一级目录所有文件,或者目录复制当前目录。
cp –r dir* dir12
把所有以dir开头目录复制到dir12
mv:move
功能:剪切
mv file1 file2
如果file2不存在,他会file1重命名file2.内容不变。
如果file2存在,file1会覆盖file2。
mv file1 dir1
剪切file1文件到dir1目录。
mv file2 file3 dir1
把多个文件剪切到dir1目录中。
mv * dir3 //把所有文件,或者目录剪切到dir3目录
mv ../* . //剪切上一级目录所有文件或者目录到当前目录。
mv file* dir5
剪切所有以file开头的文件,或者目录到dir5
mv dir1 dir14
如果dir14目录不存在,重命名
存在,把dir1剪切到dir14目录。
rm:remove
功能:删除
删除文件:
rm file1
删除file1
rm –f file2
强制删除file2 ,不提示。
rm –f file3 file4
强制删除多个文件
rm –f *
删除当前目录所有文件
rm –f file*
删除当前目录所有以file开头的文件
rm –f ../*
删除上一级目录所有文件
删除目录:
rm –rf dir1
-r:递归删除
-f:强制不提示
递归强制删除dir1目录。
rm –rf dir2 dir3
删除多个目录
rm –rf *
删除当前目录下所有文件或者目录。
rm –rf ../*
删除上一级目录所有文件,或者目录。
rm –rf file*
删除所有以file开头文件或者目录。
touch
功能:创建文件
语法:
touch file1
创建单个文件
touch file2 file3
创建多个文件
touch file{1..10}
创建以file开头的10个文件。
cat
功能:查看文件,合并文件。
查看文件:
语法:cat filename
特点:cat查询文件全部内容。适合查询小文件。
添加文件:
语法:cat > filename
功能:创建文件fileName,并且光标阻塞,输入内容到文件。
合并文件:
语法:cat file1 file2 > file3
功能:把file1 flie2文件内容合并到文件file3,文件file3原有内容被覆盖。
more
功能:查看文件
特点:分页查询文件
语法:
more myfile
分页查看文件
more +6 myfle
从第6行开始分页显示文件
more -6 myfile
分页查看,每页显示6条
less:
功能:查询文件
特点:自由上下翻页
语法:less myfile
which
功能:查询命令
特定:查询命令别名,命令所在目录。
语法:which 命令
whereis
功能:查询命令
特点:命令名称,命令所在目录,命令帮助文件,命令源代码。
语法:whereis + 命令
locate
功能:查询文件
特点:不能查询新文件,Linux创建新文化在Linux文件数据库中,需要更新updatedb。
语法:locate+文件名称。
head
功能:查看文件
特点:从文件头部开始查看文件
语法:
head –n 10 myfile
查询文件myfile,每页显示10条
head –c 20 myfile
查询前20个字节。
tail
功能:实时监控文件变化
语法:tail –f filename
find
功能:查找文件
语法:
find path -option [ -print ] [ -exec -ok command ] {} \;
命令:
find –name “myfile”
这个命令和下面命令基本相同,但是使用正则表达式查询,需要加引号。
find –name myfile
find /etc –name “yum”
查询指定目录etc目录下面yum文件。
find /root /etc –name “yum”
查询多个目录里面yum文件。
find /root /etc –name “[A-Z]*”
查询指定目录下所有以大写字母A-Z开头所有文件。
-exec:执行
把前面命令执行结果交给后面命令执行。
find /root/ /etc/ -name "[A-Z]*" -exec ls -al {} \;
n 查询所有A-Z大写字母开头所有文件,交给ls命令执行。
n {} : 表示查询结果在一行进行显示
n \; 命令需要分号结束,使用斜杠转义。
|
命令名称:管道命令
功能:把前面命令执行结果交给后面命令执行。
例子:ls –al | more -6
grep
功能:过滤查询
语法:
find /root/ /etc/ -name "[A-Z]*" -exec ls -al {} \; | grep S95atd
查询所有大写字母A-Z开头的文件详细信息,并过滤出S95atd文件。
ps –ef | grep svn
ps –ef | grep mysql
ln
功能:创建快捷方式
语法:ln –s myfile link
含义:给myfile创建一个快捷方式,快捷方式的名称link。
top
top显示当前系统中耗费资源的进程情况
top //每隔5秒显式所有进程的资源占用情况 top -d 2 //每隔2秒显式所有进程的资源占用情况 top -c //每隔5秒显式进程的资源占用情况,并显示进程的命令行参数(默认只有进程名) top -p 12345 -p 6789//每隔5秒显示pid是12345和pid是6789的两个进程的资源占用情况
ps
功能:查询进程
语法:ps –ef | grep 进程名称
-e:显示所有进程
-f:全格式显示进程。
kill
功能:杀死进程
语法:kill -9 PID
df
功能:显示当前资源占用情况
语法:df
df –h //可以显示单位。
gzip
功能:解压缩文件
语法:
压缩语法:
gzip myfile
压缩单个myfile文件,myfile.gz
gzip file1 file2
压缩多个文件。File1.gz file2.gz
gzip *
压缩当前目录所有文件
gzip file*
压缩以file开头所有文件
gzip ../*
压缩上一级目录所有文件
gzip ../../*
压缩上上一级目录所有文件。
解压语法:
第一种方式:
gunzip *
解压当前目录所有以gzip压缩的文件。
gunzip myfile.gz
gunzip file1.gz file2.gz
gunzip ../*
gunzip file*
第二种方式:
gzip –dv myfile.gz
解压单个文件myfile.gz
-d:解压
-v:显示解压过程
gzip –dv file1.gz file2.gz
gzip –dv *
gzip –dv ../*
gzip –dv file*
bzip2
语法:
压缩语法:
bzip2 myfile
压缩单个myfile文件,myfile.bz2
bzip2 file1 file2
压缩多个文件。File1.bz2le2.bz2
bzip2 *
压缩当前目录所有文件
bzip2 file*
压缩以file开头所有文件
bzip2 ../*
压缩上一级目录所有文件
bzip2 ../../*
压缩上上一级目录所有文件。
解压语法:
第一种方式:
bunzip2*
解压当前目录所有以gzip压缩的文件。
bunzip2 myfile.gz
bunzip2 file1.gz file2.gz
bunzip2 ../*
bunzip2 file*
第二种方式:
bzip2 –dv myfile.bz2
解压单个文件myfile.bz2
-d:解压
-v:显示解压过程
bzip2 –dv file1.bz2 file2.bz2
bzip2 –dv *
bzip2 –dv ../*
zip
压缩语法:
zip myzip.zip myfile
把myfile压缩成myzip.zip
zip myzip.zip
解压使用zip命令压缩文件。
tar
功能:打包命令,可以把目标打包。
可以压缩包文件。
1.命令格式:
tar[必要参数][选择参数][文件]
2.命令功能:
用来压缩和解压文件。tar本身不具有压缩功能。他是调用压缩功能实现的
3.命令参数:
必要参数有如下:
-A 新增压缩文件到已存在的压缩
-B 设置区块大小
-c 建立新的打包文件
-d 记录文件的差别
-r 添加文件到已经压缩的文件
-u 添加改变了和现有的文件到已经存在的压缩文件
-x 从压缩的文件中提取文件
-t 显示压缩文件的内容
-z 支持gzip解压文件
-j 支持bzip2解压文件
-Z 支持compress解压文件
-v 显示操作过程
-l 文件系统边界设置
-k 保留原有文件不覆盖
-m 保留文件不被覆盖
-W 确认压缩文件的正确性
可选参数如下:
-b 设置区块数目
-C 切换到指定目录
-f 指定打包文件
--help 显示帮助信息
--version 显示版本信息
常见解压/压缩命令
tar
解包:tar -xvf FileName.tar 打包:tar -cvf FileName.tar DirName (注:tar是打包,不是压缩!)
解压gzip压缩tar包
语法:tar –zxvf mytar.tar.gz
-z : 解压gz
-x:解包tar
-v:显示解压过程
-f:指定解压文件。
vim编辑器
vi有3个模式:插入模式、命令模式、低行模式。
插入模式:在此模式下可以输入字符,按ESC将回到命令模式。命令模式:可以移动光标、删除字符等。低行模式:可以保存文件、退出vi、设置vi、查找等功能(低行模式也可以看作是命令模式里的)。
打开文件、保存、关闭文件(vi命令模式下使用)
vi filename //打开filename文件 :w //保存文件 :w vpser.net //保存至vpser.net文件 :q //退出编辑器,如果文件已修改请使用下面的命令 :q! //退出编辑器,且不保存 :wq //退出编辑器,且保存文件
shift + z z //快捷方式必须在命令模式执行。
插入文本或行(vi命令模式下使用,执行下面命令后将进入插入模式,按ESC键可退出插入模式)
a //在当前光标位置的右边添加文本 i //在当前光标位置的左边添加文本 A //在当前行的末尾位置添加文本 I //在当前行的开始处添加文本(非空字符的行首) O //在当前行的上面新建一行 o //在当前行的下面新建一行 R //替换(覆盖)当前光标位置及后面的若干文本 J //合并光标所在行及下一行为一行(依然在命令模式)
移动光标(vi命令模式下使用)
1、使用上下左右方向键
2、命令模式下:h 向左、j 向下 、k 向上、l 向右。空格键 向右、Backspace 向左、Enter 移动到下一行首、- 移动到上一行首。
删除、恢复字符或行(vi命令模式下使用)
x //删除当前字符 nx //删除从光标开始的n个字符,n代表数字 dd //删除当前行 ndd //向下删除当前行在内的n行 u //撤销上一步操作 U //撤销对当前行的所有操作
搜索(vi命令模式下使用)
/vpser //向光标下搜索vpser字符串 ?vpser //向光标上搜索vpser字符串 n //向下搜索前一个搜素动作 N //向上搜索前一个搜索动作
跳至指定行(vi命令模式下使用)
n+ //向下跳n行 n- //向上跳n行 nG //跳到行号为n的行 G //跳至文件的底部
设置行号(vi命令模式下使用)
:set nu //显示行号 :set nonu //取消显示行号
复制、粘贴(vi命令模式下使用)
yy //将当前行复制到缓存区,也可以用 "ayy 复制,"a 为缓冲区,a也可以替换为a到z的任意字母,可以完成多个复制任务。nyy //将当前行向下n行复制到缓冲区,也可以用 "anyy 复制,"a 为缓冲区,a也可以替换为a到z的任意字母,可以完成多个复制任务。yw //复制从光标开始到词尾的字符。nyw //复制从光标开始的n个单词。y^ //复制从光标到行首的内容。VPS侦探 y$ //复制从光标到行尾的内容。p //粘贴剪切板里的内容在光标后,如果使用了前面的自定义缓冲区,建议使用"ap 进行粘贴。P //粘贴剪切板里的内容在光标前,如果使用了前面的自定义缓冲区,建议使用"aP 进行粘贴。
替换(vi命令模式下使用)
:s/old/new //用new替换行中首次出现的old,只针对光标所在行 :s/old/new/g //用new替换行中所有的old,行 :n,m s/old/new/g //用new替换从n到m行里所有的old,范围替换 :%s/old/new/g //用new替换当前文件里所有的old,全局替换
用户和组账户管理
linux操作系统是一个多用户操作系统,它允许多用户同时登录到系统上并使用资源。系统会根据账户来区分每个用户的文件,进程,任务和工作环境,使得每个用户工作都不受干扰
保存用户信息的文件:/etc/passwd
保存用户组的文件:/etc/group
保存用户组密码的文件:/etc/gshadow
Linux用户分类
超级用户:(root,UID=0)
普通用户:(UID在500到60000)
伪用户:(UID在1到499)
伪用户不能登陆系统,而且没有宿主目录
操作用户命令
添加用户(useradd)
添加用户命令:useradd [-选项] 用户名
-u 指定用户ID(uid)
-g 指定所属的组名(gid)
-G 指定多个组,用逗号“,”分开(Groups)
-c 用户描述(comment)
-e 失效时间(expire date)
更新用户(usermod)
修改用户命令:usermod(user modify)
-l 修改用户名 (login)usermod -l a b(b改为a)
-g 添加组 usermod -g sys
-G添加多个组 usermod -G sys,root tom
–L 锁定用户账号密码(Lock)
–U 解锁用户账号(Unlock)
删除用户(userdel)
删除用户命令:userdel(user delete)
-r 删除账号时同时删除目录(remove)
操作用户组命令
添加组(goupadd)
添加组:groupadd
-g 指定gid
修改组(groupmod)
修改组:groupmod
-n 更改组名(new group)
删除组(groupdel)
删除组:groupdel
groups 显示用户所属组
五、Linux目录结构
登录系统后,在当前命令窗口下输入命令:
ls /
你会看到如下图所示:
树状目录结构:
以下是对这些目录的解释:
/bin:bin是Binary的缩写, 这个目录存放着最经常使用的命令。
/boot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
/dev :dev是Device(设备)的缩写, 该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
/etc:这个目录用来存放所有的系统管理所需要的配置文件和子目录。
/home:用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
/lib:这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
/lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
/media:linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
/mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。
/opt:这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
/proc:这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
/root:该目录为系统管理员,也称作超级权限者的用户主目录。
/sbin:s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
/selinux:这个目录是Redhat/CentOS所特有的目录,Selinux是一个安全机制,类似于windows的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。
/srv:该目录存放一些服务启动之后需要提取的数据。
/sys:这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。
· sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。
该文件系统是内核设备树的一个直观反映。
当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
/tmp:这个目录是用来存放一些临时文件的。
/usr:这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。
/usr/bin:系统用户使用的应用程序。
/usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。
/usr/src:内核源代码默认的放置目录。
/var:这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
在linux系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。
/etc:上边也提到了,这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。
/bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在/bin/ls 目录下的。
值得提出的是,/bin, /usr/bin 是给系统用户使用的指令(除root外的通用户),而/sbin, /usr/sbin 则是给root使用的指令。
/var:这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在/var/log 目录下,另外mail的预设放置也是在这里。
六、Linux软件安装
Linux系统软件安装方式
Linux上的软件安装有以下几种常见方式:
1、二进制发布包
软件已经针对具体平台编译打包发布,只要解压,修改配置即可
2、RPM发布包
软件已经按照redhat的包管理工具规范RPM进行打包发布,需要获取到相应的软件RPM发布包,然后用RPM命令进行安装
3、Yum在线安装
软件已经以RPM规范打包,但发布在了网络上的一些服务器上,可用yum在线安装服务器上存在的rpm软件,并且会自动解决软件安装过程中的库依赖问题
(注:类似于maven)
4、源码编译安装
软件以源码工程的形式发布,需要获取到源码工程后用相应开发工具进行编译打包部署
软件安装有一个技巧,大家搜索的时候一定要指定好版本和系统,不然会有很多坑,举个例子。
JDK安装
1、上传jdk压缩包
2、解压jdk压缩包
tar -zxvf jdk-7u67-linux-x64.gz -C /usr/local/
3、修改环境变量PATH
vi /etc/profile
在文件最后加两行:
export JAVA_HOME=/usr/local/jdk1.7.0_67
export PATH=$PATH:$JAVA_HOME/bin
4、让环境变量生效
source /etc/profile
即可
Mysql安装
由于CentOS7的yum源中没有mysql,需要到mysql的官网下载yum repo配置文件。
下载命令:wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
然后进行yum源的安装:
rpm -ivh mysql57-community-release-el7-9.noarch.rpm
安装完成后,就可以使用yum命令安装mysql了:
yum -y install mysql-server
启动mysql:
systemctl start mysqld
查看mysql状态:
systemctl status mysqld
获取mysql的临时密码:
grep 'temporary password' /var/log/mysqld.log
登录mysql:(密码为上一步骤获取的临时密码)
mysql -u root -p(此处不用输入密码,按下回车后会专门要你再输入密码的)
登录成功后,做任何操作都会被要求先修改密码
show databases;
请注意:如果修改的密码太过简单,依然会提示error,修改失败
因为5.7及以上版本的数据库对密码做了强度要求,默认密码的要求必须是大小写字母数字特殊字母的组合且至少要8位长度
ALTER USER 'root'@'localhost' IDENTIFIED BY '新的密码';
按照系统的默认要求,修改密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY '-520Lemon-';
修改完成后,即可愉快的操作数据库:
show databases;
七、Yum命令
yum命令非常的重要,在大数据集群安装过程中也会频繁使用。所以单独来说明一下如何使用。
yum( Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。
能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。
yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。
yum 语法
yum [options] [command] [package ...]
·\options:**可选,选项包括-h(帮助),-y(当安装过程提示选择全部为"yes"),-q(不显示安装的过程)等等。
·\command:**要进行的操作。
·\package**操作的对象。
yum常用命令
· 1.列出所有可更新的软件清单命令:yum check-update
· 2.更新所有软件命令:yum update
· 3.仅安装指定的软件命令:yum install
· 4.仅更新指定的软件命令:yum update
· 5.列出所有可安裝的软件清单命令:yum list
· 6.删除软件包命令:yum remove
· 7.查找软件包 命令:yum search
· 8.清除缓存命令:
· yum clean packages: 清除缓存目录下的软件包
· yum clean headers: 清除缓存目录下的 headers
· yum clean oldheaders: 清除缓存目录下旧的 headers
· yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的headers
实例
安装 pam-devel
[root@www ~]# yum install pam-develSetting up Install ProcessParsing package install argumentsResolving Dependencies <==先检查软件的属性相依问题--> Running transaction check---> Package pam-devel.i386 0:0.99.6.2-4.el5 set to be updated--> Processing Dependency: pam = 0.99.6.2-4.el5 for package: pam-devel--> Running transaction check---> Package pam.i386 0:0.99.6.2-4.el5 set to be updated filelists.xml.gz 100% |=========================| 1.6 MB 00:05 filelists.xml.gz 100% |=========================| 138 kB 00:00-> Finished Dependency Resolution……(省略)
国内 yum 源
网易(163)yum源是国内最好的yum源之一 ,无论是速度还是软件版本,都非常的不错。
将yum源设置为163 yum,可以提升软件包安装和更新的速度,同时避免一些常见软件版本无法找到。
安装步骤
首先备份/etc/yum.repos.d/CentOS-Base.repo
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
下载对应版本repo文件, 放入/etc/yum.repos.d/(操作前请做好相应备份)
· CentOS5 :http://mirrors.163.com/.help/CentOS5-Base-163.repo
· CentOS6 :http://mirrors.163.com/.help/CentOS6-Base-163.repo
运行以下命令生成缓存
yum clean all
yum makecache
成功!
八、Shell编程
Shell是用户与内核进行交互操作的一种接口,目前最流行的Shell称为bash Shell
Shell也是一门编程语言\<解释型的编程语言>**,即shell脚本<就是在用linux的shell命令编程>
一个系统可以存在多个shell,可以通过cat /etc/shells命令查看系统中安装的shell,不同的shell可能支持的命令语法是不相同的
代码写在普通文本文件中,通常以 .sh为后缀名
vi hello.sh !/bin/bash ## 表示用哪一种shell解析器来解析执行我们的这个脚本程序 echo "hello world"
执行脚本
sh hello.sh
或给脚本添加x权限,直接执行
chmod 755 hello.sh
./hello.sh
Linux Shell中的变量分为“系统变量”和“用户自定义变量”
可以通过set命令查看系统变量
系统变量:$HOME、$PWD、$SHELL、$USER等等
Linux Shell中的变量分为“系统变量”和“用户自定义变量”
可以通过set命令查看系统变量
变量
shell可以自定义变量
变量=值 (例如STR=abc)
A=ls -la
## 反引号,运行里面的命令,并把结果返回给变量A
A=$(ls -la) ## 等价于反引号
$? 表示上一个命令退出的状态码
$$ 表示当前进程编号
$0 表示当前脚本名称
$n 表示n位置的输入参数(n代表数字,n>=1)
$# 表示参数的个数,常用于循环
$*和$@ 都表示参数列表
运算符
expr m + n 或$((m+n)) 注意expr运算符间要有空格
用(()) ((1+2))
用$[] a=$[1+2]
流程控制
if
if condition then statements [elif condition then statements...] [else statements ] fi
while
while expression do command … done
for
for N in 1 2 3 do echo $N done 或 for N in 1 2 3; do echo $N; done 或 for N in {1..3}; do echo $N; done
函数
#!/bin/sh # func1.sh hello() ## 函数定义 { echo "Hello there today's date is `date +%Y-%m-%d`" # return 2 ###返回值其实是状态码,只能在[0-255]范围内 } hello # echo $? 获取函数的return值 echo "now going to the function hello" echo "back from the function" 函数调用: function hello() 或 function hello 或 hello
也是应很多初学者的建议,整理了这篇文章。从操作系统到Linux的实践,进行了笔记记录。主要是为以后的大数据学习做好准备。掌握了Linux的基础,并具有一定的编程基础,就可以进行大数据的学习和大数据集群环境的安装了。