LinuxStudy

  1. author:廉伟茂
  2. date:20191115

ssh,远程登录服务器

linux文件结构

LinuxStudy - 图1

文件浏览

ls -la命令预览结果
LinuxStudy - 图2

上图列含义

drwxrwxrwx 2 joe M 7
权限 链接到该文件的数量 所属用户 所属组 文件大小 最近修改时间 文件或目录名称当前目录用.标示,父目录用..标示

权限第一个字符代表文件类型

字符 含义
d 文件夹
- 普通文件
x 可执行文件
l(小写的L) 连接文件Link
b 块设备
p 命名的管道
s 套接字

权限最后一个字符

最后一个字符 含义
s,可执行文件的权限中出现 应用程序可被任何用户访问
t,目录权限后出现 所有者允许其他用户添加文件,但不允许删除文件
+ 存在扩展属性,比如ACL或SELinux

文件权限

一个典型的权限位:-rwxrwxr-x

权限符 全名 文件 目录
r read 4 查看文件内容 查看包含的文件和子目录
w write 2 变更文件,重命名,删除文件 加文件或子目录,删除文件或子目录
x execute 1 运行文件 将目录变更为当前目录,搜索目录或指定目录中的程序,方位目录中文件的文件元数据

环境变量

OLDPWD,上一个工作目录

PATH,shell搜索命令的路径

PATH=路径:$PATH;

export PATH

代表将新添加的路径放在之前的PATH前面,并导出新的PATH变量

PWD,当前工作目录

TMOUT,shell允许处于非活动状态的秒数

任意变量

自动填充

当输入的是普通文本,shell将尝试使用命令/别名/函数名来补充

如果是以$开头,shell将尝试使用变量填充

如果以~开头,shell将尝试使用用户名填充

如果以@开头,shell将尝试使用/etc/hosts中的一个主机名填充

进程管理

启动后台进程

在命令后追加&符,通过jobs命令查看后台进程

切换进程到后台

使用组合键将程序切换到后台

调出后台进程

输入命令 fg %编号,例如fg %1将把1号job切换到前台

fg %数字 根据job编号,调出后台进程

fg % 将最近一个放入后台的进程调到前台

fg %string 根据命令名,调出后台进程,但需要保证结果唯一

fg %?string 将任何包含字符的命令调出后台进程,但需要保证结果唯一

启动后台已停止的命令

输入命令 bg %编号

将命令输出定向到null

find /usr 1>/dev/null 2>&1

将find命令对usr目录的搜索结果中,标准输出(1)定向到null,错误输出也定向到1

命令扩展

元操作符

元操作符 定义
|,管道 将前一个命令的输出传给另一个命令的输入
;,连接 分割多个命令
<,重定向 将数据输入给前面的命令
>,重定向 将领命输出并覆盖到文件中
2>,错误消息重定向 将错误消息输出到文件中
>>,重定向 将命令输出并追加到文件末尾
<<word,重定向 将word后面的数据输入给前面的命令,直到word再次出现为止

算数表达式,$[算数表达式]或$(表达式)

  1. echo $[2-1] >> echo 1
  2. echo "there are $(ls | wc -w) files"

扩展变量

使用$加变量名,shell获取的是变量对应的值,而不是变量名

命令格式

格式

命令 选项 参数

命令

alias

创建命令别名

格式:alias 别名=’命令’

apt,软件包管理

命令 参数 作用
list installed已安装的
upgradeable可升级的
获取软件包列表
search 在包说明中搜索
show 显示包的详细信息
install 安装指定的软件包
remove 删除指定的软件包
autoremove 自动删除不在使用的软件包
update 更新包信息
upgrade 升级软件包到最新版本

cd

进入一个目录

短命令 长命令 参数 释义
无参数 进入HOME目录,等同于cd ~
/ 进入根目录
~ 进入home目录

chmod,change mode

更改文件或目录的权限

短命令 长命令 参数 释义
R 递归设置当前文件夹,以及所有内部文件的权限
数字方式 ugo 0无权限,1执行权限,2写权限,3写执行权限
4读权限,5读执行权限,6读写权限,7全部权限
字母方式 a-x
删除所有人执行权限
u-所属用户,g-所属组,o-其他用户,a-前面所有
r-读,w-写,x-执行
+ > 增加权限,- > 删除权限

chown,change owner

变更文件/目录的所属用户和所属组

