02、Linux 基础 - 初次登陆与文件权限

首次登陆:

首次登录简介:

安装没有问题的话,开启操作系统后就是这样的

 

Linux中的开关机非常重要。Linux操作系统中是多人所任务的环境,所以系统随时都有很多不同的用户所执行的任务在进行,因此正确的开关机是很重要的。不正常的关机可能会导致文件系统错乱,造成数据的损毁,这也是为什么通常我们的Linux主机都会挂载一个UPS(不间断电源)的缘故。

登录界面:

  • 上边是时间和日期
  • 右上角是辅助功能(协助登陆的无障碍选项界面),语系、音量、关机钮
  • 中间则是我们的用户
  • “未列出”可供root账号登录(一般没事别root权限)

选择用户,输入密码,即可登录!

有个有趣的地方:Linux中文件是以 . 开头则为隐藏文件

活动⇒文件⇒其他位置⇒计算机

 

下即可看到系统文件:

  • 普通目录
  • 有箭头的目录:指有连接文件(类似于Windows的快捷方式)的数据
  • 画×目录:当前账号无权进入的目录

目录这个概念就是Windows中的文件夹

重新启动X Window:

当我们修改X Window的配置文件后,一般需要重新启动X Window,启动方法即:注销当前账号再重新登录(重启X Window不是重启系统)

X Window与命令行的切换:

Linux默认情况下提供6个终端(tty1~tty6)来让用户登录,安装了X Window的话,第一个终端就是图形化界面模式(tty1),其余是命令行的登录(tty2~6)

按【Ctrl+Alt+F1~F6】即可完成对应的切换

在命令行环境下执行startx即可启动图形化界面。
需要没有其他的X Window被占用,且你必须已经安装了X Window,并且X Server能够顺利启动

终端操作:

 

一开始系统会要求你进行登录,输入账号名称和密码即可

