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。
相关推荐
A小辣椒1 天前
TShark:Wireshark CLI 功能
linux
A小辣椒2 天前
TShark:基础知识
linux
AlfredZhao2 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪3 天前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5203 天前
Linux 11 动态监控指令top
linux
不会C语言的男孩3 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言