格式: chown 选项 所属用户:所有组 文件

短命令 长命令 参数 释义
R 递归变更目录和内部所有目录文件的所有者

col

从输入数据中过滤换行

短命令 长命令 参数 释义
b 不输出任何删除符

cp

复制文件

格式 cp

短命令 长命令 参数 释义
r 递归复制文件以及所由内部文件
a 复制过程保留权限和元数据
i 覆盖文件前提示

date

  • 显示当前日期

declare

获取当前环境变量列表和变量值,同set

df,显示文件系统的使用情况

report file system disk space usage

du,递归展示指定目录下所有文件大小

echo

显示参数代表的文本

find,根据文件属性,查找文件

格式 find 路径 选项 参数

短命令 长命令 参数 释义
查询当前目录下所有文件和目录
路径 查询指定路径下所有文件和目录
ls 类似于ls -l的效果,显示文件的具体属性
name 文件名 查找文件名与参数完全一致的
iname 规则 查找文件名符合规则匹配的文件或目录
size / +10M/-5G 根据文件大小查询文件,正负号表示大于小于
b:512byte,c:1byte,w:2byte,k:KiB,M:MiB,G:GiB
user 用户名 查询用户的文件
group 组名 查询组的文件
perm 777或u=rwx
/777
-777
查询指定权限的文件
没有前缀,代表权限需要和条件完全一致
/或+代表权限包含有条件即可
-代表权限包含有指定条件即可
type 类型 根据类型查找文件
d目录,f普通文件
分钟数 搜过最近X分钟内的文件,含义modified n miniutes ago
mtime 天数,+3,-3 搜索最近X天内被修改(+号:或没有被修改)的文件,含义modified n*24 hours ago
ctime 天数,+3,-3 搜索最近X天内状态被修改(+号:或没有被修改)的文件,含义change n*24 hours ago
atime 天数,+3,-3 搜索X天内被访问(+号:或没有被访问)的文件,含义accessed n*24 hours ago
exec 命令 参数 ; 在每一个搜索结果上执行命令,{}代表返回数据
示例:find -iname ‘*’ -exec echo “i find {}” ;
ok 命令 参数 ; 在每一个搜索结果上询问后执行命令,{}代表返回数据
示例:find -iname ‘*’ -exec echo “i find {}” ;
not 后面的作为过滤条件
or 前后条件是或的关系,可以用括号包含条件,括号需要用\转义,括号和选项中间需要有空格
and 前后条件是与的关系,可以用括号包含条件,括号需要用\转义,括号和选项中间需要有空格

LinuxStudy - 图3

grep,在文件内部搜索或递归搜索整个目录结构

格式 grep 选项 搜索内容 搜索位置

短命令 长命令 参数 释义
i ignore case 忽略大小写
v invert match 查询匹配的数据
r recursive 递归搜索整个目录
color when/never/auto 颜色选项
l(小写L) files with-matches 仅显示匹配到的文件名称
L files without-match 仅显示没有被匹配到的文件名称

history

查看在shell中输入的历史命令

命令 释义
8 显示指定数量的最新命令
!1 再次运行history命令中,编号为1的命令
!! 运行history中的倒数第二个命令,即上一个命令
!?string? 运行符合字符模板的最新命令

id

  • 显示当前登录用户的信息

jobs,显示后台任务的状态

journalctl,查询systemed journal消息

短命令 长命令 参数 释义
—list-boots 查询启动启动日志
b —boot[=ID] ID 查询当前或者指定ID的启动日志
k dmesg 查询当前的内核日志
f follow 显示最新的日志

kill,根据进程ID向进程发送一个信号,通常可用来终止进程

命令格式: kill 信号值/-信号名 PID

或者 kill pid,默认值为15

短命令 长命令 参数 释义
n sig number 使用信号值作为参数
s sig name 使用信号名作为参数
信号名 含义
SIGHUP 1 挂断对控制终端或者控制进程死亡的探测
SIGIN 2 通过键盘中断
SIGQUIT 3 通过键盘退出
SIGABRT 6 调用abort(3)产生的中止信号
SIGKILL 9 杀死信号
SIGTERM 15 终止信号
SIGCONT 18 继续被停止的进程
SIGSTOP 19 停止进程

killall,根据进程名称向进城发送信号

用法: killall 选项 参数

短命令 长命令 参数 释义
r regexp 匹配规则 向匹配的进程发送信号

