Linux基础
一、常用命令
1、Linux登录与退出及基本命令
①登录:
hostname login:输入用户名(如root)
password:输入密码(无回显)
分配给用户一个UID,系统用UID确定属于该用户的进程。
控制台提示符:
[root@hostname/root]# 超级用户
[tom@hostname/home/tom]$ 普通用户
root用户对整个系统的访问没有限制,是最大权限的用户。root用户可以修改所有用户的口令。普通用户只能修改本用户的口令。
②注销用户登录:
bash
exit
,回到login:状态
③不同控制台切换
Linux提供了6个虚拟控制台供用户使用可用ALT + F1 \ F2 \ ......\F6进行切换
④进入X-windows
在没有启动x-windows时,要启动x-windows,可以在控制台提示符下使用以下命令:
startx
⑤x-widows 下同控制台间的切换。
在x-windows 下换到控制台用(以下热健):
bash
Ctrl+Alt+F1\F2....F6
Ctrl+shift+Alt+F1\F2....F6 (vmware虚拟机多按shift)=
在控制台下换到x-windows用:
Alt+F7
⑥回滚控制台屏幕:
xml
<Shift> + <PageUp>
<Shift> + <PageDown>
⑦Linux的关闭
arduino
halt
shutdown -h now
reboot
Alt+Ctrl+Del
2、用户管理
- Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
- 用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
- 每个用户账号都拥有一个唯一的用户名和各自的口令。
- 用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。
①新建用户(user add)
arduino
useradd UserName 添加一般用户
useradd -g 用户组 UserName 为添加的用户指定相应的用户组
useradd -d 指定home目录 UserName 为新添加的用户指定home目录
新建用户后,会在/home目录下建立一个以UserName命名的文件夹,用户每次登录时自动定位到该文件夹下。
②为用户设置密码(password)
passwd UserName 修改用户密码
passwd -d UserName 删除用户密码
passwd -l UserName 锁定用户不能更改密码
•passwd作为普通用户和超级权限用户都可以运行,但作为普通用户只能更改自己的用户密码,前提是没有被root用户锁定;
•如果root用户运行passwd,可以设置或修改任何用户的密码;
•passwd命令后面不接任何参数或用户名,则表示修改当前用户的密码;
③删除用户(user delete)
userdel 选项 UserName
选项:
-f: 强制删除用户,即使用户当前已登录
-r:删除用户目录下的文件及与用户相关联的其他文件
-rf: 强制删除用户 并且在删除该用户的同时一起删除主目录
④用户间切换(substitute user)
su UserName
3、用户组管理
-
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。
-
同一用户组的用户之间具有相似的特征。
-
一个用户可以归属一个或多个不同的用户组。
-
在使用useradd命令创建用户的时侯可以使用-g 和-G 指定用户所属主组和附加组。
-
主组:如果没有指定用户组,创建用户的时候系统会默认同时创建一个和这个用户名同名的组,这个组就是主组,不可以把用户从主组中删除。在创建文件时,文件的所属组就是用户的主组。
-
附加组:除了主组之外,用户所在的其他组,都是附加组。用户是可以从附加组中被删除的。
-
用户不论为与主组中还是附加组中,就会拥有该组的权限。一个用户可以属于多个附加组。但是一个用户只能有一个主组。
-
主组是用户登录系统时的组,规则如下:
- 创建新用户时,若未明确指定该用户所属的主组,会默认创建一个与用户名相同的组,作为该用户的主组
- 用户创建文件时,文件的所属权限组就是当前用户的主组
- 使用useradd命令时用-g参数可以指定主组,则不会默认创建同名的主组
- 用户有且只能所属一个主组
- 用户的主组不能被删除
- 用户不能直接被移出主组,但可以更换主组
- 用户被删除时它的主组若没有其他所属用户,则会自动删除该主组
-
附加组:登录后可切换的其他组,规则如下:
- 使用useradd命令时用-G参数可以指定附加组
- 用户可以所属零个或多个附加组
- 用户的附加组和主组可相同
- 附加组可以直接被删除而无需关心是否所属于用户
- 附加组可以新增和移除任意个所属用户
- 用户被删除时所属附属组不会受影响
①新建组(group add)
groupadd GroupName
②删除组(group delete)
groupdel GroupName
③修改用户的组
usermod -g 主组 -G 附加组 UserName
eg: usermod --g group1 --G group2,group3 sunny
④查看当前用户所属组
bash
groups
⑤查看用户所属组
bash
groups UserName
ps:建议先去看第四大点,再看下面3点
4、目录管理
①创建目录(make directory)
arduino
mkdir DirecName
②删除目录(remove directory)
bash
rmdir DirecName 删除空目录
rm -rf DirecName 删除目录及下面所有文件
③显示工作目录(print working directory)
bash
pwd
④显示目录内容(list)
bash
ls [选项]
选项 :
-a 显示当前目录下的所有文件,包括以.开头的文件。
-l 以长列表的形式显示文件列表,如:-rw-r--r-- 1 haison haison 18 Nov 2 10:10 haison.c`
⑤改变当前目录(change directory)
bash
cd 或 cd ~ 进入登录时的主目录
cd / 进入根目录
cd .. 进入上一级目录
cd /home 进入系统的home目录
cd home 进入当前目录下的home目录
⑥目录重命名(move)
bash
mv SourceDirecName TargetDirecName
⑦目录拷贝(copy)
bash
cp -r SourceDirec TargetDirec
5、文件管理
①新建文件
bash
>FileName 或
touch FileName 或
vi FileName
②删除文件(remove file)
bash
rm [选项] FileName
选项:
-f 删除文件之前不提示任何确认信息
-r 递归删除目录下所有子目录的内容
③复制文件(copy)
bash
cp SourceFile TargetFile 将源文件复制为目标文件
cp SourceFile TargetDirec 将源文件复制到目标目录下
④文件链接(link)
ln命令是为某一个文件在另外一个位置建立一个硬链接和软链接。
css
ln [选项] [源文件或目录] [目标文件或目录]
ln --s SourceFile TargetFile
选项 -s:创建软链接(如果不带 -s 参数,默认创建硬链接)
创建文件链接,用ls --l查看,会看到 TargetFile->SourceFile
⑤改变文件的时间参数(touch)
改变文件访问和修改时间,或用指定时间建立新文件。
bash
touch [选项] 文件列表
无选项 会同时更新文件的修改时间和访问时间
-a 只更新访问时间,不改变修改时间
-c 若目标文件不存在,不建立空的目标文件
-m 只更新修改时间,不改变访问时间
-t 参数 将时间修改为参数指定的日期,如:07081556代表7月8号15点56分
⑥显示文件内容
css
more FileName 分页显示文件内容,按空格翻页,回车显示下一行,按q退出
scss
less FileName more的升级版,可上下翻页,底部输入/xxx(字符)可实现搜索功能
bash
cat FileName 一次全部显示文件的内容
cat file1 file2>file3 将file1、file2的内容写到file3,覆盖file3原内容
cat file1>>file2 将file1的内容追加到file2,file2原内容不变
bash
head FileName 只显示文件的前10行
head --n FileName 显示文件的前n行
tail FileName 只显示文件的后10行
tail --n FileName 显示文件的后n行
nl FileName 一次全部显示文件的内容,给所有行加上行号
⑦文件移动/重命名(move)
bash
mv SourceFile TargetFile 将一个或多个文件移动到另外一个目录下,或者将一个文件重命名为另一个文件。
⑧文件查找(find)
css
find [路径] [表达式] 在指定目录及其子目录查找文件
- 路径为空则在当前目录及其子目录查找文件
- 路径可以包含多个路径名,之间用空格隔开
- find命令可以根据各种检索条件在指定目录及其子目录查找文件
css
find [路径...] [表达式] [动作]
路径...:准备寻找文件所在的路径以及它的子路径。路径为空则在当前目录及其子目录查找文件,路径可以包含多个路径名,之间用空格隔开。
表达式:包含要搜索文件的条件,可以包含文件名、拥有者、最后修改时间等。
动作:找到文件后执行的命令,如果动作为空,则使用默认的命令-prin
表达式 | 说 明 |
---|---|
-name 文件 | 告诉find要找什么文件;要找的文件包括在引号中,可以使用通配符(*和?) |
-perm 模式 | 根据文件的权限来查找文件 |
-type x | 匹配所有类型为x的文件。x是c(字符特殊),b(块特殊),d(目录),p(有名管道),l(符号连接),s(套接文件)或f(一般文件)。 |
-links n | 匹配所有连接数为n的文件。 |
-user 用户号 | 按照文件属主来查找文件,可以是数字型的值或用户登录名。 |
-atime n | 匹配所有在前n天内访问过的文件。 |
-ctime n | 匹配所有在前n天内修改过状态的文件。 |
-mtime n | 匹配所有在前n天内修改过内容的文件。 |
-newer 文件 | 匹配所有修改时间比file文件更新的文件。 |
-size n | 匹配所有大小为n的文件 |
动作 | 说 明 |
---|---|
默认的命令 | |
-exec command {} \ | 在当前目录下查找文件扩展名为.bak的文件,找到后删除它 (a){}表示rm的参数是由find找出的文件, (b)在{} 与 ;间有空格; |
-ok command {} \ | 找到相应文件后执行命令 ,基本同-exec,但需用户确认 在当前目录下查找文件扩展名为.bak的文件,找到后删除它,需用户确认 (a){}表示rm的参数是由find找出的文件, (b)在{} 与 ;间有空格; |
⑧文件内容查找(grep)
css
grep [选项] 匹配模式 文件或目录
功能:查找文件里符合条件的字符串
参数说明:
- 选项(可选):
-c:只显示有多少行匹配,而不具体显示匹配的行
-h:不显示文件名
-H:在每个符合的行前加上符合的文件名称
-i :在字符串比较的时候忽略大小写
-l:只显示包含匹配模板的行的文件名清单
-L:只显示不包含匹配模板的行的文件名清单
-n:在每一行前面打印该行在文件中的行数
-v:反向检索,只显示不匹配的行
-w:只显示完整单词的匹配
-x:只显示完整行的匹配
-q:不显示任何输出
-C:列出符合行外并列出上下各NUM行,默认为2
-B:列出符合行外并列出之前的NUM行
-A:列出符合行外并列出之后的NUM行
-E:扩展正则表达式
-r/-R:若是目录,则递归搜索其所有子目录和文件
-
匹配模式:希望在文件中查到的字符串或表达式。
-
文件列表:可选的、用空格分隔的文件列表或目录,用于查询给出的字符串或正则表达式。若该参数为空,则查询标准输入。
-
grep退出状态
0:成功
1:无法找到匹配的pattern
2:文件不存在
⑨文件内容统计命令wc
bash
wc [选项] 文件列表
功能说明:统计指定文件中的字节数、字数(由空格字符区分开的最大字符串)、行数, 并将统计结果显示输出。若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。
选项
-c 只显示字节数
-w 只显示字数
-l 只显示行数
⑩显示目录内容(list)
bash
ls [选项]
选项 :-a 显示当前目录下的所有文件,包括以.开头的文件。
-l 以长列表的形式显示文件列表,如:-rw-r--r-- 1 haison haison 18 Nov 2 10:10 haison.c`
- 文件类型
前缀 | 类型 | 前缀 | 类型 |
---|---|---|---|
--- | 普通文件 | l | 链接(link)文件 |
b | 块(block)设备文件 | p | 命名管道(pipe)文件 |
c | 字符(character)设备文件 | s | 本地套接口(socket) |
d | 目录(directory) |
- 文件访问权限
字符 | 含义 | 二进制与八进制表示 |
---|---|---|
r | read :读,可以显示该文件的内容 | 100=4 |
w | write :写,可以编辑或删除它 | 010=2 |
x | execute:执行,如果是程序的话 | 001=1 |
6、权限管理
①改变文件/目录的权限(change mode)
bash
chmod [u/g/o/a] [+/-/=] [权限] FileName/DirecName
其中:
+:增加指定的权限
-:去掉指定的权限
=:清除所选的权限并将其设置为制定的权限
chmod允许使用八进制符号作为模式,改变权限。
chmod PermissionCode FileName/DirecName
其中, PermissionCode 按如下方式计算
chmod命令示例
假定haison.c最初具有这样的权限rwxrwxrwx,连续操作如下
命令 | 结果 | 含义 |
---|---|---|
chmod a-x haison.c | rw-rw-rw- | 收回所有用户的执行权限 |
chmod go-w haison.c | rw-r- -r- - | 收回同组用户和其他用户的写权限 |
chmod g+w haison.c | rw-rw-r- - | 赋予同组用户写权限 |
chmod a= haison.c | - - - - - - - - - | 清除文件的所有权限 |
chmod 666 haison.c | rw-rw-rw- | 赋予所有用户读和写的权限 |
chmod 644 haison.c | rw-r- - r- - | 赋予属主读、写权限,其他用户读权限 |
chmod 700 haison.c | rwx- - - - - - | 赋予属主读、写和执行权限 |
chmod 660 haison.c | rw-rw- - - - | 赋予属主、属组读和写的权限 |
②改变文件/目录的属主(change owner)
bash
chown Owner FileName/DirecName
③改变文件/目录的属组(change group)
bash
chgrp Group FileName/DirecName
④改变文件/目录的属主和属组
bash
chown owner:group FileName/DirecName
二、Shell命令
在shell提示符下,输入命令,然后按下Enter键。
可以通过上下方向键来调出已使用的命令。
shell识别大小写,按"tab"键自动补齐。
如果找不到你输入的命令,会显示反馈信息:"未找到命令"
如果命令太长,要在第一行行尾键入"\"字符和按下Enter键,在下一行的">"后接着输入
常用的shell命令
bash
man 命令名 可查看相应命令的英文帮助
man --k keyword,可查看相应关键字对应的哪些命令SHELL
命令名 --help 或 -h 在命令使用-h参数也可查看部分帮助。
bash
who/w 显示当前登录系统的用户信息
file 查看文件的类型
arduino
clear 清除当前屏幕
bash
echo 在屏幕上显示一段文字
echo $HOME 显示环境变量HOME
echo [--n] "文字信息" 加参数n表示显示完后不换行,不加n表示显示后换行
bash
date 显示/设置当前时间日期
ps or pstree 显示当前运行的进程信息
c
free 显示空闲内存
bash
du -h 显示文件或目录所占的空间
bash
df -h 显示磁盘剩余空间
bash
kill 结束一个进程
arduino
shutdown -h now关机
reboot 重启系统
bash
exit 注销当前登陆
三、Vi
1、vi的特点
- 全屏幕编辑器
- 纯文本编辑器
- 工作于3种模式
- 通过命令进行编辑操作
2、vi的模式
- 命令模式:在终端输入"vi 文件名"进入命令模式
- 输入模式:命令模式下输入文本输入命令如"i"进入输入模式
- 末行模式:命令模式下输入":"进入末行模式
3、vi用法
输入模式
新增
- 从光标所在位置后面开始新增资料,光标后的资料随新增资料向后移动。
- 从光标所在行尾开始新增资料。
插 入
- 从光标所在位置前面开始插入资料,光标后的资料随新增资料向后移动。
- 从光标所在行首开始插入资料。
开 始
- 在光标所在行下方新增一列并进入输入模式。
- 在光标所在行上方新增一列并进入输入模式。
退出输入模式
- Esc
退出
- :q (Quit)退出没有被修改的文件(若文件被修改了而没有保存,则此命令无效)
- :q! 强制退出,且不保存修改过的部分
- :w (Write)保存文件,但不退出
- w filename 另存为File给出的文件名,不退出
- :w! filename 强制另存为File给出的文件名,不退出
- :wq或:x (Exit)保存文件并退出
四、Linux文件系统(概念)
- Linux文件系统是文件存放在磁盘等存储设备上的组织方法。Linux能支持多种目前的文件系统,如EXT2、EXT3、FAT、VFAT、ISO9660、NFS、SMB等。
- Linux中默认文件系统是ext2,如今一般选用带日志功能的增强型文件系统ext3。
- Linux操作系统不使用盘符,所有存储设备或硬盘分区对应的文件系统组织在唯一的根目录下,形成树型结构,无论操作系统管理几个磁盘分区,这样的目录树只有一个。Linux系统中各个磁盘分区上的树型目录不一定是并列的,而是位于Linux以根目录开始的树型目录上的某一个子目录的开始的子树。
- Linux的文件目录结构:树型目录结构
lua
/---------------------------- :根目录
|------------home/ :用户目录 ,包括用户信息等
|------------bin/ :执行目录,可执行文件常用命令
|------------boot/ :引导目录,引导系统使用的文件
|------------etc :配置目录,系统配置时使用
|------------dev/ :设备目录,通过它访问外设
|------------mnt/ :安装目录,管理员设备临时安装点
|------------opt/ :安装目录,管理员软件包放置点
|------------lib/ :库目录,命令执行时使用
|------------usr/ :共享目录, 所有用户的共享文件
|------------var/ :数据目录, 系统运行时要修改数据
|------------tmp/ :数据目录, 系统运行时要修改数据
|------------proc/ :虚拟目录, 文件系统内存产生
|------------root/ :超级用户目录,包括桌面管理等
Linux的基本思想
- 一切皆文件,系统中的所有都归结为一个文件,包括命令、软硬件设备、进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件。
- 每个文件都有确定的用途
文件和目录
-
文件系统是在物理存储设备中存放数据的索引格式,文件和目录是数据的逻辑划分形式。
-
Linux系统的文件类型概括起来可分为5种:普通文件、目录文件、设备文件、链接文件、管道文件。
- 普通文件:平时所见的大多数文件,分为文本文件和二进制文件。
- 目录文件:用于存放文件路径及相关信息的文件,是文件系统的基本节点。目录文件使文件系统呈现出树形结构。在Linux系统中,通常所说的目录就是指目录文件。
- 设备文件:保存计算机设备信息和接口的文件,这是Linux操作系统的独特形式,计算机的所有设备都以文件的形式提供给应用程序使用。只要Linux的内核实现对应的设备的驱动,用户就可以像访问普通文件一样访问任何外部设备。
- 链接文件:指向另一个真实文件的链接,是一种特殊的文件结构,分为硬链接文件和符号链接文件,硬链接文件与被链接文件只能存在同一文件系统分区中,而符号链接文件与被链接的文件可以分处不同的文件系统分区。
- 管道文件:用于应用程序之间进行通信的文件。管道是Linxu中很重要的一种通信方式,是把一个进程的输出直接连接到另一个进程的输入。当两个进程需要进行数据与信息传递时,可以使用管道文件,一个进程将需要传递的数据或信息写入管道的一端,另一进程从管道的另一端取得所需要的数据或信息。写入的数据每次都添加到管道缓冲区的末尾,读数据的时候都是从缓冲区的头部读出数据的,管道文件通常建立在内存中。
文件名
- Linux系统的文件名由字符和数字组成,其中字符可以是大小写英文字母或其他Unicode编码的文字和符号。但不能包括"*"、"?"和"[ ]"文件名通配符。
- Linux系统的文件名也有类似其他操作系统的扩展名,在文件名最后一个"."后的内容即是扩展名。例如,C语言源文件的扩展名是c,头文件的扩展名是h。
路径名
- Linux文件系统采用带链接的树形目录结构,即只有一个根目录。根目录可含有下级子目录或文件;子目录中又可含有更下级的子目录或者文件。这样一层一层地延伸下去,构成一棵倒置的树。
- 路径名可分为绝对路径和相对路径,绝对路径是从根目录到目标目录或文件所经过的所有节点名称,如文件m1.c的绝对路径是"/home/shizhe/workspace/m1.c"。相对路径是某一个目录到目标目录或文件所经过的所有节点名称,如文件m1.c的相对于"/home"的相对路径是"shizhe/workspace/m1.c"。
工作目录
- 控制台或终端在某个时刻总是对应着一个目录,该目录即工作目录。
- 在控制台或终端执行命令或程序,对某个没有指定路径的文件或子目录进行操作,控制台或终端会自动在文件或子目录前加入当前工作目录的路径。例如,执行ls命令会将工作目录下的文件和子目录名称显示出来,除非在ls命令后输入某一具体的路径名称。
- 工作目录可用"."表示,工作目录上层父目录用".."表示。cd命令用于改变工作目录。
- 控制台或终端会将"
"符号替换成用户起始目录的绝对路径,Linux系统会自动维护""符号的值。
主目录
- 主目录:系统管理员增加用户时建立起来的,每个用户都有自己的主目录,默认的用户主目录是/home目录下与用户账号同名的目录。
- 超级用户root的主目录是/root。
- 用户刚登录Linxu系统时,其当前工作目录为用户的主目录。
- 主目录一般用符号"
"表示。控制台或终端会将""符号替换成用户主目录的绝对路径,Linux系统会自动维护"~"符号的值。
文件系统的特点-inode
- Ext2中每个分区有个索引节点表(inode table)
- 每个文件由一个索引节点(inode)唯一表示,文件名只是一个指向inode的一个名字。
- 一个inode才能唯一表示一个磁盘存储空间。
- inode是个结构体struct,包含了文件所有必需的信息(文件的修改时间、建立时间、文件的访问权限、拥有者、文件类型、在磁盘的存放路径等等),并指向实际保存文件的存储设备上物理块
- 可以使用ls -i filename来查看指定文件的inode编号
- 目录存储一组相关文件的inode的信息
硬链接
- 在 Linux 系统中 ,索引节点 inode号才是文件的唯一标识而非文件名。系统是通过 inode 号寻找正确的文件数据块。文件名只是为了方便人们的记忆和适用,仅仅是一个指针。
- 硬链接是一个文件的一个或多个文件名,可以理解为一个 "指向文件 inode 的指针",系统不为它分配独立的 inode 和文件。所以,硬链接文件与原始文件其实是同一个文件,只是名字不同。
- 我们每添加一个硬链接,该文件的 inode 连接数就会增加1;每删除一个硬链接,该文件的 inode 连接数就会减1;只有当该文件的 inode 连接数为0时,才算彻底将文件删除。因此即便删除原始文件,依然可以通过硬链接来访问文件。
- 硬链接只能用于文件,不能用于目录。
- 硬链接的源和目的都必须位于同一文件系统。
- rm命令不是删除一个文件;它只是移去一个文件的一个硬链接,直到最后一个硬链接被移去了,Linux内核才删除该文件。
软链接
- 软链接又叫符号链接,包含了另一个文件的路径,类似Windows系统的快捷方式。当删除原始文件后,软链接仍然存在,只不过失效了。
- 软链接可对文件或目录创建。
- 软链接可以链接不同文件系统的文件。
- -s 建立一个软链接而不是硬链接,目标文件指向源文件的路径和名字,而不是它的数据,得到一个新的inode。