Linux学习笔记(二)


Unix系统下的登陆与退出

Unix系统一直以其安全性著称,实现安全性的一个比较重要的方法就是多用户分组管理,毕竟你不能让一个随便创建的用户来运行诸如rm -rf \等危险的命令 ,因此用户在使用Unix系统时候,需要进行登录。

值得一提的是树莓派使用的Raspbian系统,实际上是Debian系统,而在Debian中root账户默认没有密码,并且账户是锁定的,因此如果执行一些需要root权限的命令时,就需要开启root用户。

首先先给root账户设置密码:sudo passwd root

然后解锁root账户:sudo passwd --unlook root,即开启了root用户,同时也算第一次输入passwd命令。

既然知道如何登入了,就需要知道如何才能够退出才行,通常情况下可以直接在Shell中输入exit或者ctrl-d即可以退出(用户层面),但是如果是类似于树莓派这种物理机的话,因为不只有Shell,想要完全退出的话需要在Shell中输入sudo poweroff后,才算是安全退出(机器层面)。

Unix下命令

命令格式

Unix下命令格式基本如下:

$> 命令名 [-选项] [参数]

注意,选项前面的 - 是必不可少的,对于选项而言,既可以分开多个,以空格为间隔符来写,也可以合并起来例如:

ls -a -l 可以写作 ls-al,且后面那种写法更加常见

注意事项: Unix对于大小写是敏感的,对于ls命令而言不能写成LS(当然也有特例 如果你使用alias命令为命令起了一个大写别名的话)

常见命令

目前学习的命令比较少,随着后续的学习了解的命令会慢慢变多,同时也会在相应章节里面更新

1.操作文件及目录

命令参数示例说明
cdcd ~切换目录
pwdpwd显示当前工作目录目录
touchtouch 1.txt创建空文件
mkdirmkdir testdir创建一个新目录
\-pmkidr -p dir1/dir2/dir3/创建多级目录,父目录不存在情况下先生成父目录
cpcp 1.txt复制文件
\cp -r dir1/递归处理,将指定目录下的文件与子目录一并拷贝
mvmv dir1 dir2移动文件或目录、文件或目录改名
rmrm 1.txt删除文件
\-rfrm -rf dir1
rmdirrmdir dir1删除空目录
catcat 1.txt显示文本文件内容

2.系统常用命令

命令参数示例说明
ps较少单独使用,配参数根据需求
\-e /-Aps -e显示所有进程,环境变量
\-fps -ef全格式显示
\-aps -a显示所有用户的所有进程(包括其它用户)
\-ups -au按用户名和启动时间的顺序来显示进程
\-xps -aux显示无控制终端的进程
rebootreboot重新启动
ifconfigifconfig网卡网络配置,常用于查看当前IP地址
datedate显示系统当前时间
calcal 3 2020显示指定月份的日历表

ifconfig在使用树莓派的时候经常需要使用(查看地址来使用SSH连接),也可以使用pi@raspberrypi.local来获取树莓派的hostname,相比于使用ifconfig更方便。

如何阅读MAN手册

很显然,那么多的命令加上参数,对于人而言是不可能完完全全记住的,在Unix中,系统就为用户提供了查看命令的帮助信息,但是相对的也带来了一些问题,man手册的阅读对于人而言是很痛苦的(无高亮、命令行下,第二语言下),而且有时候理不清文档内容组织结构,思维很混乱,或者明白文档描述所用的体例,但不明白命令各种参数该如何组合也是比较痛苦的。

在联网的情况下,通常我都是查找开源的社区直接找命令,阅读效果比直接man 命令更好,并且例子丰富且多是实际状况下所需要的。网址见下:

Linux命令手册查询

例图:

可见确实对于学习命令有很大的帮助

那如果我需要在Shell中阅读man手册该如何做?

MAN手册分类

 man [OPTION...] [章节] 手册页...

共有9卷:

序号英文中文
1Executable programs or shell commands可执行程序或shell命令
2System calls (functions provided by the kernel)系统调用
3Library calls (functions within program libraries)库调用
4Special files (usually found in /dev)特殊文件
5File formats and conventions eg /etc/passwd文件格式和约定
6Games游戏
7Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7)杂项(包括宏和惯例)
8System administration commands (usually only for root)系统管理命令(通常仅适用于root用户)
9Kernel routines [Non standard]内核例程(非标准)