let,将参数作为一个数学表达式,并求值

格式: let 参数 [参数…]

locate,根据文件路径名称模糊查找文件

根据文件名称模糊查找文件

搜索文件数据库来查询文件,速度快,但无法查询到updatedb命令执行后新增的文件,也无法查询数据库不进行索引的目录的文件,例如挂在盘/临时目录等

短命令 长命令 参数 释义
i ignore case 忽略大小写
p ignore spaces 忽略空格

lpr

ls

列出当前目录的内容

短命令 长命令 参数 释义
d directory 列出目录自身,不显示子文件/文件夹
l,小写L 以详情列表的方式显示数据
a all 显示全部文件,包括已经隐藏的文件
F classify 在文件名后根据类型追加字符,
目录追加/
可执行文件追加*,
连接文件追加@
hide pattern 符合规则的不显示
R 列出当前文件夹的所有子文件和文件夹,以及递归显示所有文件夹的文件
S 按文件大小显示文件

lscpu,显示cpu的架构信息

含义:display information about the CPU architecture

短命令 长命令 参数 释义
J json 以json来格式化输出

lsmod,展示linux内核的模块的状态

含义:show the status of modules in the linux kernel

lspci,显示全部的pci设备

含义:list all pci devices

短命令 长命令 参数 释义
v verbose 显示更详细的信息

lsusb,显示全部usb设备

含义:list all USB devices

短命令 长命令 参数 释义
v verbose 更详细的信息

mail

向指定的账户发送电子邮件

短命令 长命令 参数 释义
s subject message 发送message到指定邮箱

man

获取命令手册

格式:man command

短命令 长命令 参数 释义
k apropos 在手册的名称和概要部分搜索命令
5 在手册指定章节搜索命令

LinuxStudy - 图4

mkdir

创建文件夹

短命令 长命令 参数 释义
p parents 创建文件夹时,不存在的父级文件夹自动创建

modinfo,展示一个linux内核模块的信息

modprobe,模块探针,添加或移除linux内核模块

短命令 长命令 参数 释义
r remove 移除模块

mv

移动文件

格式: mv 选项 源文件 目标文件

短命令 长命令 参数 释义
i 覆盖前提示
b 目标目录如果存在同名文件,会进行备份

nice,以特定的处理器优先级启动一个进程

含义:niceness,进程的处理器优先度,取值范围[-20 — 19],数值越小,优先级越高

同时可用renice命令来变更运行中进程的优先级

ps,报告当前线程的快照状态

英文含义:processes

LinuxStudy - 图5

上面是一个典型的结果界面

含义
USER 启动该进程的用户名
PID 代表了
%CPU CPU使用比例
%MEM 内存占用比例
VSZ,virtual set size 总内存占用,单位KB
RSS,resident set size 物理内存占用,单位KB
TTY
STAT 进程状态
S:正在运行
R:正在水面
+:进程与前台操作相关联
START 进程开始运行的时间
TIME 累积CPU占用时间,单位秒
COMMAND
常用命令 参数 释义
ux 查看当前用户的所有进程
aux 查看所有用户的进程
短命令 长命令 参数 释义
A、e 全部进程
a 显示全部进程
o format pid,user,uid,group,gid,vsz,rss,comm 显示列
k sort +/-pid,user,uid,group,gid,vsz,rss,comm 以从大到小/从小到大,对对应的字段排序

pwd

打印当前工作目录

read,从标准输入中读取一行,并拆分为字段

短命令 长命令 参数 释义
p 执行读取之前,输出提示

renice,变更进程的处理器优先级

  1. 普通用户只能增加nice值,不可以减少nice值,或者重设为负值

格式: renice [-n] nice值 [-p] PID

格式: renice [-n] nice值 -u userName/UID

格式: renice [-n] nice值 -g process group id

rm

删除文件

格式 rm 选项 文件

短命令 长命令 参数 释义
删除前提醒
f force 忽略提示,默认执行
r 递归删除全部文件
文件名{词组}词{词组} 按规则删除一组文件

rmdir

删除目录,需要目录为空,通常可用rm代替

rmmod,从内核中移除一个模块

语法:rmmod modname

set

设定或取消设定shell的变量

sort,排序并输出

短命令 长命令 参数 释义
n 将字符转换为数字进行排序
r 倒序排列

tail,输出文件的最后十行

短命令 长命令 参数 释义
f fllow 输出文件新增的内容

