第十讲——创建用户的相关文件以及系统目录 上一讲,我们讲了用户的添加删除、权限的更改、用户组的添加删除。基本上能够认识一个用户添加的流程了。 那么添加一个用户会涉及到哪些文件?我们就一起来看上一看。 首先讲一讲/etc/passwd文件,这个文件里包含了与用户相关的大量信息,这个文件名是不是似曾相识的感觉,是的,就是那个给用户添加密码的命令。 还记得我们讲过的man命令吗?使用man 5 passwd就可以查看这个文件里的相关格式,不过这个文档应该是英文的,所以说,还是要努力的学习学习英语。 就简要的说一说这个文件的构成,/etc/passwd文件分为七个字段,每一个字段之间用冒号隔开 第一字段:用户名 第二字段:密码占位符,表示用户有密码,但是密码并不保存在这里,而是在一个叫做/etc/shadow的文件里 第三字段:UID,就是用户id 第四字段:GID,就是基本组id 第五字段:用户相关信息,但绝大多情况下为空。 第六字段:用户的家目录,系统用户虽然指定了家目录路径,但是是没有家目录的。 第七字段:用户的默认登陆后的shell,系统用户的shell大多为nologin,意思就是不能登录。 如果我们想要手动添加一个用户在这里编辑就好了,不过现在是没有办法的,因为还不会使用vi编辑器。 接下来讲一讲存放密码的文件/etc/shadow文件,又称为影子文件。 此文件我们使用man 5 shadow 也是可以查看其文件格式的。shadow文件也是由冒号分隔字段,共有九段,大可不必害怕,就是几个时间而已。 /etc/passwd 第一字段:用户名,当然是用户名,不然怎么知道是谁的密码,本流氓有些想不通,不是说好了用UID嘛,shadow文件里并没有UID,咳咳,这个有待验证。 第二字段:密码,俩感叹号的不给登录,是的,那一长串乱七八糟的字符就是密码了,密码字段用$隔成了三段,第一段意思是加密的方式,第二段则是随机字符串,用来混淆密码字段的,这个待会儿解释。 第三字段:上一次密码修改的时间。这个时间很怪,是不是,这个是时间戳,单位为天,意思是从1970.01.01 00:00至今的天数,今天没过完,是不算的,换算起来还是很简单的。 第四字段:密码最短使用期限,大概意思就是,上一次改密码到下一次改密码的时间间隔,挺奇怪的规矩。 第五字段:密码最长使用期限,这个可以理解,单位为天,是从上一次修改密码开始算起。 第六字段:密码过期提醒,就是快到最长使用期限时,提前多少天警告。 第七字段:密码逾期期限,额……就是密码使用期限已经到了,能够宽松几天,可以设定…… 第八字段:账号禁用期限,就是到期时间,这个是从1970.01.01开始算起的。 第九字段:保留字段,无意义。 三关已经过去了两关,接下来的文件和组有关/etc/group 同样的可是使用man命令查看 第一字段:组名 第二字段:组密码占位符,相关文件在一个叫/etc/gshadow的文件中。 第三字段:组ID 第四字段:组里的用户,多个用户使用逗号隔开。 组里的东西就这么一点……/etc/gshadow文件就不看了,用到了查一查就好。 现在来讲一讲加密,加密简单的划分一下,有三种: 1.对称加密 什么叫对称加密呢?简单地说,对称加密就是加密和解密使用的是同一个密码。 2.非对称加密 非对称加密是电子商务得以实施的重要基础条件,,非对称加密又叫公钥加密,每个密码是成对出现 公钥public key 私钥secret key 公钥加密的内容需要与之对应的私钥解密,公钥加密的秘钥长度比对称加密长的多,所以公钥加密比对称加密要安全的多,但是加密速度也会慢许多。 公钥加密比对称加密慢三个数量级,所以公钥很少用来加密大量的数据,常常作为密钥交换来使用。 3.单项加密 单项加密也叫散列加密或者指纹加密,单项加密只能由明文取得密文,反之不成,是非可逆的。单项加密是提取数据的特征码,每一个数据都有唯一的特征码,这个特征码为定长,也就是说不论数据多么庞大,提取的特征码都是同样的长度,这个特性被用于数据完整性校验,单项加密有一个特点就是雪崩效应,也叫蝴蝶效应,就是数据中有一丁点儿不同都会引起结果雪崩般的变化,这给文件的完整性校验提供了保证。 在我们的shadow文件中使用的就是SHA1单项加密算法,密码字段的第二段就是加到密码里的杂质,让别人无从猜测用户的密码。如果密码一样,杂志一样,那么存放的密码段就是一样的。密码生成就需要查找一下了,方法多多。 下面就来讲一下系统目录的构成: /boot :系统启动相关目录。 /dev :设备文件目录。 块设备:随机设备,可实现随机访问的设备。如硬盘、磁盘,它的访问是按照组织成对应的数据块。 字符设备:线性设备,可完成线性访问的设备。有序的,如键盘,是一个字符一个字符读取的。 /etc: 大多数配置文件的主要存放路径,或者在该目录的子目录下。 /home :用户的家目录。 /root : 管理员的家目录 /lib :library,库文件和内核文件模块(/lib/modules) /media :挂载点目录,通常用于挂载移动设备 /mnt :挂载点目录,通常用于挂载额外的临时文件系统。 /opt 可选目录,早期用于安装第三方软件。 /proc 伪文件系统,事实上里面是没有任何文件的,但是由于系统启动后的内核映射文件放在该目录下。大多为内核的可调参数和内核工作的统计数据。例如网卡的接收发送数据包统计数据,是否支持路由等等。 /sys 伪文件系统,是硬件设备相关的属性映射文件,通常用于实现设备的管理。尤其是像硬盘这样的存储设备。 /tmp 临时文件 /var 可变化的文件,cache(缓存),lock(锁文件),run(进程号存储 *。PID) /var/tmp另一个临时文件存储 /bin (binary) 可执行文件,用户命令 /sbin 管理命令 /usr universal shared read-only 全局的共享的只读文件 /usr/bin 系统启动后提供的一些基本功能的命令或可执行文件,命令涉及的库文件存放在/usr/lib /usr/sbin 系统启动后提供的基本管理功能的命令和可执行文件,命令涉及的库文件存放在/usr/lib /usr/local/bin第三方软件的安装目录,第三方软件信息都在此目录下 /usr/local/sbin第三方软件的管理命令目录。相应的库文件存放在/usr/local/lib 所涉及到的目录都在这里了,具体使用到相关配置文件再做详细说明。 给自己讲linux 2016-12-10 评论 1741 次浏览
第九讲——超人管理员、用户以及权限 说起超人,我就想起小时候加班几点都想看的动画片,可惜啊,老爹比较凶,按时关电视,周末还不给看…… 超人那是相当强大的,系统管理员root也是这样,这是一个凌驾于所有用户至上的用户,能干很多普通用户干不了的事情,比如删除根目录下的所有文件,要是真这样干了,那就悲剧了,啥都没有了,所以啊,没事儿的时候还是不要穿着超人的外衣到处晃,免得犯了错有没有超人的能力挽救…… root用户是系统默认的管理员,既然是超人当然就会有很多不一样的地方。比如命令的执行上,举个简单的例子: 每一个用户在/home下都有一个家目录,并且以用户名命名,root就比较厉害,不屑于在/home下屈居,非得单独搞一个/root,也就是根目录下有一个root的目录。除了这些最容易体现不同之处是,root可以随便去普通用户家里,甚至想干啥都可以,写写文件,改改数据,删除点什么之类的,普通用户一般来说那是连门都进不去的,为啥?因为有一种机制给普通用户之间提供了防护,这种机制就是权限。 权限这玩意儿很是古怪啊,记得上一次的文件类型后面跟着的九个短横线rwx一大串,是的,这个就是文件的权限。文件的权限是如何实现的呢?且听本大流氓叽叽歪歪一番。 首先我们文件的权限是三位一组,也就是说一个文件有三组权限,每一组具有的权限按位(顺序)是读(r)、写(w)、执行(x),所以会看到一大串摸不着头脑的字符串。 我们说了,每一个文件有三组权限,那么是哪三组?还是按照顺序,三个一组,第一组的权限是文件创建者的,称为属主,第二组的权限是文件创建者所在的组(就像小组),第三组就是其他人了。 用户组(属组):其实就是一个容器,用来关联一些权限,只要在用户组里的人都具有属于用户组的文件的权限,用户组是一个逻辑概念,并不能登录计算机,仅仅是用来指派权限。 那么什么是权限?权限就是定义资源或服务的访问能力,属主就是指定某一个人具有权限,属组是指定某一类人具有权限。对于计算机来讲,用户只是一个标识符,是用来获取资源或服务的凭证,但是对外部来讲,用户是我们人。看似是我们在操作计算机,实际上只是代为完成。另外进程也是有属主和属组的,因为它是一个程序运行的副本,所以进程是用户操作计算机的代理,进程能够访问的文件是取决于这个进程自己的权限和它所访问资源或文件的权限。这个过程的判断是由操作系统安全管理属性自动完成的。 我们来详细说一说系统权限,每一类用户都有三种权限(读、写、执行),这是对于文件来说的,对于目录呢? 我们说了,linux中一切皆文件,也就是说,目录也是文件,但是这些权限表示的意义是不太一样的,目录是路径的映射文件,其本身并不存储内容,和设备文件一样只具有元数据,元数据就是文件本身的属性,我们就来详细说一说。 对于文件: r:可读,这就意味着我们可以使用相关命令查看内容等等。 w:可写,意味着此文件可以被编辑,也可以被删除。 x:可执行,也就是说这个文件是可以被执行的,就像win下的.exe。 对于目录: r:可以对此目录使用ls命令进行查看,列出其中的文件 w:可以再目录中创建文件,也可以删除自己创建的文件,但是我们要搞清楚,用户是不能对一个没有权限的文件操作的,这个有点绕,但是必须得搞清楚。 x:目录能被执行?然并卵,文件的x权限代表着我们可以cd到该目录下,一般来说文件的r、x权限是成对出现的,如果对于一个目录能够ls列出文件但是不能cd到该目录下,或者说能cd到该目录下但是不能ls列出文件,这得是多么操蛋的事情。 rwx三位一体,按位占用,没有权限则用短横线占位。 对于一个新创建的文件来说,默认是没有执行权限的,为什么会有一个默认权限?这个就是umask在捣鬼 要说umask,我们还得捋一捋权限的数字表示 权限表示 八进制 二进制 –x 1 001 -w- 2 010 -wx 3 011 r– 4 100 r-x 5 101 rw- 6 110 rwx 7 111 我们通常把三位放到一起来看,用八进制表示其权限,另外还有一种较为简洁的记法,单独的r权限为4.单独的w权限为2,单独的x权限为1,加起来刚好为7,相互组合起来也与之对应。个人觉得很好记忆。 好了,该说说主角umsk了,这玩意儿设定的就是我们用户创建文件的权限我们使用umask命令可以查看当前用户的umask设定,一般用户为0002,我们只看后三位002,002是什么鬼,只能写? 我们要知道umask设定的是文件的默认权限,但是我们说了系统默认是不给新创建的文件执行权限的,但是目录怎么办?目录没有执行权限就无法cd,不人道。所以umask(又叫遮罩码)的设计就是 1、如果用户创建的是文件,那么就用666-umask的值作为文件的权限 2、如果用户创建的是一个目录,那么就用777-umask的值作为目录的权限 如果用户创建的是文件,那么666-002=664 664是什么?即 w r – w r – r – -为了显示清楚我加了空格实际上是没有的。 如果用户创建的是目录,那么777-002=775 775展开就是rwxrwxr-x,就这么简单。 如果我非得让新创建的文件具有执行权限,在办?使用umask 111 更改默认权限试试?结果并不是我们想象的的那样美好,是不是?新建的文件中并没有执行权限……都变成了读写权限,都多了1,怎么回事儿?这个就是linux的强大之处了,linux会默认将具有执行权限的文件权限自动+1,这是linux的一种安全机制,遵守即可,这样的话那岂不是不能运行自己写的程序脚本了? 非也非也,我们可以使用chmod命令来实现文件权限的修改。 chmod可以修改三类用户的权限,也可以修改某类用户的权限,还可以修改某类用户的某个权限。 chmod 755 filename 修改一个文件的三类用户权限 chmod u=rwx filename 修改一个用户的权限 u其实是user的缩写 chmod g=rx filename 修改一个用户组的权限,group的缩写 chmod o=r fileme 修改其他人的权限,other的缩写 chmod u+x filename 给用户执行权限 chmod o-x filename 取消其他人的执行权限 另外我们可能会需要修改一个文件夹里所有的文件权限,包括其子目录下的文件等等,我们总不能一个一个的去改吧? -R 递归修改(–reference)可以实现目录下所有文件权限的修改,包括其子目录下的所有文件。 有了权限的划分,我们的小秘密就不怕别人知道了,咳咳,超人不算人……因为其他人在不属于文件创建者所在组的话,只具有其他人的身份,而其他人的访问权限我们是可以更改的。怎么更改?嗯,我们现在还是披着超人外衣的用户,所以为了稳定操作,我们还是整一个普通用户,我们只需要两步就可以创建一个新用户了。是的,使用命令进行操作。 useradd username useradd就是我们添加用户的命令,至于名字嘛,高兴就好,取个什么canglaoshi也是可以的,useradd命令不加任何参数的话是可以按照默认的规则添加用户的,但是像我这种比较贱的非要自己定义一下怎么办? 这个就需要使用到命令的选项了,useradd具有如下选项: -u 指定用户的UID,UID是啥呢?这玩意儿就和咱的身份证差不多,计算机处理数字的能力比处理字符的能力强太 多,所以系统识别用户是靠UID来识别的,以提高效率。普通用户UID在500-65535之间,,只要不重复,想咋用咋用。但是为了方便管理,如果不指定,系统会按照已经给过的最大UID为基准,以递增的方式依次赋给用户。 -g 指定基本组,前提是这个组事先是存在的,否则就会报错。 -G 指定额外组,我们可以加入多个小组,小组之间用逗号隔开。 -c 指定用户的注释信息,什么家在哪里、电话号码之类的,不过很少会用到。 -s 指定用户shell的绝对路径,一般来说只有系统认为安全的shell才可以被指定,那么系统觉得安全的shell放在哪里?一 般来说系统觉得安全的shell放在/etc/shells目录下,这里边就有之前说的什么cshell、tcshell等等。 -m 强制为用户创建家目录,家目录里保存了用户的环境配置信息,所以每一个用户才可以自定义登陆后的环境。 -m通常和-k一起使用,-k就是从/etc/skel下拷贝环境配置模板到用户家目录下,并将属主和属组更改为当前创 建的用户,/etc/skel中存放了shell的环境配置文件,这个在更改权限的时候再讲,先存疑。 -M 不创建家目录,是的,连家都没有的光杆司令,所以也就没有相应的shell环境变量配置文件,也就没有办法实 现环境的配置。 -r 添加系统用户,系统用户是什么鬼,简单地说,系统用户就是执行后台服务的特殊用户,系统用户一般没有登 录系统的权限,不是没有,是压根儿就没想让系统用户能登录操作系统。特殊用户UID从1-499 好多……就连我都有深深的罪恶感了,难道添加个用户这么麻烦?非也,就像之前说的,复杂的命令都是有配置文件的,useradd的配置文件在/etc/default/useradd,在这里面对用户的诸多选项进行了默认设置,所以没有特殊需要一般使用useradd直接添加用户就好了。 俗话说创造难毁灭易,在这里也是适用的,咱辛辛苦苦添加的用户,可以通过一个简单的命令删除的连毛都不剩。 userdel username ,是的,就这么简单,仅有一个-r的选项,供我们删除家目录,这个是不是有点狠,有点把人家干掉还把房子干掉的感觉……罪过啊罪过。 如果我们一激动不小心添加用户的时候把名字搞错了,咋整,改名这件事是可以办到的使用usermod命令就可以办到。 usermod [option] username 这个命令的使用有一个要求,你得先登录这个用户才可以,我们使用root命令先切换过去:su – username -l 更改用户名 -e 定义用户的过期时间,格式为年月日 -f 非活动时间(禁止但没有过期的时间) -L 锁定用户账号 -U 解锁用户 -G 添加额外组(附加组),会覆盖之前的操作覆盖,需要同-a选项一起使用,追加附加组。 -d 指定新的家目录,同时应当跟上-m参数,改变家目录的同时将此前家目录中的文件移动至新的家目录中。如果 没有这么操作,就会发生用户无法访问之前的家目录的情况。 讲了半天都没有涉及到密码操作,额……因为我们之前没有设置新用户的登录密码,所以系统是不能登录的,但是可以再已经登录的shell中进行切换 切换的命令就是su ,这个su命令比较好玩,它有两种情况一种称为完全切换,就是su – username,中间有个短横线,而另一种称为不完全切换,就是不加短横线的情况,这个从家目录的位置可以看出来,完全切换是将用户的家目录一同切换,而不完全切换则没有切换到用户的家目录下,也就是说没有被切换用户的shell环境。这个操作一下就能够体会得到。 设置密码的命令是passwd,password的缩写,其实我觉得这缩写不够简洁,缩就缩嘛,还非得只缩减俩字符……好歹也是缩减嘛…… passwd的命令还是相当简单的格式如下 passwd 回车就可以更改当前用户的密码,root用户比较厉害,可以指定任何一个用户,然后修改其密码,所以说超人不是人啊…… 有了密码我们就可以正常的登录操作了,linux操作系统默认是不允许空密码的用户进行登录的,所我们只能够su过去。 passwd有一个选项比较厉害:–stdin,这个选项支持从标准输入接收,突然觉得很乱,是不是?!什么叫标准输入?!这个在脚本的时候会讲,什么!还有脚本?!嗯,是的,不然怎么叫成神路,这是一条布满荆棘的羊肠小道,很多人被拦在了路途中……但就算是这样也要暴力通过,哪怕是九死一生,额……有点夸张,死是肯定不会的。 现在我们已经具有一个用户账户了,而且也可以随意的修改属性。 那么我们能不能单独建一个组?答案是可以的,我们可以使用groupadd添加一个用户组,同样的可以指定其GID等等 说一说组管理命令 groupadd 组名 -g 指定GID -r 添加一个系统组,有点像useradd中的-r 哦 groupdel 组名 作用是删除用户组 groupmod 修改组属性,同样的需要是用户组的成员才可以 -g 改变GID -n 改变组名 gpasswd 添加组密码,这个就神奇了,不能登陆还有密码?事实上组密码只是用于验证一个非组内用户添加该组为基本组或者额外组的。 如果我们不属于一个组的组员,但是我需要临时访问这个组。我们可以使用newgrp 登录为一个新的用户组,这时候组密码就会发生作用了,newgrp具有登录属性,我们可以按需使用exit退出。 嗯……我发现我逼逼叨叨的有点多,好了此次暂时结束,下一讲将会涉及一些关于权限和系统目录。 给自己讲linux 2016-12-09 评论 1675 次浏览
第八讲——linux基本命令 前面整了一大堆命令,我都有些不太好意思继续说下去了,为了在这条成神路上走下去,我还是要坚持坚持的。 这么多命令要是记不住咋整?那不是嗝屁了? 还好,linux这个时候就很人性化了,人性化在哪里?不要着急,这就化化妆出来。 基于前面讲的内置或者说是内部命令和外部命令,要讲的这个就是基于命令划分的。 linux命令众多,我们也不可能每一个都会使用,所以开发者们考虑到了这一情况,为每一个命令都配备了一份使用说明,怎么样,很人性化吧?但是可惜的是其显示内容是英文………… 首先,我们来说一说内部命令的命令帮助(使用说明书),查看内部命令的使用说明需要使用一个命令——help,是的,救命。使用格式为 help 内置命名 是不是很简单!通常内知命令的说明书都比较简短。 外部命令的使用说明简单直接 man,是不是很暴力很直接,其使用格式 man 外部命令 外部命令就像那啥一样又长又臭,我们只需要找到自己需要的就行。这里就需要涉及翻页操作, 空格键 下一屏(同下一页) B(键盘上的按键) 上一屏(同上一页) J (键盘上的按键) 下翻一行 回车键也是可以的。 K (键盘上的按键) 上翻一行 Q (键盘上的按键) 退出说明书 我们还可以使用 命令 –(两个短横线)help 大多数命令都可以这样操作,俗话说帮人帮到底嘛。 如果我们不小心man了一个内部命令回事一个怎么样的情况? 不要怕,man会将所有的内部命令指向bash的帮助文档,所以退出help 内置命令就好。 man手册中需要注意的几个标识: NAME: 命令名称及功能简要说明 SYNOPSIS:用法说明,包括可用的选项(option) DESCRIPTION:命令功能的详细说明,包括每一个选项的意义。 OPTIONS:说明每一个选项的意义 FILES:此命令相关的配置文件,这个有意思,因为有些命令是有配置文件的,不仅有还有一定格式。 BUG:错误报告,这个就是你发现了说明错误,使用提供的联系方式上报 EXAMPLES:使用示例 SEE ALSO:另外参照 所以说要学习英语,我就不重复三遍了,累。 除了这些,man手册里还有一些符号: [] :中括号,表示其中的内容可以省略。 | 竖线,表示多选一。 <>尖括号,必须要给出的内容,非可选!!!!看清楚,这是必选项 … 省略号一样的东西,表示可以出现多次 {} 大括号,没有特殊意义,用于man手册里的分组 还没有结束,不要慌,不要急。上面说到了一个命令可能会有配置文件且还有格式,这个格式怎么查看? 要干这件事我们需要知道man是分章节的,不信可以返回去man一个命令,上面有一个你刚刚输入的命令,而且后面还跟了一个小括号,里面有一个数字!!这个数字就是章节号,这玩意儿是随便给的嘛?当然不是,是有规定的,得按规矩来。 man常见的章节有8个 1 用户命令,所有的用户都可以使用的命令,(也就是/bin,/usr/bin,/usr/local/bin下的命令) 2 系统调用(system call) 这玩意儿又出现了,但是我们用不上 3 库调用 (library call) 这玩意儿也出现了,大使我们也用不上 4 特殊文件 特殊文件是设备文件,设备文件是个什么东西?记得前面的块设备、字符设备嘛,就那玩意儿,设备文件在磁盘上没有存储任何内容,仅有元数据,只是作为设备的访问入口存在的。 5 文件格式 一些较为复杂的命令通常都有一个配置文件的文件,在这个文件中保存了可以通过选项指定的程序执行属性……有没有很打脑壳,有就对了,简单点说,就是命令配置文件的内容格式,在这里会做一个详细说明。 6 游戏 嗯,游戏都比较吊,什么推箱子贪吃蛇…… 7 杂项 Miscellaneous 8 管理命令 (/sbin,/usr/sbin,/usr/loacl.sbin)只有管理员才有权限执行的命令。 那我们怎么才能知道一个命令属于man中的哪一个章节呢?有一个命令可以实现,whatis,使用方法很简单 whatis command(命令) 有一点我们是要知道的,如果是最小化安装,man命令是需要额外的安装包才能实现命令章节的查看的,安装以后慢慢说。 好了至此我的逼逼叨叨先暂时告一段落。 给自己讲linux 2016-12-08 评论 1711 次浏览
第七讲——linux基本命令 上一节我们讲到了使用cd命令可以进行目录的切换,当然,对象是绝对路径,不过有两个目录是除外的 1 当前目录“.” ./ 表示当前目录 2 上一级目录(父目录) cd .. 可以切换到上一级目录 好了现在我们可以自由的切换并且显示目录内的内容了。那么现在是时候告诉大家文件类型在哪里显示了 我们先进入/etc 目录下,再使用ls -l 命令,请记住,在当前目录下使用ls命令参数是可以省略的。 每一行的前面有十个字符,什么短横线优势r又是w啥的,眼睛都看花了…… 好了,说正事,第一个字符就是我们之前讲的文件的类型,如果想查看当前目录的信息则使用ls -d,当然也可以ls -d -l,但是一般来讲,我们在同一个命令中一个短横线的选项是可以合并的,,比如这样用ls -dl。 这样查看文件的类型我感觉有点累,而且有些眼花缭乱,而file命令就就解决了这一繁琐的步骤,就能告诉我们想要的信息,当然是英文显示的,额……学习英语很重要、很重要、很重要。 既然我接触了命令这玩意儿,那么就得知道啥叫命令以及命令的类型。 命令是什么? 其实命令就是一个可执行的程序,我们在CLI中键入命令回车时,系统会从环境变量里定义的目录下去找这个命令,并执行。这里提到的环境变量,简单的说环境变量就是定义当前用户工作环境的,变量就会有变量名,环境变量的变量名是PATH,里面存储了以冒号为分隔符的多个路径。 命令的类型: 在linux中,命令分为内置命令,我们之前讲了shell其实是一个命令解释器,所以这些内置命令是在shell上运行起来的,换一个shell环境命令可能就不是那样的了,所以这里说的内置命令是集成在shell中的命令,我们要知道操作系统内核是不提供命令的。 外部命令: 外部命令在文件系统的某个路径下会有与之对应的的同名的可执行文件。系统为了让用户方便的使用这些命令就给我们内置了一种机制,也就是环境变量,存放命令的目录加入环境变量里后,我们就不需要在一个命令前面输入冗长的路径,这个机制大大的提高了管理员的工作效率。 我们需要知道的是,当我们执行一个命令的时候,系统就会挨个从环境变量里保存的目录下查找一个命令,直到第一次找到为止,也就是说,两个同名的命令只有一个会被执行,被执行的那个命令的存放目录通常在PATH中靠前。 难道说每一次执行命令都要去目录中查找嘛?那得浪费CPU多少时间? 在linux操作系统中,会将使用过的命令映射到一个连续的地址空间上,并以关键字记录其位置,形成一个散列,这个就比较诡异了,不论其中的数据量多少,每一个数据被找到所消耗的时间是相等的,这玩意儿叫hash,从hash中查找数据的速度为O(1),这个O(1)就是表示,在hash表中查找任何一个文件花费的时间是相等的。 我们怎么才能知道一个命令属于外部命令还是内置命令呢? type命令 解决了这一问题,type的使用方法很简单: type 命令 将相应的命令进行type,就会知道这个命令到底是哪里的,如果是内置命令则会显示一串英文字符,其大意就是这是一个内置命令,如果是外部命令,则会显示一个命令的绝对路径。 这些绕来绕去的命令很是古怪啊,感觉就不是一般人用的……是的这本来就不是给一般人用的操作系统,忍一忍,不然遍地都是高手哪还有咱的立身之处。 给自己讲linux 2016-12-07 评论 1711 次浏览
第六讲——linux基本命令 嗯……说了半天估计云里雾里的,关键是什么看到这些玩意儿。 好,开始我们的第一个命令——ls命令 在命令行中键入ls然后回车,就可以看到有一些文件显示在屏幕上,很神奇的命令,但是奇怪的是并没有什么文件类型的符号显示出来……好,这就要涉及到一个叫做命令格式的玩意儿,规矩真多,但是没有规矩不成方圆。 #command(命令) option(选项) arguments(参数) 命令格式就是这样,在使用的过程中我会慢慢解释。 首先,我么需要知道的是不同的命令选项区别很大,而常用命令好几百个,这就意味着需要记住大量的命令以及相应的选项功能。这里我们说到了功能,是的,选项就是调用命令提供的功能的,因为我们的需求各不一样,总不能一个要求开发一个命令吧?要是那样我会把大家先疯掉。 我们就先来讲一讲ls命令的选项 -l 选项前大多是需要加短横线的,因为这样命令才知道我们调用了这个功能,-l就是列出目录下的文件的详细信息 -h 以人类便于识别的单位显示(人性化显示),默认显示文件的大小单位是字节,-h就会以KB、MB、GB之类的单位显示,这个选在在大多数命令中都存在,说明了还是蛮人性化的。 -i 显示文件的iNode节点号,这个在硬盘存储的时候会将。 -r 逆序显示文件 -R 递归显示(recursive) 显示目录中子目录下的所有文件不论子目录个数,全部展开。 -d 显示目录自身属性 -a 显示目录下的隐藏文件,linux下的隐藏文件是以点“.”开头的。 -A 显示目录下除了.(当前目录)..(上一级父目录)之外的所有文件。 以上就是我们会常常用到的选项,那么问题来了,我们怎么操作才能显示我们想要查看的目录?这个就是命令参数的作用了。 ls的命令参数常常是一个目录,通常使用绝对路径 例如我们要查看/etc/目录下的所有文件的详细信息,则这么使用 ls –l /etc 然后回车即可,/etc就是命令的参数,也就是操作对象。 当然,如果ls命令不加参数,默认是显示当前目录下的文件信息, 那么我们怎么才能知道自己当前处于哪个目录?这就有了pwd命令 pwd没有任何选项和参数,其目的就是为了显示当前所处位置。 我们总不能待在一个地方不动吧?比如我还想到/etc目录下去,这个是可以完全实现的,利用cd命令我们就可以实现目录间的切换。 比如我要到/etc/inittab.d目录下去,那么我们可以 cd /etc/inintab.d 给自己讲linux 2016-12-06 评论 1771 次浏览
第五讲——linux操作系统 额……为什么不是win系统?因为我要学linux操作系统,还有什么疑问吗? 上一节我们已经能够进入一个用户的登录界面了,在linux中我们可以选择不同的shell来进行登录操作系统,前提是你得安装了相应的shell。 在linux中可以启动多个shell,而且还支持同一用户登录多次,且每一个相同用户之间互不干扰。在进入命令行后,如果有需要,可以执行startx命令进入图形界面,这个图形界面也要事先安装好才可以,当然,什么时候需要什么时候安装也是可以的。 在开始linux操作之前,我们需要知道这么几件事情。 1. 编程语言的种类,按照编译方式大概可以分为两种: 1) 静态编译,静态编译后的程序大家用的比我流畅,比如看小电影的播放器啊,游戏啊什么的。常见的静态编译语言有C语言,C++,C#等等,它们共同的特点就是需要一个集成的开发环境(IDE),当然理论上说在记事本里也是可以写程序的,但是记事本不能检查语法错误,所以程序员就迫切需要一个能检查语法错误的环境,于是就有了IDE,IDE集成了编译器,编译器的作用就是将代码转换成相应硬件能识别的二进制代码,因为CPU架构不同所以支持的二进制格式也就不同,CPU所支持的二进制格式我们称为ABI(application binary interface),也叫应用二进制接口,这玩意儿了解一下就可以,不必深究,要是还得研究CPU是怎么制造的那估计很多人都要疯了。在静态编译时需要调用很多的库调用或者系统调用,在win下库文件比较好认识.dll的文件就是,比如冷不丁就报个什么什么.dll(dayamic link library)文件缺失,就是这玩意儿,又叫动态链接库。在linux中库文件通常以.so结尾(shared object),又叫共享对象,也称为dso(dynamic shared object动态共享库),这里需要声明的是,linux中并不是靠文件后缀来区分文件类型的,这种命名仅仅是为了方便操作。 2) 动态编译,这个玩意儿就诡异了,首先它的工作原理就是你可以写一句它执行一句,也可以写完了一块儿执行,对,就是直接执行就好了,不需要编译这个过程,但是它需要一个解释器(不同于编译器),有了解释器以后,就可以按需执行,甚至你可以边修改边执行,这类语言有bash,Python,Java等等。但是解释器是一个通过静态编译得来的软件,这个很好理解,它得单独运行起来给解释性语言提供一个解释环境,这有点像GNU’s Not Unix的前期,不是Unix但是跑在Unix上,这个世界就是这么神奇。这样我们就能够理解在linux虚拟终端下的bash(命令行)为什么能敲个命令回车就能执行,那些命令就是规则,而我们输入命令只是调用其内定的规则而已。 2. 好了,还是讲讲linux操作系统,linux操作系统有这么些哲学思想。 1)一切皆文件,使得不管是硬件还是什么的在linux操作系统上体现出来的都是一个文件。 2)使用纯文本格式保存软件的配置信息,大多数情况下,管理员都是通过编辑配置文件来完成相应的工作的。 3)使用功能单一的小程序组合起来完成复杂的任务。 3. 文件类型: 在linux中文件大致有这么些类型 – 用一个短横线来表示这是一个普通文件 d 表示是一个目录文件,是的,目录也是一个文件,是不是觉得匪夷所思?不过我现在习惯了而且也是这么认为的。首先,目录是一个路径映射文件,路径就是从指定起点到达目的地所经过的具有标志性的地点位置标识。实现这一机制的叫做文件系统,文件系统提供了层次化的管理机制,所以我们进入一个目录发现里面可能还有目录。 在linux中所有的文件属于文件体统,所以它会有一个致高点,正所谓普天之下莫非王土,率土之滨莫非王臣,王就是根目录(/),从根目录开始,你所经过的每一个目录都是标志性建筑(目录节点),他们构成了直通目的地的绝对路径,有绝对路径就有相对路径,但是相对路径一定得处于绝对路径的某个标志性建筑旁边才可以,不然你还得相对来相对去的。 b 块设备文件(block) 块设备文件最常见的就是一些存储设备(硬件)的设备文件。 c 字符设备文件(charcter)这些文件往往是键盘鼠标显示器之类的字符输出输入设备的设备文件。 l 符号链接(symbolic link file) 又叫软连接,有点win下快捷方式的味道,但是有区别。 P 命令管道(pipe) s 套接字文件 给自己讲linux 2016-12-05 评论 1644 次浏览