什么是linux shell
linux shell是与linux内核之间的接口程序,为用户提供使用操作系统的接口,当xshell向linux传输命令时,内核会做出相应的反应,当普通用户登录时,系统将执行hshell程序,shell会提供一个命令行提示,作为默认值,普通用户是$作为提示符,超级用户(root)用“#”作为提示符,在xshell下,你可以使用如下按键组合键来编辑和回调命令
命令 | 描述 |
---|---|
ctrl+w | 删除光标位置前的单词 |
ctrl+u | 删除光标之前的所有内容 |
tab | 自动补全文件名称,目录名称等 |
ctrl+r | 搜索先前使用的命令 |
ctrl+c | 终止当前命令 |
ctrl+d | 退出登录xshell,也可以输入logout,exit命令 |
ctrl+t | 调换光标前的两个单词 |
Ctrl+a | 光标移到命令行头 |
Ctrl+e | 光标移动到命令行尾 |
Ctrl+k | 删除光标之后的所有内容 |
Ctrl+y | 在光标处粘贴复制或者剪切的内容 |
Ctrl+l | 清屏 |
Crtl+Alt+T | 开启一个shell终端。 |
为什么使用xshell
- 使用简单
- 节约时间,可以吧冗长的重复的一连串命令合并成一条简单的命令
- 使系统管理任务自动化
常用到xshell的实例
- 监控linux系统
- 备份数据或创建快照
- 创建邮件告警系统
- 查找耗尽系统资源的进程
- 查找是否所有的网络服务都正常运行等等
linux的重要组成部分
名称 | 描述 |
---|---|
内核linux操作系统的核心 | 内核分为进程管理系统,内存管理系统,i/o管理系统,文件管理系统等四个子系统 |
shell | 为用户和内核提供一个交互的接口 ,其中包括读取命令行,解释他的含义并执行等 |
终端模拟器 | 它允许用户输入命令并在屏幕上回显命令的运行结果 |
linux桌面和窗口管理器 | linux左面是各种软件应用程序的集合,它包括文件管理器,窗口管理器,终端模拟器等等 |
linux系统变量
env/printenv 查看系统变量
echo $变量名/printf 查看某个变量的值
变量名=值,给变量赋值或定义变量
unsetv 变量名、函数,删除变量或函数(注意:不能删除一个只读的变量)
${变量名?错误信息/变量名:?错误信息},判断变量名是否存在
####系统变量的命名规则
变量名必须以字母或下划线字符“_”开头,后面跟字母,数字或下划线字符,第一个字符不能为字符,不要使用?、*等特殊字符(变量名是大小写敏感的)
xshell中的扩展
| 扩展类型 |描述 |实例|
| ------------ | ------------ |
| 大括号扩展 | 是一种能够生成任意字符串的机制,在形式上有一种可选的前缀,是一组包含在大括号内的用逗号分隔的字符串或者序列表达式,按照从左到右的顺序依次排列 |echo{a…f}(a到f的字符),echo{1,5}(1到5的数字),在bash4中,新增了在序列表达式中指定增量。eg:{start…end…incr}(incr代表增量)
| 破浪号扩展| 用来指代自己或他人的主目录 |cd ~
|参数和变量扩展|||
|命令替换|| |
|算数扩展|||
|进程替换|||
|单词拆分|||
|文件名扩展||||
linux的创建和使用别名
注意:虽然别名的使用简单而方便,但你要非常谨慎的使用别名替换标准命令
创建别名
注意:修改~/.bashrc文件,需要重新启动xshell后才会生效
语法:alias name=‘conmand’ (name:别名,conmond:xshell命令)
例子:alias ll=‘ls -l’
查看别名
语法:alias name
例子:alias ll
删除别名
语法 :unalias name
例子:unalias ll
xshell常用命令
查看文件和目录
命令 | 描述 |
---|---|
ls -l | 每一行显示一条记录 |
ls -lh | 显示的格式更容易满足人的阅读习惯 |
ls -f | 将使用不同的特殊字符归类不同的文件类型(/:(表示目录),无特殊字符:表示普通文件,@:表示连接文件,*:表示可执行文件) |
ls -ltr | 将以长列表格式按文件或目录的修改时间倒序的列出文件和目录 |
ls -ls | 将以长列表格式按文件的大小顺序列出文件和目录 |
ls -a | 将列出包括隐藏文件或目录在内的所有文件和目录,包括“.”(当前目录)“和…(父目录)” |
cat命令实例
cat命令让我们可以查看文件的内容、连接文件,创建一个或多个文件和重定向输出到终端或文件
命令 | 描述 |
---|---|
cat 文件名称 | 查看文件的内容(可以查看读个文件,用空格隔开) |
cat -n 文件名称 | 查看文件内容并显示行号 |
cat -b 文件名称 | 与-n相似,只是只查看非空白行的行号 |
less、more命令实例,分频显示文件
more命令时用于一次翻阅一整屏文件的过滤器,less命令与more命令类似,支持向前向后翻页,但less命令不需要再查看前加载整个文件,所有更快速
命令 | 描述 |
---|---|
more文件名称 | 查看文件 ,按空格键会自动显示下一页的内容 |
more -num 文件名称 | 指定一次显示的行数 |
显示头部和尾部命令
head:显示头部命令。head -number 文件名称
tail:显示文件尾部(默认显示最后十行内容)tail -number 文件名称,使用-f命令可以及时打印新写入的行,常用这个监控实时的日志信息
file命令,查看文件类型
语法: file 文件名称或目录名称
f ile -i 文件名称或目录名称类型的信息
wc命令,查看文件统计信息
wc命令用于查看文件的行数,单词书和字符数等信息,语法如下:
wc filename
X :表示行数
Y: 表示单词数
Z:字节数
fineame:表示文件名
其他使用:
-l:只统计文件的行数
-w:只统计文件的单词数
-c:只统计文件的字节数
-L:只统计文件最长行的长度
find命令实例:查找文件或目录
用于根据你指定的参数搜索和定位文件和目录的列表,简单的使用语法如下:
find 目录 -name 搜索的关键字
常用命令:
命令 | 描述 |
---|---|
find . name test | 在当前目录下,查找文件名为test的文件 |
find . iname test | 在当前目录下,不区分大小写,查找文件名为test的文件 |
find . -type d -name tem | 在当前目录下,目录名称是tem的目录 |
find . -type f -name “*txt”tem | 在当前目录下,所有名称是txt的文件 |
find . -type f -perm 777 | 在当前目录下,文件权限是777的所有文件 |
find . -type f ! -perm 777 | 在当前目录下,文件权限不是777的所有文件 |
find . -type f ! -perm /a+w | 在当前目录下,所有文件只读文件 |
find . -type f -empty | 在当前目录下,找出所有空文件 |
find . -type d -empty | 在当前目录下,找出所有空目录 |
find . -type f -name “.*” | 在当前目录下,找出所有隐藏文件 |
find . -user root | 在当前目录下,找出所有所有者是root的文件或目录 |
find . -group developer | 在当前目录下,找出所有用户组是developer的文件或目录 |
find ~ -type f -mtime 3 | 找出该账号主目录下,3天前修改的文件 |
find ~ -type f -mtime +3 | 找出该账号主目录下,30天以前修改的文件 |
find ~ -type f -mtime -3 | 找出该账号主目录下,3天以内修改的文件 |
find ~ -type f -mtime +30 -mtime -60 | 找出该账号主目录下,30天以前60天以内修改的文件 |
find main -type f -cmin -60 | 找出main目录下,1小时以内修改的文件 |
find main -type f -amin -60 | 找出main目录下,1小时以内访问过的文件 |
find ~ -type f -size -50MB | 找出主目录下,大小是50MB的的文件 |
find ~ -type f -size +50MB -size -100MB | 找出主目录下,大小是大于50MB小于100MB的文件 |
touch命令实例,创建文件
touch命令可用于创建,变更和修改文件的时间戳,touch命令有如下选项:
touch -a 文件名称:改变或更新文件的最新访问时间,如果文件不存在,则会自动创建
touch -c 文件名称:文件不存在不创建任何文件,用当前时间更新文件的时间戳
touch -m 文件名称:只改变修改时间,而访问时间不修改
touch -c -t YYMMDDHHMM filename 可以用-c和-t选项,来明确设置文件的时间
touch -r 文件名称 文件名称2:使用文件名称的时间戳更新文件名称2的时间戳
创建文件命令:
touch 文件名称(一次性创建多个文件 touch 文件名称 文件名称)
####mkdir命令实例,创建目录
语法:
**mkdir: **父目录/子目录
**mkdir -p 主目录/子目录: **创建父目录和子目录,即递归创建目录(注意:使用-p选项,如果目录已经存在或不存在会阻止错误的发生)
** mkdir -p -m 777 父目录/子目录或mkdir -p a=rwx 父目录/子目录: **创建目录的同事,设置权限(777:任何人都可以读写和访问)
cp命令实例:复制文件或目录
语法:
- cp file.txt newfile.txt:创建file.txt的副本
- cp file.txt /tmp/:复制当前目录下的文件file.txt到tmp目录下
- cp * /tmp:复制当前目录下的所有文件到/tem目录下
- cp -p filename 新地址及文件名,使用-p选项,可以保留源文件的所有者,用户组,权限,修改和访问时间,以及其他扩展属性
(使用-R和-r选项,可以递归复制目录)
cp的常用选项:
-a:存档模式,相当于-dpR
-d:保留软连接
-p:保留权限,所有权和时间戳等信息
-R:递归的复制目录
####ln命令实例:连接文件和目录
ln命令用于创建软连接和硬连接
eg:
ln -s source dist # 建立软连接
ln source dist # 建立硬连接
(注意:linux不允许给目录创建硬链接,当你创建软连接时,如果已经存在与此软连接同名的文件,那么你可以使用-backup选项,让ln命令在创建这个新链接之前,先备份已经存在的同名文件,如果不想备份,而是覆盖已存在的文件,则使用-f)
实例:
ln -s httpd.conf confighttp
其中 httpd.conf 就是源文件,confighttp是链接文件名,其作用是当编辑confighttp
,实际上是链接编辑httpd.conf。
如果要删除软链接:
rm -rf confighttp
这样只会删除confighttp链接文件,而不会删除源文件httpd.conf。
相对于软连接,还有硬链接,
建立硬链接命令:
ln httpd.conf confighttp
硬链接文件相当于一个文件存储在两个位置,可以有效防止误删。
####mv命令实例,重命名文件和目录
mv命令用于将文件和目录从一个位置移动到另外一个位置,除了移动文件,mv命令还可用于修改文件或目录的名字
语法:mv source… 目录
例子:
mv source.txt /tmp:将当前目录下的文件source.txt移动目录tmp下
mv dir1 dir2 dir_dist:将目录dir1,dir2一道目录dir_dist下
mv old.txt new.txt:使用mv命令将当前目录下的文件old.txt更名为new.txt
mv olddir newdir:将目录olddir更名为newdir
mv * /rmp/ :当前目录下的多有文件移动到tmp目录下
mv -u dir1/* dir2/:移动dir中所有且不存在dir2中的文件
注意:默认情况下,如果目标文件或目录已存在,mv命令并不会提示你任何信息,而是直接覆盖,为了避免这个问题,可以使用-i选项,来提示确认是否覆盖。eg:mv>注意:默认情况下,如果目标文件或目录已存在,mv命令并不会提示你任何信息,而是直接覆盖,为了避免这个问题,可以使用-i选项,来提示确认是否覆盖。eg:mv -i old.txt new.txt
#### rm命令实例:删除文件或目录 rm *:删除当前目录下的所有文件 rm ~/temp/*:删除,前账号主目录下temp目录中的所有文件 rm -i test.txt:使用i选项,在删除前提示用户是否删除 rm -i test.txt rm *.doc :删除当前目录下“.doc“为后缀的文件 rm *movie*:删除当前目录下所有文件名包含movie字符串的文件 rm a*:删除当前目录下所有以小写字母“a”开头的文件 rm *.??:删除当前目录下文件扩展名有两个字符的所有文件(一个?匹配一个字符) rm * [abc] *: 删除当前目录下文件名中包含字母a,b,c的所有文件 注:[]用于匹配括号内的任意一个字符 rm *[0-9]* :删除当前目录下文件名中包含字母0-9有文件 rm *.[ch]:删除当前目录下文件扩展名是a或者h的所有文件 rm -rf /tmp/*:删除/tmp目录下所有文件以及子目录注意: -f:删除前不提示用户确认,并忽略不存在的文件 -r(或-R):递归的删除目录及其下的内容
Linux文件权限详解
Linux系统中不仅是对用户与组根据UID,GID进行了管理,还对Linux系统中的文件,按照用户与组进行分类,针对不同的群体进行了权限管理,用他来确定谁能通过何种方式对文件和目录进行访问和操作。
####一:文件权限
查看权限:ls -l
返回结果详解:
文件的权限针对三类对象进行定义
- owner 属主,缩写u
- group 属组,缩写g
- other 其他,缩写o
每个文件针对每类访问者定义了三种主要权限 - r:Read 读
- w:Write 写
- x:eXecute 执行
另 X:针对目录加执行权限,文件不加执行权限(因文件具备执行权限有安全隐患) 注意:root账户不受文件权限的读写限制,执行权限受限制
**对于文件和目录来说,r,w,x有着不同的作用和含义:**1. 针对文件:
- r:读取文件内容
- w:修改文件内容
- x:执行权限对除二进制程序以外的文件没什么意义
2. 针对目录:目录本质可看做是存放文件列表、节点号等内容的文件
- r:查看目录下的文件列表
- w:删除和创建目录下的文件
- x:可以cd进入目录,能查看目录中文件的详细属性,能访问目录下文件内容(基础权限)
- 用户获取文件权限的顺序: 先看是否为所有者,如果是,则后面权限不看;再看是否为所属组,如果是,则后面权限不看。
二:修改文件访问权限的方法
chmod 修改权限 change mode
方法1:mode法
语法:chmod who opt per file
参数描述:
- who:u g o a(all)
- opt:+ – =
- per:r w x X
方法2:数字法
语法:chmod XXX file
参数描述:
rwx rw- r–
111 110 100
7 6 4
r:4
w:2
x:1
例:chmod 764 file 给file文件添加 rwxrw-r– 权限
chmod -R +X dir 给dir目录添加X执行权限,dir目录下文件不添加执行权限
(如果dir目录下有文件已具备执行权限,则添加该文件执行权限)
####三、UMASK值
作用:取消对应的权限,影响创建文件和目录的默认权限 - 对目录:umask+default=777(dir)
- 对文件:666-umask:观察结果,如果有奇数,奇数位+1,偶数不变
####四、文件权限操作的常用命令 - chown 设置文件所有者(普通用户无法修改文件所有者)
- chgrp 设置文件所属组(普通用户要想该所属组,前提是文件所有者为自己,自己在所属组中)
- chmod 设置指定文件权限
( -R 递归,–reference=f1 f2 f3 参考f1文件权限设置f2,f3文件) - chattr 给指定文件添加保护,避免root账户误操作
- lsattr 查看指定文件是否有锁定状态
- setfacl 设置文件ACL权限
- getfacl 查看文件ACL权限
df -h: df命令用于显示硬盘当前的使用情况,h参数的意思是以易于理解阅读的方式显示结果,这个命令会输出硬盘使用的百分比,以及剩余的大小。
命令行提示符的意义
例如:[root@localhost dev]#
- roo:代表当前用户
- @localhost 代表当前主机名
- dev:代表当前目录
- #:代表管理员权限 ,¥代表普通用户权限
##帮助命令
man 命令名称,如:man ls
命令名称 --help ,如:ls --help
##关机命令
shutdown -h now:立马关机
shutdown -h 20:00 :今晚八点关机
shutdown -h+10:十分钟以后关机
shutdown -r now :立马重启
shutdowm -r +10:十分钟以后重启
halt 关机 (等于shutdown -h now命令)
reboot 重启(等于shutdown -r now )
init 6 重启
创建开机启动项:
(1)编辑文件 /etc/rc.local
输入命令:vim /etc/rc.local 将出现类似如下的文本片段:
#!/bin/sh
This script will be executed after all the other init scripts.
You can put your own initialization stuff in here if you don’t
want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
/etc/init.d/mysqld start #mysql开机启动
/etc/init.d/nginx start #nginx开机启动
/etc/init.d/php-fpm start #php-fpm开机启动
/etc/init.d/memcached start #memcache开机启动
#在文件末尾(exit 0之前)加上你开机需要启动的程序或执行的命令即可(执行的程序需要写绝对路径,添加到系统环境变量的除外),如:
/usr/local/thttpd/sbin/thttpd -C /usr/local/thttpd/etc/thttpd.conf
** (2)自己写一个shell脚本**
将写好的脚本(.sh文件)放到目录 /etc/profile.d/ 下,系统启动后就会自动执行该目录下的所有shell脚本。
(3)通过chkconfig命令设置
将启动文件cp到 /etc/init.d/或者/etc/rc.d/init.d/(前者是后者的软连接)下
vim 启动文件,文件前面务必添加如下三行代码,否侧会提示chkconfig不支持
#!/bin/sh 告诉系统使用的shell,所以的shell脚本都是这样
#chkconfig: 35 20 80 分别代表运行级别,启动优先权,关闭优先权,此行代码必须
#description: http server(自己随便发挥)//两行都注释掉!!!,此行代码必须
chkconfig --add 脚本文件名 操作后就已经添加了
文件的权限
文件的所有者:用户user(u前三位数,),用户组group(g中间三位数),其他other(o后三位数)
可读:r ,4 可写:w ,2 可执行:x ,1
分配权限:
1:chmod 777 文件名称(代表用户,用户组,other的权限都赋值为:可读可写可执行)
2:chmod u=wx 文件名称(代表给用户赋权为可写和可执行)
3:chmod +x 文件名称(给三个所有者都赋权限为执行)
4:chmod u-r 文件名称 ( 表示用户的权限减去可读权限)
4:chmod g-w 文件名称 ( 表示用户组权限减去可写权限)