Linux-基本操作
Linux
启动顺序
- 内核引导
通常从磁盘启动,然后读入/boot目录下的内核文件 - 运行init
init进程为所有进程的初始进程,首先要读取配置文件/etc/inittab
init进程用于管理需要开机启动的程序,称之为“守护进程”
对于不同的运行级别,会有不同的开机启动程序(启动为桌面是其中一种运行级别) - 系统初始化
在init的配置文件中有这么一行: si::sysinit:/etc/rc.d/rc.sysinit 它调用执行了/etc/rc.d/rc.sysinit, 而rc.sysinit是一个bash shell的脚本,它主要是完成一些系统初始化的工作,rc.sysinit是每一个运行 级别都要首先运行的重要脚本 - 建立终端
init接下来会打开6个终端,以便用户登录系统
其中一个就是文本登录界面 - 用户登录系统
包含了一下三种方式
- 命令行登录
- SSH登录
- 图形界面登录
- 关机
sync # 将数据同步到硬盘
shutdown -h 10 'note' # 在十分钟后关闭,并且显示一条note
shutdown -h now # 立即关机
shutdown -h 20:25 # 在20:35关机
shutdown -h +10 # 在10分钟后关机
shutdown -r now # 系统立即重启,可以套用以上的时间格式
halt # 相当于shutdown加上power off
系统目录
ls / # 查看根目录
ls . # 查看当前目录
ls .. # 查看上一级目录
以下以WSL为例进行解释
- /bin 存放经常使用的命令(Binaries)
- /boot 存放一些与启动相关的核心文件
- /dev 系统连接的外部设备(Device),包含了loop,tty等等,在Linux中访问设备和访问文件的形式是相同的
- /etc 存放系统管理的配置文件(Etcetera)
- /home 用户的主目录,包含了各个用户的个人文件夹,一般只有一个用户,就是当前登录的用户
- /lib 存放系统的动态连接共享库(Library),也有一个lib32,lib64,libx32的文件夹
- /lost+found 一般为空,用于存放错误内转储文件,需要较高权限打开
- /media 系统自动识别的外部挂载设备
- /mnt 临时挂载的内容
- /opt 系统额外安装的软件(optional)
- /proc 存放当前内核运行状态的一系列特殊文件,这个目录的内容存放在内存里(process)
- /root 该目录为系统管理员的用户主目录,需要较高权限打开
- /sbin 系统管理员的系统管理程序(superuser binary)
- /srv 服务启动后需要提取的数据
- /run 临时文件系统,存储系统启动以来的信息
- /sys sysfs 针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统
- /var 各种需要修改的文件
- /usr 用户的应用程序和文件,(unix shared resources)
- /usr/bin 用户安装的应用程序
- /usr/sbin root用户安装的高级程序
- /usr/src 内核源代码
远程登录
一般是通过SSH完成远程连接,默认端口号为22,同时要输入IP address,用户名,密码
可以通过以下方式查看IP地址
sudo apt install net-tools # 首先可能需要安装网络工具
ifconfig # 查看网络情况,寻找服务器IP
可以通过以下方式直接在终端(shell)进行登录
ssh -p 22 username@ip # 同时输入端口号,服务器用户名及服务器IP
文件属性
通过以下方案查看文件信息
ls -l /bin # 查看该目录下的文件详细信息
ll /bin # 效果同上
以下为文件属性的解释
lrwxrwxrwx 1 root root 7 Aug 5 05:39 /bin -> usr/bin/
# l 表示链接文件(link file),d表示目录,-表示文件,b表示存储设备,c表示串口设备
# rwxrwxrwx 表示文件所有者,文件所有者所在组,所有人对应的读,写,执行的权限
# 1 表示硬链接个数
# root 表示用户名
# root 表示用户的组名
# 7 表示文件大小,KB
# Aug 5 05:39 表示文件最后修改时间
# /bin -> usr/bin/ 因为是链接文件,此处指明了指向的位置,其他文件会显示文件名
以下为文件属性更改方式
chmod u=rwx,g=rx,o=r 文件名 # 未出现的为不包含权限
chmod -r xyz 文件或目录 # 注意此处使用了数字和来表示权限,r为4,w为2,x为1
chgrp -r 属组名 文件名 # 更改文件的组名,R表示递归更改,当操作某个目录时,目录下的文件属性都会得到更改
chown –r 属主名 文件名 # 更改文件的所有者名称
chown -r 属主名:属组名 文件名 # 同时更改文件所有者名称和所属组名称
文件操作
文件或目录查看
ls -adl 目录名
# list files
# a列出所有文件,包括隐藏文件
# -d列出目录本身,而不是目录内的文件
# -l列出更详细的信息,包括了属性和权限
cd 目录
# 变更工作目录
# change directory
pwd
# print working dictionary
文件操作
touch 路径
# 创建文件
# 可以直接是文件名,意思是在当前目录下创建这个文件,需要有后缀
# 可以同时给出多个文件名
vim 路径
# 可以实现同样的功能
mkdir -mp 目录名
# make directory
# 在当前工作目录下创建一个新目录
# -p可以一次性创建一个多级目录
# -m配置文件的权限
rmdir -p 目录名
# remove directory
# 删除目录,注意只能删除空目录
# -p可以删除多级目录,包括上级目录
rm -flr 文件或者目录
# remove directory
# -f 强制删除,若元素不存在,也不报错
# -i 在删除前进行询问
# -r 递归删除
cp -adfilprsu 来源 目标
# copy
# -a 相当于所有
# -d 来源为link,则复制link属性,而非指向的文件本身
# -f 强制复制,目标文件存在,则移除再复制(也就是替换)
# -i 若目标存在,在覆盖前先询问动作的进行
# -l 进行hard link的创建,而非复制文件本身
# -p 连同文件的属性一起复制,而非使用默认属性
# -r 递归复制,用于复制目录及其下属文件
# -s 复制称为symbolic link,也就是捷径文件
# -u 若目标文件较来源文件旧才进行替换
mv -fiu 来源 目标
# 剪切
# -f 强制,目标文件若已经存在,则直接覆盖
# -i 若目标文件存在,操作前进行询问
# -u 若目标文件较来源文件旧才进行替换
文件打开
cat -AbEnTv 文件名
# 由第一行开始展示内容
# -A,可以列出特殊字符,而不是空白
# -b,列出行号,空白行无行号
# -E,标出结尾的断行字节
# -n,列出行号,空白行也列出行号
# -T,使用tab键时以 ^I 显示出来
# -v,显示一些看不到的字符
head -n 文件名
# -n,其带参数,表示显示文件的前几行
tac 文件名
# tail cat
# 由最后一行来进行文件显示
# 以下了解即可,反正也记不住
nl -bnw 文件名
# 以显示行号的方式查看文件
# -b,其带参数,a表示空行也带行号,t则相反
# -n,其带参数,ln表示行号在最左侧显示,rn表示在右侧显示,不加0
# rz表示在右侧显示,加0
# -w,其带参数,指定行号栏位占用的位数
more 文件名
# 可以通过按键来进行查看
空白键 (space):代表向下翻一页;
Enter :代表向下翻『一行』;
/字串 :代表在这个显示的内容当中,向下搜寻『字串』这个关键字;
:f :立刻显示出档名以及目前显示的行数;
q :代表立刻离开 more ,不再显示该文件内容。
b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用
less 文件名
# 可以一页一页的翻动
空白键 :向下翻动一页;
[pagedown]:向下翻动一页;
[pageup] :向上翻动一页;
/字串 :向下搜寻『字串』的功能;
?字串 :向上搜寻『字串』的功能;
n :重复前一个搜寻 (与 / 或 ? 有关!)
N :反向的重复前一个搜寻 (与 / 或 ? 有关!)
q :离开 less 这个程序
用户管理
添加用户
useradd 选项 用户名
# -c 指注释性描述(comment)
# -d 指定用户主目录,如果不存在,可以增加-m来创建(directory)
# -g 指定用户组
# -G 指定用户所在的附加组
# -s 指定用户的shell文件
# -u 指定用户的用户号
useradd –d /home/sam -m sam # -d后面跟了参数,指定了用户目录的位置
useradd -s /bin/sh -g group –G adm,root gem
# -s 带了参数,指定了shell文件所在的位置
# -g 带了参数,指定组的名称
# -G 带了参数,指定附加组的名称
删除用户
userdel 选项 用户名
# -r参数表示同时删除用户的主目录
修改用户
usermod 选项 用户名
# 具体参数与添加用户一致
密码管理
passwd 选项 用户名
# 注意权限,普通用户只能修改自己的密码,root用户可以修改所有的密码
# -l 表示锁定口令,即禁用账号(lock)
# -u 表示口令解锁(unlock)
# -d 表示去除账号的口令
# -f 强迫账户在下次登录时修改口令
添加用户组
groupadd 选项 用户组
# -g GID 指定新用户组的组标识号(GID)
# -o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同
groupadd -g 101 group2 # 新建用户组,标识号为101
删除用户组
groupdel 用户组
修改用户组
groupmod 选项 用户组
# -g GID 为用户组指定新的组标识号
# -o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同
# -n 新用户组 将用户组的名字改为新名字
groupmod –g 10000 -n group3 group2 # 将组group2的标识号改为10000,组名修改为group3
切换用户组
newgrp root # 切换到root用户组
与用户相关的系统文件
cat /etc/passwd
# 保存着用户信息
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
# 对应着 用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
# 0是超级用户root的标识号,1~99由系统保留,作为管理账号,普通用户的标识号从100开始,界限是500
# 组标识号对应着/etc/group文件中的一条记录
cat /etc/group
# 保存着用户组信息
root:x:0:
daemon:x:1:
bin:x:2:
# 对应着 组名:口令:组标识号:组内用户列表
磁盘管理
查看磁盘信息
df -ahikHTm 目录或文件名
# -a 列出所有的文件系统,包括系统特有的 /proc 等文件系统(all)
# -k 以 KBytes 的容量显示各文件系统
# -m 以 MBytes 的容量显示各文件系统
# -h 以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示
# -H 以 M=1000K 取代 M=1024K 的进位方式
# -T 显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出
# -i 不用硬盘容量,而以 inode 的数量来显示
C:\ 476G 98G 379G 21% /mnt/c
D:\ 466G 17G 449G 4% /mnt/d
# 可以看出本地的两个磁盘都挂载再mnt这个文件夹
查看磁盘内的目录和文件的所有信息,而不是磁盘本身的信息
du -ahskm 文件或目录名称
# -a 列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已
# -h 以人们较易读的容量格式 (G/M) 显示
# -s 列出总量而已,而不列出每个各别的目录占用容量
# -S 不包括子目录下的总计
# -k 以 KBytes 列出容量显示
# -m 以 MBytes 列出容量显示
查看磁盘分区
fdisk -l 装置名称
# -l 输出后面接的装置所有的分区内容
# 若仅有 fdisk -l 时, 则系统将会把整个系统内能够搜寻到的装置的分区均列出来
磁盘格式化
mkfs -t 文件系统格式 装置文件名
# -t可以接文件系统格式,例如 ext3, ext2, vfat 等(系统有支持才会生效)
磁盘检查
fsck -t 文件系统 -ACay 装置名称
磁盘的挂载和卸载
mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n] 装置文件名 挂载点
# 磁盘挂载
umount [-fn] 装置文件名或挂载点
# 磁盘卸载
# -f :强制卸除!可用在类似网络文件系统 (NFS) 无法读取到的情况下;
# -n :不升级 /etc/mtab 情况下卸除
Vim编辑器
vim test.txt
# 其会打开一个新的界面来展示这个文件
# 如果不存在此文件则会自动创建
# 而cat方式是在当前页面打开
包含了三种模式
- 命令模式
此为默认启动的模式,此时输入的字符会被认为是命令
i 表示切换到输入模式,以输入字符
x 表示删除当前光标所在处的字符
: 表示切换到底线命令模式,以在最底一行输入命令(底线命令模式拥有更多的命令) - 输入模式
有多种方式进入输入模式
i 为从目前光标所在处输入, I 为在目前所在行的第一个非空格符处开始输入
a 为从目前光标所在的下一个字符处开始输入, A 为从光标所在行的最后一个字符处开始输入
o 为在目前光标所在的下一行处输入新的一行, O 为在目前光标所在的上一行处输入新的一行
r 只会取代光标所在的那一个字符一次,R会一直取代光标所在的文字,直到按下 ESC 为止
字符按键及shift 输入所有字符以及其大写
ENTER 换行
BACK SPACE 退格键,删除光标前一个字符
DEL 删除键,删除光标后一个字符
方向键 在文本中移动光标
HOME/END 移动光标到行首/行尾
Page Up/Page Down 上/下翻页
Insert 切换光标为输入/替换模式,光标将变成竖线/下划线
ESC 退出输入模式,切换到命令模式 - 底线命令模式
q 退出程序
w 保存文件
编辑文件的一般流程
vim打开,输入i进入输入模式,进行输入,完成输入按ESC退出,输入:进入底线命令模式,再输入wq退出
其他常用的快捷键
# 用于命令模式
[Ctrl] + [f] # 屏幕『向下』移动一页,相当于 [Page Down]按键
[Ctrl] + [b] # 屏幕『向上』移动一页,相当于 [Page Up] 按键
0 或功能键[Home] # 移动到这一行的最前面字符处
$ 或功能键[End] # 移动到这一行的最后面字符处
G # 移动到这个档案的最后一行
/word # 向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可
?word # 向光标之上寻找一个字符串名称为 word 的字符串
dd # 删除游标所在的那一整行
ndd # 删除光标所在的向下 n 行,例如 20dd 则是删除 20 行
yy # 复制游标所在的那一行
nyy # 复制光标所在的向下 n 行,例如 20yy 则是复制 20 行
p, P # p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行! 举例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行
u # 复原前一个动作
[Ctrl]+r # 重做上一个动作
apt命令
apt 命令提供了查找、安装、升级、删除某一个、一组甚至全部软件包的命令
(主要用于Debian 和 Ubuntu)
apt 命令执行需要超级管理员权限(root)
格式一般为 apt [options] [command] [package ...]
sudo apt update # 列出所有更新
sudo apt upgrade # 进行升级
apt list --upgradeable # 列出可更新的软件包及版本信息
sudo apt install <package_name> # 安装指定的软件
sudo apt install <package_1> <package_2> <package_3> # 安装多个
sudo apt update <package_name> # 更新指定的软件
sudo apt show <package_name> # 显示指定软件的详细信息
sudo apt remove <package_name> # 删除指定软件
sudo apt autoremove # 清除不再使用的包或者文件
sudo apt purge <package_name> # 移除软件包及配置文件
sudo apt search <keyword> # 查找软件包命令
apt list --installed # 列出所有已安装的包
apt list --all-versions # 列出所有已安装的包的版本信息
网络状态
netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]
# 用于显示网络状态
-a或--all 显示所有连线中的Socket。
-A<网络类型>或--<网络类型> 列出该网络类型连线中的相关地址。
-c或--continuous 持续列出网络状态。
-C或--cache 显示路由器配置的快取信息。
-e或--extend 显示网络其他相关信息。
-F或--fib 显示路由缓存。
-g或--groups 显示多重广播功能群组组员名单。
-h或--help 在线帮助。
-i或--interfaces 显示网络界面信息表单。
-l或--listening 显示监控中的服务器的Socket。
-M或--masquerade 显示伪装的网络连线。
-n或--numeric 直接使用IP地址,而不通过域名服务器。
-N或--netlink或--symbolic 显示网络硬件外围设备的符号连接名称。
-o或--timers 显示计时器。
-p或--programs 显示正在使用Socket的程序识别码和程序名称。
-r或--route 显示Routing Table。
-s或--statistics 显示网络工作信息统计表。
-t或--tcp 显示TCP传输协议的连线状况。
-u或--udp 显示UDP传输协议的连线状况。
-v或--verbose 显示指令执行过程。
-V或--version 显示版本信息。
-w或--raw 显示RAW传输协议的连线状况。
-x或--unix 此参数的效果和指定"-A unix"参数相同。
--ip或--inet 此参数的效果和指定"-A inet"参数相同。
ping [-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面>][-l<前置载入>][-p<范本样式>][-s<数据包大小>][-t<存活数值>][主机名称或IP地址]
# 监测与远程主机的连接
-d 使用Socket的SO_DEBUG功能。
-c<完成次数> 设置完成要求回应的次数。
-f 极限检测。
-i<间隔秒数> 指定收发信息的间隔时间。
-I<网络界面> 使用指定的网络接口送出数据包。
-l<前置载入> 设置在送出要求信息之前,先行发出的数据包。
-n 只输出数值。
-p<范本样式> 设置填满数据包的范本样式。
-q 不显示指令执行过程,开头和结尾的相关信息除外。
-r 忽略普通的Routing Table,直接将数据包送到远端主机上。
-R 记录路由过程。
-s<数据包大小> 设置数据包的大小。
-t<存活数值> 设置存活数值TTL的大小。
-v 详细显示指令的执行过程。

浙公网安备 33010602011771号