> 文章列表 > 【Linux】前端也需要了解的 Linux 快速入门基础

【Linux】前端也需要了解的 Linux 快速入门基础

【Linux】前端也需要了解的 Linux 快速入门基础

汉化

linux汉化
  1. 查看有没有中文包

    locale -a |grep CN
    
  2. 没有就下载

    yum install -y langpacks-zh_CN
    
  3. 修改语言配置文件LANG="zh_CN.UTF-8"

    vi /etc/locale.conf
    source /etc/locale.conf
    
man的汉化
  • 直接安装

    1. Debian安装

      sudo apt update
      sudo apt install manpages-zh
      
    2. CentOS7

      yum update
      yum install man-pages-zh-CN
      
  • 源码安装

    源码网址

    1. 获取安装包

      wget https://src.fedoraproject.org/repo/pkgs/man-pages-zh-CN/manpages-zh-1.5.1.tar.gz/13275fd039de8788b15151c896150bc4/manpages-zh-1.5.1.tar.gz
      
  1. 解压并安装(最好使用root)

    tar xf manpages-zh-1.5.1.tar.gz
    cd manpages-zh-1.5.1/
    ./configure --disable-zhtw  --prefix=/usr/local/zhman
    make && make install
    
  2. 为了不覆盖man,我们新建cman命令作为中文查询

    cd ~
    echo "alias cman='man -M /usr/local/zhman/share/man/zh_CN' " >>.bash_profile
    source .bash_profile
    

报错解决

yum安装软件报错:Invalid configuration value:

shell入门

…代表可有一个或多个

目录结构

目录 描述
/home 用户目录
/opt 安装可选软件
/root root用户主目录
/usr 普通用户使用的相关文件
/usr/bin linux命令相关文件
/usr/lib /usr/bin目录中使用的共享库
/usr/local 并非系统自带 却想让系统使用的文件 如node
/usr/sbin 包含更多的系统管理程序
/usr/share /usr/bin中的程序使用的共享数据
/bin 系统启动需要的二进制文件
/boot Linux系统文件
/dev 存放一切Linux可识别的设备的文件
/etc 有趣的目录
/lib 核心系统使用的共享库
/lost+found 当Linux系统宕机或者崩溃时 用于恢复分区
/media 可移除设备的的挂载点 如u盘 鼠标
/mnt 手动挂载的可移除设备的挂载点
/proc Linux内核维护的虚拟文件系统
/sbin 放系统的二进制文件 执行重要的系统任务 这个任务为超级用户预留
/temp 各类程序放置临时文件
/var 动态文件 如日志
/var/log 日志文件

基本操作命令

cd

切换目录

命令 结果
cd 切换到用户目录
cd- 切换到先前的目录
cd~username 切换到用户目录
ls

列出当前目录下以.html结尾的文件

ls *.html

参数列表

参数 长参数 描述
-a --all 列出所有文件
-d --directory 一般查看目录是显示目录内内容信息 而-d显示目录的信息
-F --classify 列出类型指示符 如目录会在目录名后加上/
-h --human-readable 以长格式列出,并以MB,GB等格式替换字节数显示文件大小
-l 以长格式显示结果
-r –reverse 以相反的顺序显示结果
-S 按文件大小对文件排序
less

查看文件

命令 结果
less filename 查看文件
pageup或b 后翻一页
pagedow 或spacebar 前翻一页
向上一行
向下一行
G 文件末尾
g或1G 文件开头
/xxx 查找xxx字符串
n 下一个xxx字符串
h 显示帮助
q 退出
file

确定文件类型

语法

file 文件

文件操作

命令 描述
cp 复制文件和目录
mv 移动或重命名文件和目录
mkdir 创建目录
rm 删除文件和目录
in 符号链接
通配符

通配符可以用在一切以文件名做参数的命令

常见通配符

通配符 匹配项
* 匹配任意多个字符
? 匹配任意单个字符
[characters] 匹配任意一个属于字符集的字符
[!characters] 匹配任意一个不属于字符集的字符
[[:class:]] 匹配任意一个字符类中的字符

常用字符类

字符类 匹配项
[:alnum:] 匹配一个字母或数字
[:alpha:] 匹配一个字母
[:digit:] 匹配一个数字
[:lower:] 匹配一个小写字母
[:upper:] 匹配一个大写字母

通配符示例

形式 匹配项
a* a开头
a*.txt a开头.txt结尾
a??? a开头后面三个字符
[abc]* abc中一个字符开头
mkdir

新建目录

语法

mkdir dir...
cp

复制目录或文件

  • 将一个或者多个项目(文件或文件夹)复制到一个文件夹内

    cp [options] item... directory
    
  • 将一个文件复制为另一个文件

    cp file1 file2
    

options

选项 定义
-a 复制其属性,包括权限和所有权,也可用于递归复制文件夹内容
-i 如果覆盖文件,默认无提示,加上后有提示
-r 递归复制目录和其内容
-u 从一个目录复制到另一个目录时,只会复制目标目录没有的文件和已更新文件
-v 显示消息

示例, 将dir1下所有文件复制到dir2

