Linux基础

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的文件
动作 说          明
-print 默认的命令
-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。
相关推荐
Bonne journée几秒前
centos和ubuntu有什么区别?
linux·ubuntu·centos
vvw&2 分钟前
如何在 Ubuntu 22.04 上安装带有 Nginx 的 ELK Stack
linux·运维·nginx·ubuntu·elk·elasticsearch·开源项目
Linux运维老纪4 分钟前
交换机配置从IP(Switch Configuration from IP)
linux·服务器·网络·安全·运维开发·ip
OneSea5 分钟前
Debian源码管理
linux
加载中loading...8 分钟前
C/C++实现tcp客户端和服务端的实现(从零开始写自己的高性能服务器)
linux·运维·服务器·c语言·网络
大筒木老辈子10 分钟前
Linux笔记---进程:初识进程
linux·服务器·笔记
木木em哈哈15 分钟前
archlinux安装waydroid
linux·运维·服务器
Abladol-aj2 小时前
并发和并行的基础知识
java·linux·windows
JunLan~6 小时前
Rocky Linux 系统安装/部署 Docker
linux·docker·容器
方竞7 小时前
Linux空口抓包方法
linux·空口抓包