例如:man 2 mkdir

这时看到的是MKDIR(2),表示是系统调用这个板块的。要知道,man在没有指定板块时,将使用一种默认的顺序查找这些板块中的命令,只返回含有该命令的第一个文档。当指定板块时,只从该板块中查找。所以,当我们man得不到想要的文档时,就要给出板块号了。

Shell

Shell介绍

shell是unix下负责用户与unix交互的程序,unix命令的处理是由位于用户与操作系统其他部分之间的shell完成的,shell是一个命令解释程序,每一个命令都是由shell来进行分析,然后执行用户请求的。

值得一提的是,一些UNIX命令时shell程序的一部分,成为shell命令或内部命令(builtin),它是由shell识别并在shell内部执行的。

Shell的种类

shell的种类比较多,目前流行的有:

  • ksh
  • bash
  • dash
  • zsh等

切换shell的话,可以直接将shell的名称输入到命令行即可,切换回原来的shell的话,chsh不加参数即可。

/etc/passwd文件

在Linux /etc/passwd文件中每个用户都有一个对应的记录行,它记录了这个用户的一些基本属性,其中也包括了缺省的shell

可以看到一条记录分为7个字段,以:为分隔符,如果以

root: x:0:0:root:/root:/bin/bash

来分析的话

  • 第一个 root:代表用户名(用户ID)
  • 第二个 x:这个用户是否需要密码登录不写代表不需要密码(密码标志)
  • 第三个 0:uid 用户id(0表示root用户,1-499表示系统用户,500-65535表示普通用户)
  • 第四个 0:gid 用户组id(组ID)
  • 第五个 root:注释(用户说明)
  • 第六个 /root/ :用户的家目录(普通用户:/home/username root用户:/root)
  • 第七个 /bin/bash:用户登录的命令解释器(登陆的shell,/sbin/nologin 代表不能登录)

了解到此处即可。

登录与退出过程

登录

unix启动时,内核被装入内存,而操作系统的系统工具保存在系统磁盘上,在用户请求时才被装入执行。用户登陆时,shell程序被装入内存。
先来简述一下用户登陆的过程:

系统自举时,init继承创建getty进程守护在各个终端上

当用户输入用户名时,执行login程序

login执行并提示用户输入password

当username、password验证成功,fork出shell进程

详细描述的话

Step1:系统启动时,init进程根据配置文件/etc/inittab确定需要打开哪些终端

按照配置文件进行

Step2:getty完成任务

getty根据命令行参数打开终端设备作为它的控制终端,把文件描述符0、1、2都指向控制终端,然后提示用户输入帐号。用户输入帐号之后,getty的任务就完成了,

它再执行login程序:

execle("/bin/login", "login", "-p", username, NULL, envp)

Step3:login程序运行

login程序提示用户输入密码,且在输入密码期间关闭终端的回显,因此我们在linux下输入密码时是看不到的,然后验证帐号密码的正确性。

如果密码不正确,login进程终止。init会重新fork/exec一个getty进程。如果密码正确,login程序设置⼀些环境变量,设置当前工作⽬录为该⽤户的主目录,然后执行Shell:

execl("/bin/bash", "-bash", NULL)

退出

用户退出系统也是差不多类似的道理,shell程序终止执行,login退出,init回收login,然后init再fork出新的getty,来程序等待新用户的登录。


文章作者: JoyTsing
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 JoyTsing !
评论
 上一篇
Linux学习笔记(三) Linux学习笔记(三)
vi编辑器所有的Linux系统都会内建vi文本编辑器。 而vim则是vi的升级版本,vim具有程序编辑的能力,可以看做是vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别丰富,在
2020-04-09
下一篇 
如何把VS安到非系统盘 如何把VS安到非系统盘
最近打算安一下Unity相关的工具,结果打开VS一看要C盘需要5G (不知为啥只剩下10G的可怜人)因此为了给SSD减少些“压力”,搜索了一下方法,给C盘瘦了10G…(与此同时明显感受到开项目运行变卡,要是有钱谁想整这些骚操作) 第一步 从
2020-04-07
  目录