[root@linux ~]#和 [root@linux /]#root和刷机的区别别

执行Shell脚本的4种方法及区别介绍
投稿:junjie
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了执行Shell脚本的4种方法及区别介绍,本文讲解了相对路径方式、绝对路径方式、bash命令调用、相对或绝对方式以及说下几种方式的区别,需要的朋友可以参考下
执行shell脚本有以下几种方式
1、相对路径方式,需先cd到脚本路径下
[root@banking tmp]# cd /tmp&
[root@banking tmp]# ./ceshi.sh
脚本执行成功&
2、绝对路径方式
[root@banking tmp]# /tmp/ceshi.sh&&
脚本执行成功&
3、bash命令调用
[root@banking /]# bash /tmp/ceshi.sh
脚本执行成功&
4、. (空格)& 相对或绝对方式
[root@banking /]# . /tmp/ceshi.sh&&
说下几种方式的区别
第一种和第二种没有什么区别,两种方式都需要提前赋予脚本以执行权限。
第三种是把脚本当做bash的调用来处理,所以,脚本不需要有执行权限就可以执行。
前三种方式都是在当前shell中打开一个子shell来执行脚本内容,当脚本内容结束,则子shell关闭,回到父shell中。
第四种是使脚本内容在当前shell里执行,而不是单独开子shell执行。
开子shell与不开子shell的区别就在于,环境变量的继承关系,如在子shell中设置的当前变量,不做特殊通道处理的话,父shell是不可见的。
而在当前shell中执行的话,则所有设置的环境变量都是直接生效可用的。
[root@banking /]# cat /tmp/ceshi.sh&&
1、前三种执行方式下的pstree显示
├─sshd─┬─sshd───bash───bash───top&
│&&&&& └─sshd───bash───pstree&
2、第四种执行方式下的pstree显示
├─sshd─┬─sshd───bash───top&
│&&&&& └─sshd───bash───pstree&
3、验证环境变量设置的继承关系及可见关系
建立两个脚本,father.sh和subshell.sh。其中father.sh调用subshell.sh
[root@banking /]# cat /tmp/father.sh
v_ceshi='father'
#-------父shell中定义变量
echo "以子shell方式调用脚本"
/tmp/subshell.sh
echo "输出v_ceshi值为${v_ceshi}"
echo "在当前shell中执行脚本"
. /tmp/subshell.sh
echo "输出v_ceshi值为${v_ceshi}"
[root@banking /]#
[root@banking /]# cat /tmp/subshell.sh
v_ceshi=son
[root@banking /]#
执行结果为
[root@banking /]# /tmp/father.sh
以子shell方式调用脚本
输出v_ceshi值为father
在当前shell中执行脚本
输出v_ceshi值为son
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具博客访问: 268013
博文数量: 159
博客积分: 2250
博客等级: 大尉
技术积分: 1555
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: LINUX
转自/blog/730280我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索。这些是从网上找到的资料,因为有时很长时间不会用到,当要用的时候经常弄混了,所以放到这里方便使用。
which&&&&&& 查看可执行文件的位置
whereis&&& 查看文件的位置
locate&&&&&& 配 合数据库查看文件位置
find&&&&&&&&& 实际搜寻硬盘查询文件名称
[root@redhat ~]# which 可执行文件名称
[root@redhat ~]# which passwd
/usr/bin/passwd
which是通过 PATH环境变量到该路径内查找可执行文件,所以基本的功能是寻找可执行文件
2、whereis
[root@redhat ~]# whereis [-bmsu] 文件或者目录名称
参数说 明:
-b : 只找二进制文件
-m: 只找在说明文件manual路径下的文件
-s : 只找source源文件
-u : 没有说明文档的文件
[root@redhat ~]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz
将和passwd文件相关的文件都查找出来
[root@redhat ~]# whereis -b passwd
passwd: /usr/bin/passwd /etc/passwd
只将二进制文件 查找出来
和find相比,whereis查找的速度非常快,这是因为linux系统会将 系统内的所有文件都记录在一个数据库文件中,当使用whereis和下面即将介绍的locate时,会从数据库中查找数据,而不是像find命令那样,通 过遍历硬盘来查找,效率自然会很高。
但是该数据库文件并不是实时更新,默认情况下时一星期更新一次,因此,我们在用whereis和locate 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。
3、 locate
[root@redhat ~]# locate 文件或者目录名称
[root@redhat ~]# locate passwd
/home/weblogic/bea/user_projects/domains/zhanggongzhe112/myserver/stage/_appsdir_DB_war/DB.war/jsp/as/user/passwd.jsp
/home/weblogic/bea/user_projects/domains/zhanggongzhe112/myserver/stage/_appsdir_admin_war/admin.war/jsp/platform/passwd.jsp
/lib/security/pam_unix_passwd.so
/lib/security/pam_passwdqc.so
/usr/include/rpcsvc/yppasswd.x
/usr/include/rpcsvc/yppasswd.h
/usr/lib/perl5/5.8.5/i386-linux-thread-multi/rpcsvc/yppasswd.ph
/usr/lib/kde3/kded_kpasswdserver.la
/usr/lib/kde3/kded_kpasswdserver.so
/usr/lib/ruby/1.8/webrick/httpauth/htpasswd.rb
/usr/bin/vncpasswd
/usr/bin/userpasswd
/usr/bin/yppasswd
[root@redhat ~]# find 路径 参数
参 数说明:
时间查找参数:
-atime n :将n*24小时内存取过的的文件列出来
-ctime n :将n*24小时内改变、新增的文件或者目录列出来
-mtime n :将n*24小时内修改过的文件或者目录列出来
-newer file :把比file还要新的文件列出来
名称查找参数:
-gid n&&&&&& :寻找群组ID为n的文件
-group name& :寻找群组名称为name的文件
-uid n&&&&&& :寻找拥有者ID为n的文件
-user name&& :寻找用户者名称为name的文件
-name file&& :寻找文件名为file的文件(可以使用通配符)
[root@redhat ~]# find / -name zgz
/home/zgz/zgz
/home/weblogic/bea/user_projects/domains/zgz
/home/oracle/product/10g/cfgtoollogs/dbca/zgz
/home/oracle/product/10g/cfgtoollogs/emca/zgz
/home/oracle/oradata/zgz
[root@redhat ~]# find / -name '*zgz*'
/home/zgz/zgz1
/home/zgz/zgzdirzgz
/home/zgz/zgz
/home/zgz/zgzdir
/home/weblogic/bea/user_projects/domains/zgz
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00006
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00002
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00004
/home/weblogic/bea/user_projects/domains/zgz/zgz.log
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00008
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00005
当我们用whereis和locate无法查找到我们需要的文件时,可以使用find,但是find是在硬盘上遍历查 找,因此非常消耗硬盘的资源,而且效率也非常低,因此建议大家优先使用whereis和locate。
locate 是在数据库里查找,数据库大至每天更新一次。
whereis 可以找到可执行命令和man page
find 就是根据条件查找文件。
which 可以找到可执行文件和别名(alias)
阅读(29480) | 评论(1) | 转发(3) |
相关热门文章
给主人留下些什么吧!~~
总结的不错,谢谢分享
请登录后评论。linux权限之su和sudo的区别
我们都知道很多的文件都只有root有权限来修改,那么在我们平时的开发过程中都建议使用一般账号来登录进行开发,还记得前面说到的ssh吗,我们也是将允许root登录设置成no,到必要的时候再切换到root来进行操作,这样就不至于有风险。那么我们如何切换身份呢。
su是最简单的身份切换名,用su我们可以进行任何用户的切换,一般都是su - username,然后输入密码就ok了,但是root用su切换到其他身份的时候是不需要输入密码的。起初我都是用su来切换的,后来老大看见了说我这种方式切换是不好的,你可以尝试其他的方式来切换。我觉得这样切换很方便啊,那到底是不好在哪里呢,后面再看第二种身份的切换方式就知道了。
一般我们切换身份都是切换到root,然后进行一些只有root能干的事,比如修改配置文件,比如安装软件,这些都只能是root才有权限干的事,切换到root可以是单纯的su,或者是su -和su - root,后面两个是一样的意思。
单纯使用su切换到root,读取变量的方式是non-login shell,这种方式下很多的变量都不会改变,尤其是PATH,所以root用的很多的命令都只能用绝对路径来执行,这种方式只是切换到root的身份。而用su -这种方式的话,是login shell方式,它是先以root身份登录然后再执行别的操作。
如果我们只要切换到root做一次操作就好了,只要在su后面加个-c参数就好了,执行完这次操作后,又会自动切换回我们自己的身份,很方便。
那么如果有很多人管理这个主机的话,那不是很多人都要知道root的密码吗,而且可能有的人只是单纯的进行一次root操作就可以了,这个时候,su方式就不是很好,root密码越少人知道越好,越少人知道就越安全,这时就需要第二种方式了。
相比于su切换身份需要用户的密码,经常性的是需要root密码,sudo只是需要自己的密码,就可以以其他用户的身份来执行命令,经常是以root的身份执行命令,也并非所有人都可以用sudo:
这里我要查看/etc/shadow这个文件的前三行,但是却发现看不了,提示的错误是说我当前这个用户不在sudoers这个文件,所以sudo是依赖于/etc/sudoers这个配置文件的。sudo的执行有这样一个流程:
1).当用户执行sudo时,于/etc/sudoers文件中查找该用户是否有执行sudo的权限;
2).若用户具有可执行sudo的权限,那么让用户输入用户自己的密码,注意这里输入的是用户自己的密码;
3).如果密码正确,变开始进行sudo后面的命令,root执行sudo是不需要输入密码的,切换到的身份与执行者身份相同的时候,也不需要输入密码。
下面看看/etc/sudoers这个配置文件:
为何刚开始只有root能执行sudo,切换到root身份通过visudo查看/etc/sudoers这个配置文件,如果是vim /etc/sudoers是可以查看的,但是不能修改,因为sudoers这个文件是由语法的,只能通过visudo来修改。第一个红色方框那行代码,这行代码是什么意思呢,第一列root不用多说,是用户账号,第二列的ALL意思是登陆者的来源主机名,第三列等号右边小括号中的ALL是代表可以切换的身份,第四列ALL是可执行的命令。
1).单个用户的sudoers语法:
如果我要我当前这个用户能执行root的所有操作,那么我只要加一行learnpython ALL=(ALL) ALL。那么如果有很多人需要执行sudo,那不是要写编写很多行啊,这样不是很麻烦,这样就要用到用户组了。
2).利用用户组处理visudo:
看看第二个红色方框那行代码,%wheel代表wheel用户组,如果我们将需要执行root所有操作的用户都加入到wheel用户组,或者我们自定义的用户组,然后添加一行代码,那么就不用一个用户一个用户的添加进来了,这样不是很省事啊。
3).限制用户sudo的权限:
但是经常我们不需要用户有那么大的权限,只要让他们具有他们负责范围的权限就可以了,比如有的有的人来管理密码,我们就只让他能进行密码的管理,而不让他有别的权限,这样就需要权限的控制了。如果我让我当前用户来管理密码,即learnpython这个用户能使用passwd这个命令来帮root修改用户密码,只要加这行learnpython ALL=(root) /usr/bin/passwd,那么learnpython这个用户就可以使用passwd这个命令了:
但是如果只是执行sudo passwd命令,修改的就是root的密码,当然我们不希望普通用户能具有修改root密码的权限,那么在visudo的时候就需要将命令的参数限制好,如改成这样:
[root@localhost ~]# visudo
learnpython
ALL=(root)
!/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
4).通过别名设置visudo
查看sudoers这个文件的时候,你会看见User_Alias,Host_Alias和Cmnd_Alias这些东西,他们都是一些别名,User_Alias表示具有sudo权限的用户列表,就是第一列参数,Host_Alias表示主机的列表,就是第二列参数,Cmnd_Alias表示允许执行命令的列表,就是第四列参数,还有个Runas_Alias,我初始的sudoers里是没有的,这个表示用户以什么身份登录,也就是第三列参数。
所以如果有几个密码管理员的话就可以加上如下代码:
[root@localhost ~]# visudo
User_Alias PWMNG = manager1, manager2, manager3
Cmnd_Alias PWCMD = !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
ALL=(root)
5).sudo搭配su
从上面来看,我们都只是切换到别的用户然后执行命令,接着就切回到我们自己的用户了,如果我们要像su那样直接切换到root,然后干自己想干的,这个时候,就要将命令修改成/bin/su -,如下:
[root@localhost ~]# visudo
User_Alias ADMINS = user1, user2, user3
ALL=(root)
当然这个是需要慎重了,因为这样用户user1,user2,user3等就直接切换到root了,切换后他们就是老大了。
有没有发现,当我们连续使用sudo的时候,在一定时间内是不用再次输入我们的密码,这个其实是系统自己设定的,在五分钟之内执行sudo只需要输入一次密码就可以了。
了解完su和sudo,是不是发现sudo有太多的好处了。su方式切换是需要输入目标用户的密码,而sudo只需要输入自己的密码,所以sudo可以保护目标用户的密码不外流的。当帮root管理系统的时候,su是直接将root所有权利交给用户,而sudo可以更好分工,只要配置好/etc/sudoers,这样sudo可以保护系统更安全,而且分工明确,有条不紊。
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'linux命令下 ~ 跟 /有什么区别_百度知道
linux命令下 ~ 跟 /有什么区别
提问者采纳
~代表家目录:r旦哗测狙爻缴诧斜超铆oot用户的家目录是/root,其他用户的家目录一般是/home/用户名/代表根目录[root@bogon ~]#root:代表当前登录用户bogon:代表机器名(一般在/etc/hostname 下面可以修改)~:代表家目录#:命令提示符(root是#,其他用户是$)
提问者评价
现在是菜鸟,将来不会
其他类似问题
为您推荐:
linux命令的相关知识
其他4条回答
~代表的是用户文件夹,/代表的是根目录,譬如你图中的,你旦哗测狙爻缴诧斜超铆用root登陆,那么~就是“/root”,/就是“/”
~表示个人主目录 即root用户的主文件夹/表示根目录
既系统文件夹
目录 不同啊
下面是根目录啊!
在你的图中的两个路劲是一样的
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁linux中[root@localhost ~]和root@localhost /]的区别
在linux中可能会遇到[root@localhost ~]和root@localhost /]两种目录结构,但是他们是什么区别呢?简而言之:[root@localhost~]是linux主目录,相当于/root当你在其下输入ls时,可看到:[root@localhost/]是根分区,相当于根目录当你在其下输入ls时,可看到:可以看到,在根目录下,有/root目录和/home目录像root用户的主目录是/root,其它用户的主目录一般是/home/username注:不管你用哪个用户身份登录,系统的目录结构是不变的,只是相关权限改变了而已
无相关信息
最新教程周点击榜
微信扫一扫

我要回帖

更多关于 root和刷机的区别 的文章

 

随机推荐