1. Linux用户管理
1.1 创建用户
在root用户下:
//创建用户
adduser zhangsan
//给用户设置密码
passwd zhangsan
此时按照提升输入密码即可,以后就可以用此账号登录Linux。可以自己用,也可以账号共享。
1.2 删除用户
在root用户下:
//删除用户
userdel -r zhangsan
2. 什么是操作系统?
OS是一款用来对软硬件资源进行管理的软件。管理目的:对上,对下,提高操作效率。
2.1 为什么要有操作系统(OS)?
(1)单纯的硬件计算机,操作起来效率特别低下,难度特别高。我们平常使用printf,cout
(软件)向显示器(硬件)打印,本质上就是向硬件写入数据。
(2)对下要管理好软硬件资源。
(3)对上给用户提供一个良好的、稳定的、高效的运行环境。
2.2计算机体系结构
底层是硬件,其上是驱动软件层。很显然,软件可以操作硬件。
驱动软件层可以帮上层实现对硬件的基本访问,它能为上层提供访问硬件的接口。就好比我们写了一个类,类中各种各样的成员函数为外界提供了各种各样的接口,以便类可以很好地使用。
一般而言,一种硬件,都会有厂商提供相应的驱动软件,并且获取驱动的方式是有OS帮我们获取和安装的。
再往上就是OS kernel层。狭义上讲就是我们所说的操作系统。
它包括四层:1. 进程管理 2.文件管理 3.内存管理 4.驱动管理
最上层就是用户层。它包括图形化界面、各种库以及应用程序。
我们可以类比一下银行系统:
Linux操作系统也是操作系统的一种,也要遵循以上操作系统的规则。
企业的后端就是Linux操作系统。
3. 基本指令
(1)为什么要进行指令操作:非专业人员没必要。专业人员,可以必要,也可以不必要。
但是对于我们学习OS原理、编程,指令操作必须要掌握。
(2)图形化界面不香吗?
我们要使用图形化界面,就必须要有鼠标。要敲指令,就必须得有键盘。而键盘是先出现的。
所有的操作系统,刚开始都是指令操作。但是为了让计算机商业化,必须讨好用户,才有了图形化界面。
(3)因为指令距离OS更近,便于我们更好的掌握OS。
3.1 ls
**语法:**ls 【选项】【目录或文件】
文件 = 文件内容 + 文件属性
我们曾经或将来要学的所有文件操作,无非两类:
- 对文件的内容操作
- 对文件的属性操作
在任意目录下,都会存在两个隐藏文件 (**.**当前路径 **…**上级路径)
Linux的路径分隔符是**/**,Windows的路径分隔符是 \
。
我们可以一路cd ..
回到上级路径,当我们回到**/**(根目录)就不能回退了。回来就必须用cd 路径
回来。
./a.out表示执行当前路径下的a.out程序(gcc/g++源文件获得)。如果不加点会报错:command not found
ls // 只显示文件名
ls -l // 显示文件的更多属性
ls -a // 显示隐藏文件(linux中以.开头的)
ls -al // 2和3指令的组合
ls -i // 显示文件编号(索引)
ls -n // 显示用户编号(索引)
ls -F // 在文件名后带标定符 '*'表示可执行程序 “/”表示目录
3.2 pwd
显示用户当前所在的目录。
3.3 cd
Linux系统中,磁盘上的文件和目录被组成一棵目录树,每 个节点都是目录或文件 。
(1)每一个子节点,既可以是一个目录(再放目录或者普通文件,递归式定义),也可以是一个普通文件
(2)这棵树的叶子节点一定是一个普通文件或者空目录。
(3)任何一个节点可以有多个子节点,但都只有一个父节点。常规的从根目录开始的路径定位具有唯一性(绝对路径)。
(4)通过cd … 去往上级目录的另一个文件或目录称为相对路径。
如果是日常使用,推荐相对路径
如果是添加配置文件等,推荐绝对路径
cd 跟上任何以绝对或相对路径构建的路径
cd ~ // ~当前用户的家目录
cd - // -跳转至上一次所处的路径
3.4 touch
touch file.txt // 我们当前只掌握创建文件
3.4 mkdir
mkdir dir // 创建目录
mkdir -p dir1/dir2 // 创建一串路径
3.5 rmdir和rm
rmdir dir // 只能删除空目录
rm file.txt // rm默认删普通文件
rm -r dir1 // 对不为空的目录递归删除
rm -rf file.txt // 强力删除
rm -rf / 删库跑路
3.6 man
man 1 // 查命令
man 2 // 查系统调用
man 3 // 查C语言函数(Linux自带C语言库)
3.7 cp
在同一个路径下文件名不能相同,不同路径可以相同。
cp file.txt file-bak.txt // 复制文件生成文件副本file-bak.txt
cp file.txt ../file.txt1 // 将文件副本file.txt1拷贝到上级目录
cp -rf lesson3 lesson3-bak // 复制目录必须带-r,f表示强制拷贝
3.8 mv
语法: mv [选项] 源文件或目录 目标文件或目录
类似剪切功能:a.可以剪切普通文件 b.可以整体剪切目录
mv file.txt .. // 将文件剪切到上级目录
mv lesson3 .. // 将目录剪切到上级目录
mv lesson3 lesson2 // 将目录剪切到指定目录
mv file.txt lesson2 // 将文件剪切到指定目录
类似win中的重命名,可以对普通文件,也可以对目录文件进行重命名。
mv file-bak.txt file.txt-bak // 对文件重命名
mv dir mycode // 对目录重命名
3.9 cat
比较适合查看短文本,或者代码。
cat file.txt // 正向显示文件内容
tac file.txt // 反向显示文件内容
cat -n file.txt // 正向显示文件内容且显示行号,tac不支持
cat如果后面什么都不跟,会默认从键盘(标准输入)当做文件,即你输入什么显示什么。
cat
3.10 more和less
对于长文本,我们想看具体第几行怎么办?
more和less都只会把一个屏幕显示满。
more file.txt // 显示1~31行,按回车下翻,q退出
/7773跳转至7773行。
less file.txt // 按回车支持↑↓前后翻
less可以帮助我们进行查看文本,可以用它来进行日志查看。
3.11 >(输出重定向)
本来应该写入到显示器的内容,把它写入到文件中,输出重定向。会清空原始文件的内容,进行重新写入。
echo "hello Yuucho" > hello.txt
3.12 >>(追加重定向)
不会清空原始内容,而是在原始文件的结尾进行新增式的写入。
echo "hello world" >> hello.txt
echo "hello shopee" >> hello.txt
3.13 <(输入重定向)
输入重定向,把本来应该从键盘文件中读取数据的方式,改成从指定的文件中读取。
cat < hello.txt
3.14 Ctrl + z
Ctrl + z会暂停任务,jobs可以显示你暂停的任务,且带有编号。
fg 1 // fg + 任务编号即可回到任务
Ctrl+c即可终止任务。
3.15 head和tail
head file.txt // 默认显示前10行
head -20 file.txt // 显示前20行
tail file.txt // 默认显示后10行
tail -20 file.txt // 显示后20行
如果我想查看文本的[30000,30020]怎么办?
管道:|称之为管道,|之前是传输的数据,|之后是输出的数据。
head -30020 file.txt | tail -21
我们还可以级联多条命令进行流水式处理数据:
head -30020 file.txt | tail -21 | head -3
3.16 find
find 路径 -name stdio.h // 在指定路径下找stdio.h文件
3.17 grep
按行搜索:显示所有包含’1234’的行
grep '1234' file.txt //默认大小写
grep -n '1234' file.txt //默认大小写匹配且带行号
grep -i 'c++' file.txt //忽略大小写搜索
grep -iv 'c++' file.txt //忽略大小写反向匹配不带关键字的行
4. 时间的相关命令
4.1 时间和时间戳
显示年(%Y)月(%m)日(%d)_时(%H)分(%M)秒(%S):
date +%Y-%m-&d_%H:%M:%S
时间戳:从1970年累计到现在的秒数
date +%s
这两种都会作为日志的一部分,具有排查错误的能力,从尾部看,时间+输出信息。
两种时间方式互相转换:
date +%Y-%m-&d_%H:%M:%S -d@时间戳
4.2 cal
日历
cal // 显示本月日历
cal 2021 // 显示2021一整年日历
`
4. 时间的相关命令
4.1 时间和时间戳
显示年(%Y)月(%m)日(%d)_时(%H)分(%M)秒(%S):
date +%Y-%m-&d_%H:%M:%S
时间戳:从1970年累计到现在的秒数
date +%s
这两种都会作为日志的一部分,具有排查错误的能力,从尾部看,时间+输出信息。
两种时间方式互相转换:
date +%Y-%m-&d_%H:%M:%S -d@时间戳
4.2 cal
日历
cal // 显示本月日历
cal 2021 // 显示2021一整年日历