cp dir1/* dir2
mv

移动文件或文件夹

  • 语法1, 将一个或者多个项目(文件或文件夹)移动到一个文件夹内

    cp [options] item... directory
    
  • 语法2,将一个文件移动并重命名为另一个文件

    cp [options] file1 file2
    

options

选项 定义
-i 如果覆盖文件,默认无提示,加上后有提示
-u 从一个目录复制到另一个目录时,只移动目标目录没有的文件和已更新文件
-v 显示消息
rm

删除目录或文件

语法,移除项目(文件或目录)

rm item

options

选项 定义
-i 如果删除一个存在的文件,默认无提示,加上后有提示
-r 递归删除目录和其内容
-v 显示消息
-f 强制删除,覆盖-i选项,忽略不存在的文件并不提示
ln
  • 硬链接

    ln file link
    
  • 软链接

    ln -s file link
    

关于命令的命令

命令 描述
type recognize command
which where is the command
man 使用less显示文档手册,还可指定命令类别查询
apropos 显示合适的命令
whatis 显示命令的info条目
info 显示一条命令的简述
alias 创建一条命令的别名
type

显示命令的类别

语法

type command

command为命令

which

显示可执行文件的位置

语法

which command

示例

which ls/bin/ls
help

查看文档 大部分的命令都支持--help选项

语法

command --help
man

语法

man [-adfhktwW] [section]
  • [-adfhktwW]

    参数 备注
    -a 显示所有匹配项
    -d 显示man查照手册文件时候,搜索路径信息,不显示手册页内容
    -D 同-d,显示手册页内容
    -f 同命令whatis ,将在whatis数据库查找以关键字开同的帮助索引信息
    -h 显示帮助信息
    -k 同命令apropos 将搜索whatis数据库,模糊查找关键字
    -S list 指定搜索的领域及顺序 如:-S 1:1p httpd 将搜索man1然后 man1p目录
    -t 使用troff 命令格式化输出手册页 默认:groff输出格式页
    -w 不带搜索title 打印manpath变量 带title关键字 打印找到手册文件路径,默认搜索一个文件后停止
    -W 同-w
    section 根据手册类型默认查找所有手册
  • section手册类型

    序号 定义
    1 可执行文件或者shell命令
    2 系统调用(内核提供的函数)
    3 库函数
    4 特别的文件(通常在/dev)
    5 文件格式,如/etc/passwd
    6 游戏
    7 杂项(包括宏包)
    8 系统管理员命令(通常给root用户使用)
    9 内核例程(非标准例程)
appropos

显示合适的命令 没什么用

whatis

显示一行命令描述

用法

whatis command
info

GNU用来替代手册文档界面

alias

用于给一连串的命令起一个容易记住的名字,, 在本次退出登录后消失

定义一个myc的命令 执行myc会执行cd /usr; ls

alias myc='cd /usr;ls'

查看全部的别名命令

alias

查看定义的命令

type myc

删除别名

unalias myc

io文件重定向

命令 描述
cat 合并文件
sort 对文本排序
uniq 报告或删除文件中重复行
wc 打印文件中换行符,字,字节的个数
grep 打印匹配行
head 输出文件第一部分
tail 输出文件最后一部分
tee 读取标准输入数据,将内容输出到标准输出和文件
>

在Linux的世界里一切都是文件,屏幕上显示的文字也应该是一个文件

  • 输出:

    比如ls命令会在屏幕上显示当前目录信息,ls是一个程序,正常执行后ls将结果发送到一个名叫标准输出(standard output)的文件中,如果发生错误,就发送到一个叫标准错误(standard error)的文件中,这两个文件一般都被链接到屏幕上,但是我们可以通过改变其行为

  • 输入:

    比如键盘就是通过标准输入文件(standard input)文件输入字母和数字

  • IO:

    一般输出程序都会将结果发送到屏幕,但是我们使用IO重定向可以改变这种默认行为

    在Linux中用0,1,2分别表示标准输入文件,标准输出文件,标准错误文件

  • >覆盖式写入

    语法 将command的标准输出信息重定向到file文件

    command [012]> file
    

    示例

    1. 将输出信息重定向到log.txt文件,只重定向标准输出,不重定向标准错误

      ls -l > log.txt
      
    2. 重定向标准错误, 尝试列出一个不存在的文件目录,会输出一个错误信息

      ls -l /unexistFile 2> log.txt
      
    3. 清空log.txt文件内容

      > log.txt
      
    4. .将标准错误和标准输出都重定向到同一个文件

      • 普通方式

        ls -l /unexistFile > log.txt 2>&1
        
      • bash提供的新方式

        ls -l /unexistFile &> log.txt
        
    5. 处理不想要的信息 /dev/null 接收输入但不处理

      ls -l > /dev/null
      
cat

cat命令读取一个或多个文件,并将它们复制到标准输出文件

语法 […]表示0个或多个

cat [file...]
  1. 将多个文件合并为同一个文件

    cat file1 file2... > file
    
  2. cat从标准输入读取内容

    cat
    
  3. 将标准输入内容重定向到文件,用Ctrl + d告诉cat已经到了EOF(终止)

    cat > log.txt
    
  4. 将标准输入从键盘更改到文件

    cat < log.txt
    
|

可以将一个命令的标准输出送到另一个命令的标准输入

语法

command1 | command2

示例

ls -l | less
sort

将标准输入来的数据排序

示例

ls | sort | less
uniq

报告或忽略标准输入中的重复行

示例 -d用于报告重复行,不加默认删除重复行

ls | sort | uniq [-d] | less
wc

打印行数,字数和字节数

  • 直接用于文件

    wc log.txt
    
  • 处理标准输入流 -l只报告行数

    ls | wc [-l]
    
grep

打印匹配行

  • 只打印能符合该模式的行,pattern为正则表达式

    grep pattern [file...]
    
  • 查询名字中带zip的文件 -i忽略大小写,-v只输出不匹配的行

    ls -l | grep zip
    
head

打印文件的开头,默认打印十行,可以使用-n指定行数

  • 直接用于文件

    head -n 5 log.txt;
    
  • 管道

    ls | head -n 5;
    
tail

可以用于动态查看文件的末尾,这个命令查看动态变化文件很有效

  • 直接用于文件

    tail -n 5 log.txt;
    
  • 管道

    ls | tail -n 5;
    
tee

tee读取标准输入并将结果发送到标准输出和文件中

示例

ls | tee log.txt | grep zip

扩展

echo

将文本参数内容打印到标准输出

路径名扩展

输出当前目录全部以s结尾文件名

echo *s
波浪线扩展

输出na用户主目录路径

ehco ~na
算数扩展

输出2+2结果 只支持整数运算 以$((express))为一个表达式

echo $((2+2))
花括号扩展

输出i=1 i=2 i=3

echo  i={1,2,3};
echo i={1..3};

该技术一般用于创建多个文件或目录 如创建2009-2011两年全部月份

mkdir {2009..2011}-0{1..9} {2009..2011}-{10..12}
变量

输出user变量

echo $user

查看可用变量

printenv
命令替换

命令替换可以把一个命令的输出当成一个扩展模式,即把一个命令的输出当成另一个命令的参数

ls -l的方式列出cp命令的位置

ls -l $(which cd);

双引号引用

用于抑制shell中除$, \\ , ' 除外的特殊字符,将他们变为普通文本,如解决文件名中有空格的情况

ls -l "six pence.txt"
单引号引用

抑制全部的shell扩展

转义字符

转义单个字符

echo \\$
sleep

一个简单的程序 在等待指定秒数后结束

sleep 10; ls -l

键盘技巧

组合键
  1. 移动光标

    组合键 作用
    Ctrl + A 移动光标到行首
    Ctrl + E 移动光标到行尾
    Ctrl + F
    Ctrl + B
    Ctrl + F 从光标位置清屏
  2. 修改文本

    组合键 作用
    Ctrl + D 删除光标位置字符
    Ctrl + T 光标位置和前一位字符交换位置
    Alt + T 光标位置和前一个换位(字为以空格分隔的单词)
    Alt + L 从光标处到字尾全部变成小写字母
    Alt + U 从光标处到末尾全部变成大写字母
  3. 剪切粘贴

    组合键 作用
    Ctrl + K 剪切从光标到行尾
    Ctrl + U 剪切从光标到行首
    Alt + D 剪切从光标到词尾
    Alt + backspace 剪切从光标到词头,如果现在已在词头,剪切上一个单词
    Ctrl + Y kill-ring缓冲区的文本复制到光标位置
history

命令历史记录,默认保存五百行,可更改

  1. 跳到历史命令的88行

    !88
    
  2. 逆向递归查找, 按下Ctrl + R,输入要查找的命令 , 按enter执行命令, 按ctrl + j复制命令到命令行,可继续编辑

权限

命令 定义
id 显示用户身份标识
chmod 更改文件模式
su 切换用户
sudo 以另一个用户身份执行
chown 更改文件拥有者
chgrp 更改文件群组
passwd 更改用户密码
id

运行结果 uid是用户唯一标识,gid表示有效组id,groups表示用户所在的所有组

uid=1002(ja) gid=1003(ja) groups=1003(ja)
ls结果分析

ls -l 结果分析

文件权限和类别 数量 所属者 所属组 文件字节大小 文件创建时间 文件名
drwxr-xr-x 3 root root 4096 Oct2613:58 file
  1. 文件权限和类别

    文件类型 所有者权限 组权限 其他用户权限
    d rwx r-x r-x
    • 文件类型

      属性 文件类型
      - 普通文件
      d 目录文件
      l 符号链接
      c 字符设备文件
      b 块设备文件
    • 权限描述符

      属性 文件 目录
      r 允许打开和读取文件 x条件下允许列出目录下内容
      w 允许写入文件 允许对目录内文件重命名和删除
      x 允许把文件当作文件执行 允许进入目录
  2. 数量

  • 当文件为目录时,数量栏对应目录下的子目录个数

  • 当文件不是目录时,数量栏对应文件的硬链接个数

chmod

只有文件所有者和超级管理员才可以更改文件或目录的权限

  1. 八进制表示法

    chmod 777 log.txt
    
八进制 描述 文件模式
0 无权限 - - -
1 可执行 - - x
2 可写 - w -
3 可写可执行 - w x
4 可查 r - -
5 可查可执行 r - x
6 可查可写 r w -
7 可查可看可写 r w -
  1. 符号表示法

    所属者权限加读写查,所属组不可读写,其他人只能读

    加减为在原基础上加减,赋值为直接赋值相应权限,多项之间用,(逗号)隔开

    chmod u+rwx,g-wx,o=r log.txt
    

+为增加权限,-为减少权限 =为赋值权限

符号 含义
u 所属者
g 所属组
o 所有用户
a 以上全部
umask

用于设置创建文件时设置的默认权限

umask 0002

查看默认权限

umask
su

格式 -l选项用于改变运行环境 可以省略为- user不写的话默认是root用户

su [-[l]] [user]

即我们可以通过下命令执行切换到root用户的身份和环境

su -

使用su命令执行一个新命令而不开启一个新的命令界面

su -c 'command'

使用exit回到原用户身份

exit
sudo

sudo用于允许普通用户直接运行其他用户身份(一般是root),只需要输入当前用户密码即可

注:sudo默认会重置环境变量,使用-E参数或更改配置

sudo rm -rf /

可执行的命令在/etc/sudoer中指定 ,使用下列命令查看可运行的命令

sudo -l

sudo找不到命令解决,查看sudo配置,搜索secure_path将命令路径,将命令位置配入

sudo visudo

xxx用户无需密码即可进行sudo

XXX ALL = NOPASSWD: ALL
chown

更改用户所有者和所属组

基本格式

chown [owner][:[group]] file...
  • 修改所有者为a 不改变所属组

    chown a file...
    
  • 修改所有者为a 把文件所属群组设为A

    chown a:A file...
    
  • 修改文件所属组为A 但不改变所有者

    chown :A file...
    
  • 修改文件所有者为a, 所属组改变为a登录时所属的组

    chown a: file...
    
chgrp

早期更改用户组方式

passwd

修改用户密码

格式 缺省user默认修改当前用户密码,root用户还可指定用户密码失效和账户冻结等操作

passwd [user]

进程

命令 作用
ps 显示当前所有进程
top 实时显示当前所有任务占用情况
jobs 列出所有活动作业的状态信息
bg 设置在后台中运行作业
fg 设置在前台运行作业
kill 发送信号给某个进程
killall 杀死指定名字的进程
shutdown 关机或重启系统
ps

标准查看进程

ps -ef

另一种查看进程方式

ps aux

执行后的结果

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
进程拥有者 进程号id 占用CPU 使用率 占用的内存使用率 占用的虚拟记忆体大小 占用的记忆体大小 终端的次要装置号码 该进程的状态 进程开始时间 执行的时间 所执行的指令

进程状态stat

状态 含义
D 不可中断的睡眠状态,进程在等待I/O操作
R 正在运行
S 睡眠状态
T 暂停状态
Z 无效或僵尸进程,子进程被结束,但是还没有被父进程释放
W 没有足够的记忆体分页可分配
< 高优先序的行程
N 低优先序的行程
L 有记忆体分页分配并锁在记忆体内 (实时系统或I/O)
top

示例 实时显示进程, 默认三秒更新一次

top

结果

top - 16:27:37 up 24 min,  2 users,  load average: 0.03, 0.06, 0.09
Tasks: 221 total,   1 running, 220 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  3.2 sy,  0.0 ni, 96.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   995920 total,   255232 free,   373780 used,   366908 buff/cache
KiB Swap:  2047996 total,  1749500 free,   298496 used.   415468 avail Mem

结果分析

字段 含义
1 top 程序名
16:27:37 当前时间
up 24 min 正常运行时间
2 users 两个用户
load average 负载均值,分别对应前六秒,前五分钟,前十五分钟
2 tasks 进程数和状态
3 0.0 us 用户进程占用CPU率
3.2 sy 系统进程占用CPU率
0.0 ni 低优先级进程占用CPU率
96.8 id 空闲CPU率
0.0 wa 等待I/O操作进程占用CPU率
4 mem 物理RAM使用情况
Swap 交换空间使用情况
中断进程

Ctrl + c

后台运行

语法,让一个命令在后台运行

command &

使用jobs或不带参数的ps查看从该终端启动的作业,

jobs

jobs结果 [1]表示其jobspec,即作业编号为1

[1]+  Running   gedit &
前台运行

jobspec是作业编号, 如果只存在一个作业,则可以省略jobspec

fg %[jobspec]
暂停进程

对前台进程进行 Ctrl + z暂停进程 】

进程暂停后可用bgfg将其重新运行

kill

kill并不是用来终止进程的,而是给进程发送信号的,程序可以监听信号并在接收到信号后执行相应操作

语法

kill [-signal] PID

常用信号[signal]

信号编号 信号量 含义
1 HUP 挂起信号,前台程序接收到会终止,该信号也被许多后台程序用于重新初始化
2 INT 中断信号,和Ctrl + C一个效果
9 KILL 杀死信号,该信号不发送给程序处理,而是发送给内核,内核直接杀死进程
15 TERM 终止信号,默认信号类型,让程序自己终止
18 CONT 继续运行信号,用于恢复STOP信号
19 STOP 暂停信号,该信号和KILL类似,也不发送给程序处理
killall

语法

killall [-u user] [-signal] name...

示例 发送终止信号给由root发起的node和nginx进程

killall -u root -15 node nginx
进程相关命令
命令 描述
pstree 树结构输出进程列表
vmstat 输出系统使用资源快照
xload 绘制系统时间负载情况的一种图形化界面
tload 类似xload 但是图形在终端绘制

配置与环境

环境

命令 描述
printenv 打印部分或全部的环境信息
set 设置shell选项
export 将环境导出到要运行的程序
alias 为命令创建别名
set

set会同时显示shell变量和环境变量,比较冗长

set
printenv

语法 可以缺省列出所有,也可指定变量名列出

printenv [variable]
PATH

环境是在用户登录时,bash会启动并读取一系列配置文件

login和non-login

shell会话有两种,无登录会话典型为GUI界面直接启动的终端

  • 需要登录会话(login)

    文件 说明
    etc/profile 全局配置脚本,适用于所有用户
    ~/bash.profile 用户的个人启动文件
    ~/bash_login bash_profile读取失败后尝试读取此文件
    ~/profile 前两项都读取失败后读取此文件,在detain版本中此为默认值
  • 不需要登录会话

    文件 内容
    /etc/bash.bashrc 全局配置脚本
    ~/.bashrc 用户个人启动文件
新增环境变量

执行命令可新增环境变量,环境变量间用:分割,export PATH用于让shell子进程使用PATH的内容

用户修改环境变量应修改~/.bash_profile或与其等价的配置文件

其他修改应放于.bashrc文件中

PATH=$PATH:路径
export PATH

vi

常用快捷键

常用快捷键
命令 描述
0 光标移至行首
$ 光标移至行尾
o 下一行插入文本,大写为上一行插入
ndd 向下剪切n行,n可省略
nyy 向下复制n行,n可省略
p 在下一行粘贴,大写为上一行粘贴
/pattern 向下查找 /换成?为向上查找,n跳到下一个匹配项
n1,n2s/p1/p2/g n1n2行之间的p1替换成p2, n1,n2可为%(全部)和省略(本行)
`n1,n2 [co m
set nu 显示行号
n 跳到第n行

快捷键大全

移动光标
命令 描述
h 光标左移一个字符
j 光标上移一个字符
k 光标下移一个字符
l 光标右移一个字符
0 光标移至行首
$ 光标移至行尾
H 光标移至屏幕首行
M 光标移至屏幕中间
L 光标移至屏幕最末行
插入文本
命令 描述
i 在光标前插内内容
a 在光标后插入内容
o 在所在行的下一行插入新行
O 在所在行的上一行插入新行
删除文本
命令 描述
x 删除光标后面的字符
X 删除光标前面的字符
nx 删除光标后面n个字符
nX 删除光标前面的n个字符
d0 删除光标至行首的内容
d$ 删除光标至行尾的内容
dd 删除整行
ndd 向下删除n行
复制粘贴文本
命令 描述
yy 复制整行
nyy 复制n行
p 小写p在所在行下一行粘贴
P 大写P在所在行上一行粘贴
dd 剪切
查找文本
命令 描述
/pattern 向下查找
?pattern 向上查找
n 顺序查找
N 反向查找
/p1/p2/gc 在当前行,将p1替换成p2, g为替换多个,c为替换前提示
n1,n2s/p1/p2/gc 将n1至n2行之间的p1替换成p2
屏幕翻滚
快捷键 描述
ctrl+u 向文件首翻半屏
ctrl+d 向文件尾翻半屏
ctrl+f 向文件尾翻一屏
ctrl+b 向文件首翻一屏
末行命令
命令 描述
n1,n2 co n3 将n1至n2行复制到n3行的下面
n1,n2 m n3 将n1至n2行剪切至n3行的下面
n1,n2 d 将n1至n2行删除
w 保存
q 退出
x 保存并退出
q! 强制退出
w! 强制保存
n 定位到n行
set nu 显示行号
set nonu 取消行号
u 取消上一次操作

常见任务与主要工具

软件包管理

软件包系统工具

发行版本 低级工具 高级工具
Debian dpkg apt-get, aptitude
Centos rpm yum
查找软件包

在库中查找xxx软件包

系统类型 命令
Debian apt-get update
apt-cache search package_name
Centos yum search package_name

在本机中查询已安装的软件包

系统类型 命令
Debian dpkg --list
Centos rpm -qa
安装软件包

安装库中的软件包

系统类型 命令
Debian apt-get update
apt-cache install package_name
Centos yum install package_name

安装软件包文件中的软件包,低级安装方式,不会自动解析依赖,可直接安装类似于.rpm结尾的软件包文件

系统类型 命令
Debian dpkg --install package_file
Centos rpm -i package_file
卸载软件包

即可用高级工具也可用低级工具,以下为高级工具

系统类型 命令
Debian apt-get remove package_name
Centos yum erase package_name
更新软件包

更新库中的软件包

系统类型 命令
Debian apt-get update
apt-get upgrade
Centos yum update

更新软件包文件中的软件包

系统类型 命令
Debian dpkg --install package_file
Centos rpm -U package_file
软件包是否已安装
系统类型 命令
Debian dpkg --status package_name
Centos rpm -q package_name
已安装软件包的信息
系统类型 命令
Debian apt-cache show package_name
Centos yum info package_name
查询文件由哪个软件包安装
系统类型 命令
Debian dpkg --search package_file
Centos rpm -qf package_file

网络相关

命令 描述
ping 向网络主机发送ICMP ECHO_REQUEST数据包
traceroute 显示数据包到网络主机的路径
netstat 显示网络连接,路由表,网络接口数据,伪连接以及多点传送成员等信息
ftp 文件传输命令
lftp ftp升级版
wget 非交互式下载器
ssh OpenSSH客户端登录远程服务器
scp 远程复制文件命令
sftp 安全文件传输方式
IPaddress ip地址
host and domain name 主机名和域名
URL 统一资源标识符
ping

向网络主机发送ICMP ECHO_REQUEST数据包

traceroute

跟踪网络数据包的传输路径

一行代表一个路由器

路由器不提供身份的话为*

netstat
ssh

ssh用于安全的登录远程计算机

如果服务端的SSH修改导致密匙不配对 可以删除~/ssh/known_hosts删除本地密匙文件

rm -f ~/.ssh/known_hosts

通过ssh直接执行命令

ssh root@服务器地址 'ls -al' > 本地文件
scp

用root的身份将远程服务器的/file.txt下载到本机的/opt目录下

scp root@124.221.93.15:/file.txt /opt
sftp

登录

sftp 124.221.93.15

!执行本地shell命令,不加执行远程命令

!ls

使用 get 命令可以从远程服务器拉取文件到本地,newName默认为远程文件名

-r拉取整个目录

get [-r] remoteFile [newName]

使用 put 命令可以从本地上传文件到服务器:

put localFile

可以使用 -r 参数来上传整个目录,但是有一点要注意,如果服务器上不存在这个目录需要首先新建:

mkdir folderName
put -r folderName

文件操作

命令 描述
locate 通过文件名查找
find 在文件系统目录中查找
xargs 从标准输入中建立和执行命令行
touch 更改文件日期时间
stat 显示文件或文件系统的状态
locate

快速搜索数据库,查找路径名和指定字符串匹配的文件

可以理解成将所有路径名字符串放入数据库,然后查询条件为模糊查询字符串

更新数据库

updatedb

查找路径名中带bin/zip的文件

locate bin/zip
find
  • test选项

    限制搜索条件

    简单使用,查找用户主目录下类型为文件的后缀名为.jpg的大于1mb的文件,显示行数

    find ~ -type f -name "*.jpg" -size +1M | wc -l
    
    文件类型 描述
    f 普通文件
    c 字符设备
    l 符号链接
    b 块设备文件
    d 目录

    test选项表

    ±n:-n指n天以内,+n指n天以前

    选项 描述
    -name 按名称查找
    -size ±nM 查n mb的文件
    -type 按类型查找
    -user 按文件所属用户
    -group name 按文件所属组
    -mtime ±n 按更改时间
    -atime ±n 按读取时间
    -ctime ±n 按创建时间
    -newer f1 [!f2] 在f1更改后更改的文件,f2可选,比f2更新晚的文件
    -depth 先查完本目录再查子目录
    -prune 忽略某个目录
    -perm 按权限查找 如八进制表示的权限和rwx表示的权限
    -nogroup 无有效属组,即文件的属组在/etc/groups中不在
    -nouser 无有效属主,即文件的属主在/etc/passwd中不存
    -fstype #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
    -mount 查文件时不跨越文件系统mount点
    -follow 如果遇到符号链接文件,就跟踪链接所指的文件
    -mount 查文件时不跨越文件系统mount点
    -follow 如果遇到符号链接文件,就跟踪链接所指的文件
    -cpio 对匹配的文件使用cpio命令,将他们备份到磁带设备中

操作符

查找访问权限不是0600的文件和访问权限不是0700的目录

find ~ \\(-type f -not -prem 0600\\) -or \\(-type d -not -perm 0700)
操作符 功能描述
-and 与,可缩写成-a
-or 或,缩写为-o
-not 非,缩写为-!
() 因为()在命令行中有含义,所以使用\\( \\)
  • action选项

    对搜索到的文件进行操作

    动作 描述
    -delete 删除匹配文件
    -ls 以ls输出匹配的文件
    -print 默认操作
    -quit 一旦匹配就直接退出
  • -exec 可替换为 -ok 可执行用户自定义命令

    -exec直接执行,-ok需要用户手动一次次确认

    每查找到一个文件执行一次列出当前目录下的文件列表 {}代表当前目录

    find ~ -name '*foo' -ok ls -l '{}' ';'
    
  • -xargs

    从标准输入中重建命令行 , 将find的结果作为一个标准输入

    find ~ -name '*foo' | xargs ls -l
    

    find提供了相似的方法,只需要把末尾的分号改成+

    find ~ -name '*foo' -ok ls -l '{}' '+'
    

归档与备份

命令 描述
gzip 压缩和解压缩文件工具
bzip2 块排序文件压缩工具
tar 磁带归档工具
zip 打包和压缩文件
rsync 远程文件和目录的同步
gzip

gzip命令执行后原文件会被压缩文件替代

gunzip命令等于gzip -d,用于解压缩文件

仅查看压缩文件内容

zcat t.txt.gz
cat t.txt.gz | zless
vim t.txt.gz
gzip -c t.txt.gz

参数

参数 功能描述
-r 递归压缩目录
-t –test 检验压缩文件完整性
-v 在压缩时显示压缩信息
-d 解压缩,类似于gunzip
-f 强制压缩,即使源文件的压缩版本已经存在
-c 将压缩后的内容写到标准输出,源文件不变
-h –help
-l 列出压缩文件的压缩统计
-n 压缩级别,n为1(最快)-9(最慢,压缩比率最高)
bzip2

牺牲速度换取高质量的数据压缩

参数和gzip类似,在压缩级别和gzip略有不同

bzip2解压用bunzip2,查看用bcat

bzip还有专门的bzip2recover命令用于修复损坏的.bz2文件

tar

归档是把多个文件归并为一个文件

解压tar.gz文件

tar -zxvf xxx.tar.gz

将etc文件夹压缩成tar文件

tar cf  etc.tar /etc
zip

和Windows交互才会使用的压缩方式

unzip为解压

基本用法

zip options zipfile file

将etc文件夹压缩成zip文件

zip -r etc.zip /etc
rsync

用于在网络上快速实现本地和远程文件的同步和更新

同步/etc到~/etc

-a用于递归归档和保留文件属性

-v用于列出压缩信息

–delete用于删除源文件已经被删除但备份

rsync -av --delete /etc ~/etc

备份本地关键文件到远程的/backup目录

–rsh用于指定ssh命令用于远程shell命令

rsync -av -rsh=ssh /etc /home /usr/local root@124.221.93.15:/backup

sed

sed 命令的基本格式如下:

sed [选项] [脚本命令] 文件名

选项

选项 含义
-n 默认情况下,sed 会在所有的脚本指定执行完毕后,会自动输出处理后的内容,而该选项会屏蔽启动输出,需使用 print 命令来完成输出
-i 此选项会直接修改源文件,在源文件的匹配行上一行添加
-e 脚本命令 该选项会将其后跟的脚本命令添加到已有的命令中
-f 脚本命令文件 该选项会将其后文件中的脚本命令添加到已有的命令中

脚本命令

[address] 'operate[flag]'

address 表示指定要操作的具体行, operate为操作,如替换,删除等,在下文中有介绍,flag为标记操作

operate
  • 替换命令s

    基本格式

    pattern 指的是需要替换的内容,replacement 指的是要替换的新内容

    s/pattern/replacement/
    

    一行中替换第二个匹配的

    sed 's/test/trial/2' test.txt
    This is a test of the trial script
    This is the second test of the trial script
    

    只输出被替换命令修改过的行, n和p连用

    sed -n 's/test/trial/p' test.txt
    

    将匹配后替换的行保存到指定文件中

    sed 's/test/trial/w  保存到文件'  被修改文件
    

    替换类似文件路径的字符串会比较麻烦,需要将路径中的正斜线进行转义

    sed 's/\\/bin\\/bash/\\/bin\\/csh/' /etc/passwd
    
  • 删除命令d

    删除文本中的特定行,在默认情况下 sed 并不会修改原始文件,这里被删除的行只是从 sed 的输出中消失了,原始文件没做任何改变

删除第三行

 sed '3d' 被修改文件
  • 添加命令a 和 i

    a 命令表示在指定行的后面附加一行,i 命令表示在指定行的前面插入一行

    将newline插入到第三行下方

     sed '3i\\newline' 被修改文件
    
  • 替换命令c

    c 命令表示将指定行中的所有内容,替换成该选项后面的字符串

    s是每行的匹配项替换,c是把指定行替换

    把第三行替换成newLine

    sed '3c\\newLine
    
  • 转换命令y

    转换命令是唯一可以处理单个字符的 sed 脚本命令

    基本格式 inchars长度必须和outchars长度相同

    y/inchars/outchars/
    

    inchars 模式中指定字符的每个实例都会被替换成 outchars 模式中相同位置的那个字符

    转换命令是一个全局命令

    echo "This 1 is a test of 1 try." | sed 'y/123/456/'
    This 4 is a test of 4 try
    
flags
flags 标记 功能
p 会打印与替换命令中指定的模式匹配的行。此标记通常与 -n 选项一起使用。
g 对数据中所有匹配到的内容进行替换,如果没有 g,则只会在第一次匹配成功时做替换操作。例如,一行数据中有 3 个 A,则只会替换第一个 A;
n 1~512 之间的数字,表示指定要替换的字符串出现第几次时才进行替换,例如,一行中有 3 个 A,但用户只想替换第二个 A,这是就用到这个标记;
w file 将缓冲区中的内容写到指定的 file 文件中;
& 用正则表达式匹配的内容进行替换;
\\n 匹配第 n 个子串,该子串之前在 pattern 中用 () 指定
\\ 转义(转义替换部分包含:&、\\ 等)

编译

高级语言编写的程序通过编译器转化成机器语言

并不是所有的语言都需要先编译再运行,如解释语言是读到该句就将该句编译成机器语言,而不需要在运行前进行编译

大多数程序都直接使用下面命令进行编译

./configure;
make
configure文件

此文件一般是放在源代码树下的一个可执行的shell文件

此文件任务是分析生成环境,多数程序都是可移植的,所以在不同的环境需要细微调整来生成源代码,同时检查系统是否已经安装必要的外部工具

此文件在检查和配置build程序时会输出许多相关信息

此文件生成几个新文件,最重要的是Makefile文件

Makefile文件

该文件由configure文件生成

该文件指导make命令如何生成可执行程序的配置文件

该文件描述了生成最后的可执行文件时各个部件之间的联系关系

make只会生成那些缺失了和错误的文件

打包好的源代码一般包含一个特殊的make目标文件install

install

该命令执行会在系统目录下安装最后生成的可执行文件

make用于生成,make install用于安装到系统中

可执行程序通常会安装在/usr/local/bin中

软件一般在/usr/local下新建目录

一般在输出信息里可以知道它做了什么

shell脚本

权限

对于shell脚本而言,通常有两种类型的权限

755所有人可执行,700只能所有者执行

位置

自己使用的脚本一般建议放在~/bin目录下

全局用户使用的脚本建议放在/usr/local/bin下

ubantu系统在用户的~/.bashrc中加入了如果有~/bin目录就将此目录加入PATH环境变量的代码

vim

vim为脚本编写提供了许多帮助

以下命令皆为在vi的命令模式中输入

可以将这些命令放入/.vimrc文件(或/etc/.vimrc中)中就可以永久生效

命令 描述
syntax on 开启语法高亮
set syntax = sh 开启语法高亮
set health 将/xxx搜索到的单词高亮
set tabstop = 4 设置Tab键的空格长度
set autoindent 开启自动缩进
here

输入一大段带有换行文本时,echo命令需要在每一行写,使用here式命令可以简化

格式

command为可以接收标准输入的命令

token为结尾标识符

<<-可以忽略开头的tab字符

command << token

简化echo

  • echo

    echo "i am first line"
    echo "i am second line"
    
  • here,xxx为标识这一段文件截止的标志

    xxx必须在一行单独出现,并且文本行的末尾没有空格,常用_EOF_表示结尾标志

    cat << xxx
    i am first line
    i am second line
    xxx
    
变量

直接使用变量名=值来声明变量

注意变量名,=,值之间不能有空格

$变量名引用变量

a=10
echo $a

变量的赋值

a=z;          #将字符串"z"赋值给变量a
b="z z"       #如果字符串带有空格则需要用""包裹
c="z z $a"    #变量扩展
c="z z ${a}"  #建议采用这种变量扩展方式
d=$(ls -l /)  #命令扩展,将命令结果作为值
e=$((5*7))    #算数扩展
f=10 g=11     #可在一行内给多个变量赋值
函数

函数有两种声明方式

函数必须在调用前声明

第一种声明方式

function name {
echo "i am function"
return 
};# 直接使用函数名调用函数
name

第二种声明方式

name() {
echo "ls -l /"
return 
}# 将函数的结果作为命令执行
$(name)
局部变量
local a
a=10
if分支语句

基本格式

if会判断commands命令的退出状态

if commands; then
commands
elif commands; then
commands
else 
commands
fi
x=5if [$x = 5]; then 
echo "x=5"
else echo "x!=5"
fi
退出状态

在shell中,任何程序包括我们写的的脚本,在执行完毕后会向操作系统发送一个0~255之间的值,称之为退出状态,用于指示命令成功还是失败

按照惯例,0表示成功,其他值表示失败

shell提供了$?来检测退出状态值

true命令总是返回0

false命令总是返回1

ls -d /usr  
#/usr
echo $?
#0
ls -d /unexistDirectory
#ls: 无法访问'/a': 没有那个文件或目录
echo $?
2
test

test用于测试表达式

以下两种方式等价

第一种更加流行

test [express]
test express
文件表达式
表达式 为true条件
file1 -nt file2 file1比file2新
file1 -ot file2 file1比file2旧
-c file file存在并且是一个字符(设备)文件
-d file file存在并且是一个目录
-r file file文件存在并且当前用户可读
-w file file存在并且当前用户可写
-x file file存在并且当前用户可执行
-e file file存在
-f file file存在并且是一个普通文件
file1 -ef file2 这两文件通过硬链接指向同一个文件
-b file1 file1是块(设备)文件
-g file file存在并且设置了组ID
-G file file存在且属于有效组ID
-k file file存在且有’粘滞位’属性
-L file file存在并且是一个符号链接
-O file file存在且属于有效用户ID
-p file file存在并且是一个命名管道
-s file file存在并且长度大于0
-S file file存在并且是一个网络套接字
-t file file是一个定向到终端的/从终端定向的文件描述符,可用来标准输入/输出/错误是否被重定向

以上表举例

FILE=/etc/profile
# 注意,-f ,$FILE 必须和[]有一个空格的间距
if [ -f $FILE ]; then
echo "profile is a ordinary file"
#建议将$FILE加上"",这可以防范FILE为空时产生的错误
elif [ -d "$FILE" ]; then
echo "profile is a directory"
fi
#exit接受一个可选参数,它将成为程序的退出状态,默认是0,exit可替换为return
exit
字符串表达式
表达式 为true的条件
string 字符串不为空
-n string 字符串的长度大于0
-z string 字符串的长度等于0
string1==string2 字符串1等于字符串2,也可以用=代替==
string1!=string2 字符串1不等于字符串2
string1>string2 在使用此test表达式时,<要用\\<转义,否则会被当成重定向符,此比较符以ASCII码排序比较
string1<string2 同上

以上表举例

s=mystring
if [ "$s" \\> "mystring2" ]; then
echo "i am impossible"
else 
echo "i am certainly"
fi
return 0
整数表达式
表达式 成为true的条件
num1 -eq num2 num1和num2相等
num1 -ne num2 num1和num2不相等
num1 -le num2 num1小于等于num2
num1 -lt num2 num1小于num2
num1 -ge num2 num1大于等于num2
num1 -gt num2 num1大于num2
更现代的test
[[express]]

语法,此命名和test很像,不过支持了一个很好的特性,字符串正则表达式

[[express]]
  • 字符串正则表达式特性,注意, ~和正则表达式之间必须要有一个空格

    string=~ regex
    

    正则小案例,检测变量是不是数字

    INTEGER=-5
    if [[ "$INTEGER" =~ ^-?[0-9]+$ ]]; then
    echo "is a number"
    else 
    echo "is not a number"
    fi
    
  • 操作符支持匹配模式

    操作符小案例,检测文件是否以test开头

    FILE=/etc/profile
    if [[ $FILE == test.* ]]; then
    echo "is test.xxx"
    else 
    echo "is not test.xxx"
    fi
    
((express))

为算数运算判断而生

if ((1 > 2)); then
echo "it is impossible"
fi
if (( ((5%2)) == 0 )); then
echo "i am impossible too"
逻辑表达式
Operation test [[]]和(())
AND -a &&
OR -o ||
NOT ! !
  • [[]]和(())

    INT=10
    if [[ $INT -ge 5 && $INT -le 20 ]]; then
    echo "5 < INT < 20"
    fi
    
  • test

    INT=10
    if [ $INT -ge 5 -a $INT -le 20 ]; then
    echo "5 < INT < 20"
    
利用|| &&来实现分支

同一些编程语言一样

&&前一个为真才执行后一个

||前一个为真则不执行后一个

command1 && command2
读取键盘输入
read

从标准输入读取值

语法

options为下表的选项,而variable则为接收输入的变量

read [options] [variable...]

options

选项 描述
-a array 将输入值从索引值为0处开始赋值给array
-d delimiter 用字符串delimiter的第一个字符标志输入的结束,而不是新一行的开始
-e 使用Readline处理输入,此命令使用户能使用命令行模式的相同方式编辑输入
-n num 从输入中读取n个字符,而不是读取一整行
-p prompt 使用prompt字符串提示用户进行输入
-r 原始模式,不能将\\字符翻译成转义
-s 保密模式,输入不可见
-t seconds 在seconds秒后结束输入
-u fd 从文件说明符fd中读取输入,而不是从标准输入中读取

read读取数字判断大小

# -n表示不输出行尾的换行符
echo -n "please enter an integer"
read number
#表示number要比5大才为true,也可写为[[ $number -ge 5 ]],或者(( $number > 5 ))
if [ $number -ge 5 ]; then
echo "number is greater than 5"
fi
IFS间隔输入

通常shell会使用空格作为分隔符来赋值给多个变量

LFS是一个变量,默认是空格,用来表示read的分割符

如下面的程序会将na赋值给user变量,123456赋值给pw变量,1023赋值给uid

IFS=":" read user pw uid <<< "na:123456:1023"
read不可重定向问题

下面这段代码看似可以实现提取功能,实则不行

因为shell处理管道符的方式为管道会创建一个新的子shell环境,然后在子shell环境中执行,然后销毁子shell环境,read所赋值的变量也随之销毁

IFS=":"
echo "na:123456:1023" | read user pw uid
循环

CG素材网