名词解释:

  • CentOS Linux 8 (Core):显示linux发行版的名称与版本
  • Kernel 4.18.0-147.e18.x86_64 on an x86_64:显示Linux的内核为4.18.0-147.e18.x86_64,且主机硬件架构为x86_64
  • study login:登录用户名(study是主机名)
  • Password:密码(输入时无回显)
  • Last login:上一次登录信息
  • [luoluo@study ~]$:luoluo是用户名,study是主机名,~表示家目录,$是提示字符。(~家目录是个变量,对于root,它就是/root;对于账号luoluo,它就是/home/luoluo。在Linux中,一般用户的提示字符是$,而root用户则是#。这也是我取名#的原因之一,管理员嘛)

命令执行:

命令行模式登陆后运行的程序成为壳(shell),这是因为这个程序负责最外面跟用户(我们)沟通,我们Linux的壳程序是最厉害的BASH。

命令的公式:

command [-options] parameter1 parameter2 ……
//  命令    选项        参数1     参数2    ……
  • 一行命令的第一个输入部分绝对是命令(command)或可执行文件(shell脚本)
  • 选项部分并没有中括号,这表示这个是可选的,而加入选项设置时,通常选项前会带-号,例如-h;有时候会使用选项的完整全名,则选项前带有–符号,例如:–help。
  • 命令、选项、参数之间按照空格区分,不管空几格,shell都视为一格
  • 回车键代表一行命令的开始启动
  • 命令太长的时候,可以使用反斜杠(\)来转义回车键,使命令延续到下一行,注意,反斜杠后就立即接着特殊字符才有意义
  • Linux中,英文大小写字符是不一样的

语言支持:

例如:

locale显示所支持的语系

LANG=en_US.utf8
export LC_ALL=en_US.utf8

即可修改语系为英语系

一些示例命令操作:

date    //显示日期

SatFeb 1 20:26:14 CST 2020

date +%Y/%m/%d //格式化输出

2020/02/01

cal   //显示日历
cal [mouth] [year]  //显示指定日历

 

bc   //调用计算器

 

注意:

  • 输入bc,实际上是进入到bc这个软件的工作环境中了
  • 计算器默认输出整数,scale=number指定输出小数位
  • quit即可退出

重要热键:

Tab

  • Tab接在一串命令的第一个字段后面,则为命令补全
  • Tab接在一串命令的第二个字段后面,则为文件补全
  • 若安装了Bash-completion软件,则在某些命令后面使用Tab按键时,可以进行 选项/参数的补齐 功能

Ctrl-c

  • 中断正在进行的显示

Ctrl-d

  • 键盘输入结束(相当于exit)

Shift-Page Down/Page UP

  • 翻屏查看

出错信息:

比如输命令date时输入DATE

 

bash(Linux的默认壳程序)会提示你输入有误,下面会给出提示

一般输入有误,无非三种情况:

1、 命令不存在,因为对应软件还没有安装;
2、 命令所在的目录目前用户并没有将它加入命令查找路径中(类似于Win的绝对路径概念);
3、 打错字了;

问题求助:

输入几个字符,再连按两次Tab可以查看这几个字符开头的所有命令

  • 输入命令后加 –help
  • man page
  • info page

man page:

这个man是manual(操作说明)的简写

输入

man 名词

既可以得到详细的关于这个名词字符串的解释,通常是用来查找命令的详细信息

例如这样man ls

 

最左上角有一个LS(1),这个1的意义参照下表:

代号 代表内容
1 使用者在shell环境中可以操作的指令或可执行档
2 系统核心可呼叫的函数与工具等
3 一些常用的函数(function)与函式库(library),大部分为C的函式库(libc)
4 装置文件的说明,通常在/dev下的文件
5 设定档或者是某些文件的格式
6 游戏(games)
7 惯例与协定等,例如Linux文件系统、网络协定、ASCII code等等的说明
8 系统管理员可用的管理指令
9 跟kernel有关的文件

而在man page文档中,如下按键会帮助你操作:

按键 进行工作
空白键 向下翻一页
[Page Down] 向下翻一页
[Page Up] 向上翻一页
[Home] 去到第一页
[End] 去到最后一页
/string 向‘下’搜寻 string 这个字串,如果要搜寻 vbird 的话,就输入 /vbird
?string 向‘上’搜寻 string 这个字串
n, N 利用 / 或 ? 来搜寻字串时,可以用 n 来继续下一个搜寻 (不论是 / 或 ?)
,可以利用 N 来进行‘反向’搜寻。举例来说,我以 /vbird 搜寻 vbird 字串,
那么可以 n 继续往下查询,用 N 往上查询。若以 ?vbird 向上查询 vbird 字串,
那我可以用 n 继续‘向上’查询,用 N 反向查询。
q 结束这次的 man page

至于在man page中,大致内容块,参考如下表:

代号 内容说明
NAME 简短的指令、资料名称说明
SYNOPSIS 简短的指令下达语法(syntax)简介
DESCRIPTION 较为完整的说明,这部分最好仔细看看!
OPTIONS 针对 SYNOPSIS 部分中,有列举的所有可用的选项说明
COMMANDS 当这个程序(软件)在执行的时候,可以在此程序(软件)中下达的指令
FILES 这个程序或资料所使用或参考或连结到的某些文件
SEE ALSO 可以参考的,跟这个指令或资料有相关的其他说明
EXAMPLE 一些可以参考的范例
BUGS 是否有相关的bug

在出现只记得一部分关键词的情况时,可以这样去用man命令

man -f man  //查找关键词含有man

-f是完全匹配

man                  (1)  - format and display the on-line manual pages
man                  (7)  - macros to format man pages

接下来使用man 7 man即可找到上面第二个man的信息文档
man -k man与-f不同,它是只要含有匹配,就可以找到

info page:

在所有UNIX-like系统当中,都可以利用man来查询信息。但是,Linux提供了一种在线求助的方法,就是info page。
info page是将文件数据拆成一个个的段落,每个段落用自己的页面来编写,并且在各个页面中还有类似网页的超链接来跳到各不同的页面中,每个独立的页面也被称为一个节点。
不过你要查询的目标数据的说明文件必须要以info的格式来写才能够使用info的特殊功能(例如超链接)。

因为info的说明文件有写成info格式,所以可以info info

info info

 

  • File:代表这个info page的资料是来自什么文件所提供的;
  • Node:代表目前的这个页面是属于什么节点。
  • Next:下一个节点的名称为Stand-alone,你也可以按‘N’到下个节点去;
  • Up:回到上一层的节点总揽画面,你也可以按下‘U’回到上一层;
  • Prev:前一个节点。但由于Top是info.info的第一个节点,所以上面没有前一个节点的资讯。

相关操作:

按键 进行工作
空白键 向下翻一页
[Page Down] 向下翻一页
[Page Up] 向上翻一页
[tab] 在 node 之间移动,有 node 的地方,通常会以 * 显示。
[Enter] 当游标在 node 上面时,按下 Enter 可以进入该 node 。
b 移动游标到该 info 画面当中的第一个 node 处
e 移动游标到该 info 画面当中的最后一个 node 处
n 前往下一个 node 处
p 前往上一个 node 处
u 向上移动一层
s(/) 在 info page 当中进行搜寻
h 显示求助选单
? 指令一览表
q 结束这次的 info page

其他软件:

还有很多有用的文档在 /usr/share/doc 中,要擅于利用

简单的文本编辑器nano:

在学习大名鼎鼎的vi/vim前,可以先了解一下这个编辑器——nano

直接输入

nano 文件名

即可,当前目录有文件则它会打开文件,没有文件则它会创造文件

底下会有一些操作提示,^代表Ctrl,M代表Alt

常用操作:

[ctrl]-G:取得联机帮劣(help),很有用的!
[ctrl]-X:离开naon软件,若有修改过档案会提示是否需要储存喔!
[ctrl]-O:储存档案,若你有权限的话就能够储存档案了;
[ctrl]-R:从其他档案读入资料,可以将某个档案的内容贴在本档案中;
[ctrl]-W:搜寻字符串,这个也是很有帮助的指令喔!
[ctrl]-C:说明目前光标所在处的行数不列数等信息;
[ctrl]-_:可以直接输入行号,让光标快速移动到该行;
[alt]-Y:校正语法功能开启或关闭(单击开、再单击关)
[alt]-M:可以支持鼠标来移动光标的功能

退出时按下Ctrl+x,若不保存更改,直接按下N,若要保存更改,按下Y,然后可以修改文件名,最后按下Enter即可保存离开

正确的关机:

  • Linux常常是多人多任务,在你看不到的屏幕背后其实可能有很多人同时在你的主机上面工作,所以突然关机,可能影响他人数据中断。
  • 不正常关机,可能造成文件系统的损毁(因为来不及将数据回显到文件中)

因此,关机时要注意:

1、 使用who来查看谁在线,使用netstat-a查看网络的联机状态,使用ps-aux来看后台执行程序,从而判断是否可以关机;
2、 利用shutdown参数,通知用户;

数据同步写入磁盘——sync:

数据读入内存后才能被CPU所处理,硬盘速度很慢,如果常常让数据在内存与硬盘中来来回回写入或读取,系统的性能不会太好

在Linux系统中,默认情况下,为了加快数据的读取速度,某些已经加载在内存中的数据不会直接被写回硬盘,而是暂存在内存中。

所以异常的关机就可能造成数据错误,所以要在关机或重启前,多执行此命令(虽然目前shutdown、reboot、halt等命令均已在关机前进行了sync这个命令的调用)。

一般用户执行sync,只是更新了自己的数据,而root用户调用,则是更新整个系统的数据。

关机——shutdown:

Linux中关机很重要,所以若你是物理终端(tty1~tty6),可以以任何账号身份关机;若你是远程管理(如通过pietty使用ssh从其他计算机登录),那就必须得root才能关机。

shutdown的命令公式:

shutdown [-krhc] [时间] [警告信息]
-k: 并不关机,只是发送警告信息
-r: 在将系统的服务停掉以后就重新启动
-h: 在系统的服务停掉后,立即关机
-c: 取消已经在进行的shutdown命令内容
时间: 以分钟为单位,若无值,则默认为1
shutdown -h now  //立即关机
shutdown -h 10:25  //10点25关机
shutdown -h +10   //10分钟后关机
shutdown -k now "系统要关机"  //吓唬人

重新启动:

reboot  重启
sync; reboot  //常用命令
halt   //系统停止,屏幕会保留系统已经停止的信息
poweroff  //系统关机,屏幕空白

systemctl:

上面的命令核心都是调用这个东西:

systemctl [命令]
命令项目包括如下:
halt //进入系统停止模式,屏幕可能会保留一些信息
poweroff  //进入系统关机模式,直接关机
reboot  //重新启动
suspend   //进入休眠模式

文件权限:

用户、组、其他人(这里先了解):

Linux是个多人多任务的系统,所以在Linux里面,每个文件都具有用户(User)、所属群组(Group)及其他人(Others)三种身份的个别权限。每个用户可以加入多个用户组。

用户身份信息存放在/etc/passwd中,个人的密码则是在/etc/shadow这个文件内,所有的组名都是在/etc/group中,这三个文件不要轻易删除。

文件属性与权限:

利用su -命令变成root,使用ls -al查看文件(参数l显示属性)

 

可以看到上图效果,每一行从左到右依次是:

权限——链接数——拥有者——用户组——文件容量——最后修改日期——文件名

权限:

第一个字符代表这个文件是目录、文件或链接文件等

  • d:目录
  • -:文件
  • l:链接文件(link file)
  • b:设备文件里面的可供存储的周边设备(可按块随机读写的设备)
  • c:设备文件里面的串行端口设备,例如键盘、鼠标

后面的九个字符,每三个为一组,且均是rwx的组合

  • r:可读
  • w:可写
  • x:可执行
  • -:对应位置为-,即表示无这个权限

而这三组:第一组为文件拥有者的权限、第二组为同一用户组下账号的权限、第三组为非本人且非本用户组的其他账号的权限。

例如隐藏文件cshrc,是个文件,本人可读可写不可执行、同组账号可读、其他账号可读。而权限对应数字r——4,w——2,x——1,所以可以说,这个cshrc文件的权限为644

链接数:

每个文件都会将它的权限与属性记录到文件系统的inode中,不过,我们使用的目录树却是使用文件名来记录,因此每个文件名就会链接到一个inode,这个属性记录的就是有多少不同的文件名链接到同一个inode号码。

拥有者:

文件或目录的拥有者账号

用户组:

文件或目录所属的组

文件容量:

文件的容量大小,默认单位是Bytes

最后修改日期:

文件或目录的最后修改/创建日期(月 日 时间/年份)
可以利用ls -l --full-time查看完整时间(出现乱码请export LC_ALL=en_US.utf8修改语系)

文件名:

文件的名称(前面有.为隐藏文件,用ls -a查看)

修改文件属性与权限:

修改所属用户组——chgrp:

chgrp(change group):将文件或目录修改所属组(组必须存在于/etc/group)

chgrp [-R] newgroup dirname/filename
-R:递归修改,即连同子目录下的所有文件、目录都会修改所属组

修改所属用户——chown:

chown(change owner ):将文件或目录修改所属用户(用户必须存在于/etc/passwd)

chown [-R] 账号名称 文件或目录
chown [-R] 账号名称:用户组名称 文件或目录
-R:递归处理

第二种方法也可以用来修改用户组

事实上,chown也可以使用 账号名称.用户组名称 ,但是有的账号可能中间会有.,所以建议大家用:来区分,chown也可以单独修改用户组,例如chown .newgroup test.txt

在复制文件给别的用户中,经常会用到修改用户和用户组,因为在本机复制文件会连同属性一起复制,别人可能仍无法查看文件。

修改权限——chmod:

权限数字修改:

r、w、x三种权限对应三个数字:r——4、w——2、x——1

即例如某文件是:-rwxr-xr–
即可说文件权限是:754

chmod [-R] xyz 文件或目录
-R: 递归处理连同子文件和目录
xyz:对应三组权限设置

 

符号类型修改:

 

u:拥有者
g:组 o:其他人
a:以上三种

 

go-r,等价于g-r o-r

权限的意义:

权限对文件的意义:

  • r(read):可读取文件的实际内容,如文件的文本内容
  • w(write):可以编辑、修改文件的内容(但是不能删除该文件)
  • x(execute):该文件具有被系统执行的权限

在Windows中,一个文件能否被执行由扩展名判断,例如.exe、.bat,在Linux中文件能否被执行,则是借由是否具有x权限来决定,根文件名没有绝对关系

权限对目录的意义:

  • r(read contents in directory):具有读取目录结构列表的权限,如ls读取(但是若只有r权限,则只能读取到文件名)
  • w(modify contents in directory):具有改动目录结构列表的权限(建立新文件或目录、删除已经存在的文件或目录——与它的权限无关、重命名文件或目录、移动文件或目录)
  • x(access directory):用户能否进入该目录的权限(当有x时,r就不重要了)

文件种类与扩展名:

常规文件:

在文件属性中为-:

  • 纯文本文件(ASCII):这里Linux中最多的一种文件类型,几乎只要我们用来作为设置的文件都属于这一种文件类型(cat命令可以读取)
  • 二进制文件(binary):Linux当中的可执行文件(Scripts,脚本文件不算)就是这种格式,比如刚刚执行的cat就是一个二进制文件
  • 数据文件(data):某些程序在运行的过程当中会读取某些特定格式的文件,比如我们Linux用户登录时,都会将登录数据记录在/var/log/wtmp这个文件内,该文件就是一个数据文件,它能够通过last这个命令读出来,用cat则会乱码。

在文件属性中为d:

  • 目录文件

在文件属性中为l:

  • 链接文件(类似Windows中的快捷方式)

在文件属性中为b/c:

  • 区块(block)设备文件:就是一些存储数据,以提供系统随机存储的接口设备,举例来说硬盘和软盘等就是。你可以随机的在硬盘的不同区块读写,这种设备就是块设备。你可以自行查一下/dev/sda看看,会发现第一个属性是b
  • 字符(character)设备文件:亦即是一些串行端口的接口设备,例如键盘、鼠标等。这些设备的特色就是一次性读取,不能够截断输出。举例来说,你不可能让鼠标跳到另一个画面,而是连续性的滑动到另一个地方,第一个属性是c

在文件属性中为s:

  • 数据接口文件, 这种类型的文件通常被用在网络上的数据交换了。我们可以启动一个程序来监听客户端的要求, 而客户端就可以通过这个socket 来进行数据的沟通了。最常在/run或/tmp 这些目录中看到这种档案类型。

在文件属性中为p:

  • FIFO 也是一种特殊的文件类型,它主要的目的是解决多个程序同时读写一个文件所造成的错误问题。 FIFO 是 first-in-first-out 的缩写,即管道(pipe)。

Linux文件扩展名:

一个Linux文件能不能被执行,与它的第一栏的十个属性相关,与文件名根本一点关系也没有,这个观念和Windows的情况不相同。

不过,Linux中也有一些扩展名来让用户了解这是些什么文件,下面举例:

  • *.sh:脚本或批处理文件(scripts),因此批处理文件使用shell写成,所以扩展名是sh
  • *.Z*.tar*.tar.gz*.zip*.tgz:经过打包的压缩文件,这是因为压缩软件分别为gunzip、tar等,由于不同的压缩软件,而取其相关的扩展名
  • *.html*.php:网页相关文件,分别代表HTML和PHP语法的网页文件。.html的文件可使用网页浏览器来直接开启,至于.php的文件,则可以通过客户端的浏览器来服务端浏览,以得到运算后的网页结果

如果你在网上下载一个可执行文件后,发现文件无法运行,那么可能就是文件的属性被修改了。从网络上下载到你的Linux环境中,文件的属性与权限确实是会被修改