top,面向屏幕来显示系统中运行的进程

默认按照CPU占用时间排序

LinuxStudy - 图6

按键 参数 释义
h 查看帮助页,按任意键退出
M 安内存使用情况排序
P 按CPU使用情况排序(默认)
1 切换每个CPU的使用情况
R 反向排序
u 用户名 过滤显示特定用户的进程
r PID,进程优先级数值 变更PID的进程优先级
k PID,进程信号数值 向进程发送信号,15终止进程,9杀死进程

touch

创建一个文件

短命令 长命令 参数 释义
文件名{name1,name2} 创建一组文件,每个文件分别与词组连接
文件名{词组}词{词组} 创建一组文件,词组文件相互连接

type

查看命令的位置,输入错误时无法查询

umask

查看文件权限模式

文件 目录
000,普通用户模式 rw-rw-rw- rwxrwxrwx
022,root用户模式 rw-r—r— rwxr-xr-x
777,无权限模式 ————- ————-
短命令 长命令 参数 释义
切换默认的权限模式,切换后创建的文件和目录将使用模式

updatedb

更新数据库

useradd,创建一个用户或着修改默认新用户的信息

短命令 长命令 参数 作用
c comment “comment here” 新用户账户描述,通常填写用户全名
d home-dir home dir path 变更用户的默认家目录
D defaults 将本次的设定作为默认设定
e expiredate yyyy-MM-dd 设定账户的过期日期
f inactive day 密码过期几天后,账户被禁用,默认为-1
g gid group name or number 设定用户所在的组,默认创建用户同名组
p 为当前账户输入一个加密后的密码
s 指定的shell 指定账户使用的shell
u uid 指定账户的id,默认是分配下一个数字

userdel,删除一个用户

usermod,变更用户

wc

提供单词或字符的数量

短命令 长命令 参数 释义
c bytes 字节数量
m chars 字符数量
l lines 行数
w words 单词数

who

  • 显示当前登录会话的相关信息

文本编辑器

其他文本编辑器

LinuxStudy - 图7

vi

  • 打开文件
    • vi 文件
  • 模式
    • 输入模式
      • 按键,在光标右边输入文本,含义append,追加
      • 按键,在当前行行尾开始输入文本
      • 按键,在光标左边开始输入文本,含义insert,插入
      • 按键,
      • 按键,
      • 按键,在行头输入文本
      • 按键,在当前行下创建新行,并进入插入模式
      • 按键,在当前行上创建新行,并进入插入模式
      • 按键,
    • 命令模式
      • 输入模式下按进入命令模式
      • ex模式下按两次进入命令模式
  • 移动光标 | 按键 | 作用 | 命令模式 | 输入模式 | | —- | —- | —- | —- | | 方向箭头 | 光标移动上下左右一格 | 支持 | 支持 | | | 移动光标到下一个单词开头(用空格,制表符,标点分割),含义word | 支持 | 不支持 | | | 移动光标到下一个单词开头(用空格,制表符),含义word | 支持 | 不支持 | | | 移动光标到上一个单词开头(用空格,制表符,标点分割),含义before word | 支持 | 不支持 | | | 移动光标到上一个单词开头(用空格,制表符),含义before word | 支持 | 不支持 | | | 移动光标到行首 | 支持 | 不支持 | | | 移动光标到行尾 | 支持 | 不支持 | | | 移动光标到屏幕左上角,含义high | 支持 | 不支持 | | | 移动光标到屏幕中间行的行首,含义middle | 支持 | 不支持 | | | 移动光标到屏幕左下角,含义low | 支持 | 不支持 |

  • 删除,复制,更改文本(适用于命令模式) | 按键 | 含义 | | —- | —- | | | 删除光标后面的字符 | | | 删除光标前的字符 | | | 删除光标后面一个单词,含义delete word | | | 删除光标前面一个单词,含义delete before word | | | 删除当前行 | | | 变更(删除)光标所在到行尾的文字,含义change to end | | | 变更(删除)光标至行首的字符,含义change to head | | | 变更(删除)光标后面的字符,含义change | | | 变更(删除)当前行 | | | 复制当前行 | | | 复制光标右侧的句子到缓冲区 | | | 复制光标右侧的段落到缓冲区 | | | 从当前行开始删除3行 | | | 从当前位置开始删除3个单词 | | | 从当前位置开始,删除5个字符 | | | 光标向下移动12行 | | | 从当前位置删除5个单词 | | | 复制接下来的4个句子 | | | 粘贴换冲突的文本,如果不包含换行,则放到光标右侧,否则插入一行并粘贴 | | | 粘贴换冲突的文本,如果不包含换行,则放到光标左侧,否则上方插入一行并粘贴 | | | 重复上一个编辑,修改, 删除,粘贴指令 | | | 撤销最后一个操作 |

  • 其他操作指令 | 按键 | 含义 | | —- | —- | | + | 还原被撤销的操作 | | + | 显示当前文件名 | | + | 向前翻页,含义forward | | + | 向后翻页,含义back | | + | 向前翻半页 | | + | 向后翻半页 | | | 跳转到最后一行 | | | 跳转到第2行 | | | 运行一个shell命令 |

  • 退出vi | 按键 | 含义 | | —- | —- | | | 保存并退出 | | | 保存,但不退出 | | | 退租,仅在没有变更内容时可用 | | | 保存并退出 | | | 不保存并退出 |

  • 搜索文本(适用于命名模式)

    • /hello 向前搜索hello
    • ?goodbye 向后搜索goodbye
    • /the*good 向前搜索
    • ?[pP]rint 向后搜索print或Print

