这是我在学习Linux系统的过程中写下的笔记,因为记录得比较松散、不成体系,所以主要供本人使用,在今后使用Linux系统有疑惑之处时便于查询。
一、Linux系统简介
-
创始人:雷纳斯托瓦茨,因为Unix系统过于昂贵,遂开发出模仿Unix系统的Linux系统,供开源使用。
-
特点:兼具图形界面(GUI)既命令行(Shell,命令行解释器)的使用方式。主要使用命令行。这也是学习该课程的目的。
-
用途:搭建服务器、程序开发
-
Linux发行版:有Ubuntu,CentOS,Mint等。Linux作为操作系统内核,是Linux发行版的一部分。 一个典型的Linux发行版包括:Linux内核,一些GNU程序库和工具,命令行shell,图形界面的X Window系统和相应的桌面环境,如KDE或GNOME,并包含数千种从办公套件,编译器,文本编辑器到科学工具的应用软件。
二、基本概念及操作
-
Shell的概念:Shell,即命令解析器,相对于kernel(操作系统内核)而言,隐藏了操作系统的底层技术细节。主要功能是为使用者提供使用界面,类似于DOS下的command和cmd.exe。UNIX/Linux 操作系统下的 Shell 既是用户交互的界面,也是控制系统的脚本语言。Ubuntu终端默认使用bash。
-
命令行基本操作:
- touch file 创建一个名为file的文件
- cd /etc/ 进入一个目录
- pwd 查看当前所在目录
- 执行文件时,若执行失败,则返回错误,若执行成功,则不返回任何东西。
- ls 列出当前文件夹下的所有文件
- */? 通配符,前者匹配字符串,后者匹配字符
- 键盘↑键 浏览命令的历史记录
- man <command_name> 查询使用手册
- <command_name> --help 查询某个命令的参数使用方法
- 命令行常用快捷键
- tab 自动补全
- Ctrl+c 强行终止当前程序
- Ctrl+d 终止键盘输入或退出终端
- Ctrl+s 暂停当前程序
- Ctrl+z 当前程序放到后台运行
- Ctrl+a/Ctrl+e 光标移动至当前行首/行末
- Ctrl+k 删除光标后当前行的所有内容
- Shift+↑/↓ 终端显示向上or向下滚动
- sudo:即Switch User Do,一般用户只要使用该linux指令,即可在无需输入超级用户密码的情形下取得超级用户的权限,并执行特定的命令,如更新、安装程序等。
三、用户及文件权限
-
dev/tty:控制台的当前控制终端的别名
-
who命令:
- who am I/who mom likes/ -m:打印当前终端用户的用户名及伪终端信息
- whoami:当前登录用户的用户名(登录的用户不一定是打开终端的用户)
- -a:打印能打印的一切关于用户的信息
- -d:打印死掉的进程
- -q:打印当前用户数及用户名
-
root权限: root 权限,系统权限的一种,与 SYSTEM 权限可以理解成一个概念,但高于 Administrator 权限,root 是 Linux 和 UNIX 系统中的超级管理员用户帐户,该帐户拥有整个系统至高无上的权力,所有对象他都可以操作,所以很多黑客在入侵系统的时候,都要把权限提升到 root 权限
-
一般我们登录系统时都是以普通账户的身份登录的,要创建用户需要 root 权限,这里就要用到 sudo 这个命令了。不过使用这个命令有两个大前提,一是你要知道当前登录用户的密码,二是当前用户必须在 sudo 用户组。
Linux系统下输入密码是不会显示的。 -
su,su-,sudo:
- su <user> :可以切换到用户 user,执行时需要输入目标用户的密码。
- sudo <cmd>:可以以特权级别运行 cmd 命令,需要当前用户属于 sudo 组,且需要输入当前用户的密码。
- su -l <user> :也是切换用户,但是同时用户的环境变量和工作目录也会跟着改变成目标用户所对应的。
-exit 退出当前用户
- 用户组:在 Linux 里面每个用户都有一个归属(用户组),用户组简单地理解就是一组用户的集合,它们共享一些资源和权限,同时拥有私有资源。
- groups <user>:查看某用户所在的用户组
- /etc/group:记录了所有的用户组,可用一定方法对特定用户组进行查找,如在文件后添加 | grep -E “name” 来过滤掉不含字符串name的文件。
- **sudo usermod -G sudo <user>**添加用户user至sudo用户组中
- 用户的添加与删除
- **sudo adduser <user>**添加用户
- sudo deluser <user> --remove-home 移除用户并将其工作目录一并删除
- **sudo groupdel <group>**删除群组,必须在删除完该群组的所有用户后才能执行该操作
- ls命令:列出并显示当前目录下的文件,其后可跟不同的参数
- -l:长格式列出文件,长格式从左至右依次为,“文件类型和权限”、“链接数”、“所有者”、“所属用户组”、“文件大小”、“创建时间“、”文件名“。文件类型权限的由九个字符组成,其中r/w/x分别表示可读、可写、可执行,-表示不可进行操作。每三个为一组,三组依次表示拥有者权限、所属用户组权限、其他用户权限。
- -a:显示包括隐藏文件(以.开头)在内的所有文件
- -asSh:以简单的方式呈现文件,其中s为显示文件大小,S为按文件名排序
- 变更文件所有者:假设要将文件file的所有者改变为具有sudo权限的user,依次进行如下步骤:
- 切换到user用户
- 移动至file所在目录
- 执行命令:sudo chown user file
- 变更文件权限:先切换用户为文件的所有者,再执行命令:chmod abc file,由于文件有r/w/x三种类型,于是文件类型和权限可用一八进制三位数abc表示,若a为1,表示文件类型为r,否则不为r,b和c类似地可以刻画该文件关于w与x的性质。
四、目录结构及文件基本操作
1.目录
Linux目录与windows目录是不同的,windows主要以盘符和分区实现文件管理,目录的层级次于盘符;Linux系统虽然从本质上,目录和系统内核仍然挂载在磁盘上,但从逻辑上来说linux系统的磁盘是挂在目录上的,目录不仅可以使用本地磁盘的文件,也可以使用网络上的文件系统。
Linux目录结构采用FHS标准(英文:Filesystem Hierarchy Standard 中文:文件系统层次结构标准):FHS 定义了系统中每个区域的用途、所需要的最小构成的文件和目录同时还给出了例外处理与矛盾处理。
FHS 定义了两层规范,第一层是, / 下面的各个目录应该要放什么文件数据,例如 /etc 应该放置设置文件,/bin 与 /sbin 则应该放置可执行文件等等;第二层则是针对 /usr 及 /var 这两个目录的子目录来定义。例如 /var/log 放置系统日志文件,/usr/share 放置共享数据等等。
FHS系统由世界各地的开发者总结而成,保持不断的更新。
FHS系统将目录定义为四种交互形态,分别是:
2.路径
路径的概念:通过路径可以对目录进行定位,在操作某一个目录之前,必须对先对目录进行定位。
###一些指令:
- cd 切换目录,在其后加上目标目录的绝对路径,即可移动至目标目录
- . 当前目录
- … 上一级目录
- - 上一次所在目录
- ~ 当前用户home目录
- pwd 显示当前目录的绝对路径
绝对路径:
关于绝对路径,简单地说就是以根" / "目录为起点的完整路径,以你所要到的目录为终点,表现形式如: /usr/local/bin,表示根目录下的 usr 目录中的 local 目录中的 bin 目录。
相对路径:
相对路径,也就是相对于你当前的目录的路径,相对路径是以当前目录 . 为起点,以你所要到的目录为终点,表现形式如: usr/local/bin。如果是当前目录的上一级目录,则需要使用 … ,比如你当前目录为 /home/shiyanlou 目录下,根目录就应该表示为 …/…/
提示:在进行目录切换的过程中请多使用 Tab 键自动补全,可避免输入错误,连续按两次 Tab 可以显示全部候选结果。
3.文件操作
新建
- touch file 在当前目录下新建空白文件file
- mkdir dir 在当前目录下新建空白目录dir
- mkdir -p father/son/grandson 在当前目录下创建多级目录
-tips: 如果当前目录已经存在文件file,则在新建名为file的目录时会报错;如果当前目录已经存在文件夹dir,在新建名为dir的文件时会改变文件夹的时间戳,并不会新建一个重名的文件
复制
- cp file path 将文件file复制至路径path所对应的目标目录中
- cp dir path,会报错,复制目录时不能直接使用指令cp,而是要加上参数**-r**(表示对目录的递归复制),在指令cp -r dir path下,才能把目录dir复制至路径path对应的目录中。
删除
- rm file 删除文件file,若file为只读文件时无法进行删除操作
- rm -f file 删除文件file,可以无视file的只读属性
- rm -r dir 删除非只读目录dir,同复制操作要加上-r参数
- rm -rf dir 强制删除目录dir,可以无视只读属性
移动与重命名
- mv file path 将文件file移动(剪切)至path对应的目录中
- mv oldname newname 将名为oldname的文件重命名为newname
- 使用rename命令以及正则表达式可以对文件进行批量重命名。rename 命令并不是内置命令,若提示无该命令可以使用 sudo apt-get install rename 命令自行安装。
查看文件
- cat file 正序显示文件内容
- tac file 倒序显示文件内容
- cat -n file 显示文件内容并加上行号
- more file 使用more打开file文件,打开后默认只显示一屏内容,终端底部显示当前阅读的进度。可以使用 Enter 键向下滚动一行,使用 Space 键向下滚动一屏,按下 h 显示帮助,q 退出。
- head file及tail file 这两个命令只查看文件的头几行(默认为 10 行,不足 10 行则显示全部)和尾几行。
- head(tail) -n x file 查看文件的头(尾)x行
- file filename 查看文件filename的文件类型(这里的file是一个指令)
编辑文件
编辑文件一般会使用vim,emacs等命令行编辑器,在shell中输入vimtutor,即可浏览Linux内置的vim教程。
(持续更新中)