SHELL脚本

启动方式

  1. 将脚本文件作为shell的参数,文件不需要是可执行文件
  2. 在脚本第一行添加解释器名称,并在名称前加上#!,比如#!/bin/bash,以及添加了执行位(chmod +x filename),之后可输入脚本名称直接运行脚本

格式

注释

变量

  1. NAME=value,等号前后没有空格
  2. MYDATE=$(date),将命令date的输出分配给MYDATE变量
  3. MYDATE2=(`date),将命令date的输出分配给MYDATE2变量,仅设置变量时运行date命令,读取变量则不会运行date命令
  4. MYDATE3=$MYDATE2,将变量MYDATE2的值赋值给MYDATE3

特殊变量

  1. $0,脚本的相对或绝对路径
  2. $1,$2.....,执行脚本时,传入的参数
  3. $?,最后一条被执行命令的退出状态,0值意味着命令成功退出
  1. echo "传入的参数依次为:1-$1,2-$2"
  2. echo "脚本所在位置:$0"
  3. $ bash myscript foo bar
  4. 传入的参数依次为:1-for,2-bar
  5. 脚本所在位置:~/myscript

变量与文本的链接

当变量要求于文本链接,且中间不能有空格是,可写作${VAR}TEXT,其他规则

${var:-value} 如果变量没有被设置或者为空,则设定为value

${var#pattern} 从var值的前面砍掉与pattern最短的匹配项

${var##pattern} 从var值的前面开始砍掉与pattern最长的匹配项

${var%pattern} 从var值的后面砍掉与pattern最短的匹配项

${var%%pattern} 从var值的后面砍掉与pattern最长的匹配项

  1. $ THIS="Example"
  2. $ THIS=${THIS:-"THIS"}
  3. $ THAT=${THAT:-"THAT"}
  4. $ echo ${THIS}
  5. Example
  6. $ echo ${THAT}
  7. THAT
  1. $ MYFILENAME="/home/digby/myfile.txt"
  2. $ FILENAME=${MYFILENAME##*/}
  3. $ DIR=${MYFILENAME%/*}
  4. $ NAME=${FILENAME%.*}
  5. $ EXTENSION=${FILENAME#*.}

接收用户输入

使用:read命令

  1. read -P "请输入一个姓和名:" x1 m1
  2. echo "获取到姓名:$x1$m1"
  3. $ bash mycript
  4. 请输入一个姓和名:廉 伟茂
  5. 获取到姓名:廉伟茂

脚本计算

  1. 作为数字参与运算

    1. $ BIGNUM=1024
    2. # 将BIGNUM/16的结果赋值给result
    3. $ let result=$BIGNUM/16;
    4. # 将BIGNUM/16的结果赋值给result
    5. $ result=`expr $BIGNUM / 16`
    6. # 通过echo生成一个1024 / 16的表达式,并发送给bc计算结果
    7. $ result=`echo "$BIGNUM / 16" | bc`
  2. 获取随机数

    1. $ let RANDOM=$RANDOM
  3. 自增

    1. $ num=1
    2. $ echo $((num++))
    3. 1
    4. $ echo $num
    5. 2