#
超级用户权限$
普通用户date
cal
df
free
exit
系统程序安装目录/usr/bin
家目录~
~ | 家目录 |
---|---|
/ | 根目录 |
/bin | 系统启动和运行必须的二进制程序 |
/boot | Linux内核、初始RAM磁盘映像和启动加载程序 |
/dev | 设备节点,内核在此目录维护所有设备的列表 |
/etc | 系统层面的配置文件,包含一系列的shell脚本(/etc/crontab,定义自动运行的任务)(/etc/passwd,用户账号列表) |
/lib | 核心系统程序所使用的共享库文件(Windows中的动态链接库) |
/media | 可移动介质的挂载点 |
/mnt | 早些linux系统中的可移动介质的挂载点 |
/opt | 安装可选软件 |
/proc | 一个由Linu系统维护的虚拟文件系统 |
/sbin | 为超级用户保留的系统二进制文件 |
/usr | 普通用户所需要的所有程序和文件 |
/usr/bin | 系统安装的可执行程序 |
/usr/lib | /usr/bin中程序的共享库 |
/usr/local | 通常由源码编译的程序回安装在/usr/local/bin下 |
选项 | 长选项 | 描述 |
---|---|---|
-a | –all | 列出所有文件(包括隐藏文件) |
-l | 以长格式显示结果 | |
-t | 按照修改时间排序 | |
-h | –human-readable | 当以长格式列出时,以人们可读的方式展示 |
-d | –directory | 可以看到目录的详细信息 |
-r | –reverse | 以相反的顺序显示结果,ls通常是按字母升序排列 |
-S | 按文件大小来排序 | |
-F | –classify | 如果名字是目录名则会加上一个‘/’字符 |
打印文件内容的简单描述
页面调度器类程序
less filename
命令 | 行为 |
---|---|
PageUp、b | 向上翻滚一页 |
PageDown、space | 向下翻滚一页 |
UpArrow | 向上一行 |
DownArrow | 向下一行 |
q | 退出 |
h | 显示帮助屏幕 |
G | 移动到最后一行 |
g | 移动到第一行 |
/charates | 向前查找指定的字符串 |
n | 向前查找下一个出现的字符串(之前指定的) |
通配符 | 描述 |
---|---|
? | 匹配一个字符 |
* | 匹配多个字符(0个或者多个) |
[characters] | 匹配任意一个属于字符集中的字符 |
[!characters] | 匹配任意一个不属于字符集中的字符 |
[[:class:]] | 匹配任意一个属于字符类中的字符 |
字符类 | 描述 |
---|---|
[:alnum:] | 字母或数字 |
[:alpha:] | 字母 |
[:digit:] | 数字 |
[:lower:] | 小写 |
[:upper:] | 大写 |
以ls
命令为例
ls *
所有文件ls g*
以g开头的所有文件ls g???
以g开头后面紧跟三个字符的文件ls [abc]*
以a或b或c开头的文件ls abs[0-9][0-9][0-9]
以abc开头后面紧跟三个数字的文件[[:alpha:]]*
以字母开头的所有文件[![digit]]*
不是以数字开头的所有文件*[[:lower:]123]
以小写字母或1或2或3结尾的文件cp file dir
将文件复制到dir中
-a
复制其所有权和权限-i
重写已存在文件前,提示用户确认-u
仅复制目标目录中不存在的文件-r
递归复制目录以及目录中的内容,目录复制时使用-v
显示过程-i
重写已存在文件前,提示用户确认-u
仅移动目标目录中不存在的文件-v
显示过程-i
删除已存在文件前,提示用户确认-r
递归删除-v
显示过程-f
忽视不存在的文件,覆盖-i
ln file link
创建硬链接ln -s file link
创建软连接which
显示一个可执行程序的位置help
显示shell内建命令的帮助文档--help
显示用法信息man
显示程序手册页alias name='string'
type name
alias foo='cd /etc;ls;cat passwd'
unalias foo
ls -l /usr > ls_output.txt
> ls_output.txt
删除其中的内容,因为每次重定向都是从头写入ls -l /usr >> ls_output.txt
每次重定向,续写标准输入、输出和错误, shell 内部分别将其称为文件描述符 0、 1 和 2
ls -l /bin/123 2> ls_output.txt
文件描述符 “2”,紧挨着放在重定向操作符之前,来执行重定向标准错误到文件 ls-error.txt任务
ls -l /usr/bin > ls_output.txt 2>&1
或者
ls -l /usr/bin &> ls_output.txt
两个重定向。首先重定向标准输出到文件 ls-output.txt,然后重定向文件描述符 2(标准错误)到文件描述符 1(标准输出)使用表示法 2>&1。 顺序不能错
ls -l /usr/bin 2> /dev/null
系统通过重定向输出结果到一个叫做 “/dev/null” 的特殊文件,为我们提供了解决问题的方法。这个文件是系统设备,叫做位存储桶,它可以接受输入,并且对输入不做任何处理。
cat file
显示文本内容,一般用于显示简短文本cat movie.jpeg.0* >movie.jpeg
,将分散的多个文本连结起来(一般都是顺序的文件,所以也会按顺序连结)cat
不带参数表示从键盘的输入作为输入源,以Ctrl+d
作为结束cat > cat_input.txt
,将键盘的输入写入cat_input.txt中,以Ctrl+d
作为结束,一般用于创建简短文件cat < test.txt
将test.txt作为输入源,与cat test.txt
一样的效果ls -l /usr/lib | less
,将ls的输入作为less的输入进行展示ls /bin /usr/bin | sort | less
,将ls的输出作为sort的输入,进行排序后的输入作为less的输入进行展示uniq 从标准输入或单个文件名参数接受数据有序列表,默认情况下,从数据列表中删除任何重复行
uniq 命令经常和 sort 命令结合在一起使用
ls /bin /usr/bin | sort | uniq | less
,从 sort 命令的输出结果中,来删除任何重复行
如果我们想看到重复的数据列表,让 uniq 命令带上 “-d” 选项
ls /bin /usr/bin | sort | uniq -d| less
wc text.txt
打印的结果分别是:行数-单词数-字节数wc text.txt -l
只打印行数-n num
指定打印行数tail
通过加入-f
可以查看实时文件,当文件更新时自动更新显示ls /usr/bin | tee ouput.txt | grep zip
,将ls的输出先进行保存后再进行grep过滤处理(用于调试,将中间结果保存)echo hello
打印hello
echo *
shell处理的时候会将*展开后的内容打印处理
echo +通配符
展示指定文件
~
展开当前用户目录~+用户名
展开制定用户目录花括号展开模式可能包含一个开头部分叫做报头,一个结尾部分叫做附言。
花括号表达式本身可能包含一个由逗号分开的字符串列表,或者一个整数区间,或者单个的字符的区间
echo front_{1,2,3}_back
front_1_back front_2_back front_3_back
echo front_{1..5}_back
front_1_back front_2_back front_3_back front_4_back front_5_back
批量创建文件夹mkdir {2020..2023}-0{0..9} {2020..2023}-{10..12}
2020-01 2020-07 2021-01 2021-07 2022-01 2022-07 2023-01 2023-07
2020-02 2020-08 2021-02 2021-08 2022-02 2022-08 2023-02 2023-08
2020-03 2020-09 2021-03 2021-09 2022-03 2022-09 2023-03 2023-09
2020-04 2020-10 2021-04 2021-10 2022-04 2022-10 2023-04 2023-10
2020-05 2020-11 2021-05 2021-11 2022-05 2022-11 2023-05 2023-11
2020-06 2020-12 2021-06 2021-12 2022-06 2022-12 2023-06 2023-12
echo $USER
用户名展开
pinrtenv
查看可展开的变量
将命令作为参数展开
echo $(ls -l /usr/bin)
查看过滤后的文件的属性
file $(ls /usr/bin/* | grep zip)
如果你把文本放在双引号中,shell 使用的特殊字符,都失去它们的特殊含义,被当作普通字符来看待。有几个例外:$,\ (反斜杠),和 ‘(倒引号)
单词分割、路径名展开、波浪线展开和花括号展开都将失效
echo this is a test
this is a test
echo "this is a test"
this is a test
然而参数展开、算术展开和命令替换仍然执行
echo "$USER $((2+2))"
lux 4
禁止所有的展开
echo text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER
text /home/lux/test.txt a b foo 4 lux
echo "text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER"
text ~/*.txt {a,b} foo 4 lux
echo 'text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER'
text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER
\
转译字符,可以消除特殊字符的含义,但是在单引号中转译字符也没用
clear
清空屏幕history
历史命令快捷键 | 描述 |
---|---|
Ctrl+a | 移动光标到行首 |
Ctrl+e | 移动光标到行尾 |
Alt+f | 向前移动一个字 |
Alt+b | 向后移动一个字 |
快捷键 | 描述 |
---|---|
Ctrl+k | 剪切光标到行尾 |
Ctrl+u | 剪切光标到行首 |
Ctrl+y | 粘贴到光标处 |
history
查找历史命令
history | grep /usr/bin
查找历史命令中与/esr/bin
相关的命令
2051 file $(ls /usr/bin* | grep zip)
2052 ls /usr/bin*
2053 file $(ls /usr/bin* | grep x)
2054 file $(ls /usr/bin* | grep zip)
2069 history | gerp /usr/bin
2070 history | grep /usr/bin
2071 ls /usr/bin*
2072 history | grep /usr/bin
! 2052
即可执行对应的命令
id
显示用户身份号chmod
更改文件模式umask
设置默认的文件权限su
以另一个身份来运行shellsudo
以另一个用户的身份来执行命令chown
更改文件所有者chgrp
更改文件组所有权ls -l test.txt
-rw-rw-r-- 1 lux lux 6 2月 20 10:55 test.txt
前10个字符解析
第一个:
符号 | 意义 |
---|---|
- | 普通文件 |
d | 一个目录 |
l | 一个符号链接 |
c | 一个字符设备文件 |
b | 一个块设备文件 |
剩余9个(文件模式):
代表着文件所有者、文件组所有者和其他人的读、写和执行权限
可以用rwx
来表示,刚好三位可以用八进制表示:
7->rwx 1->x 2->w 4->r
所以之前用的chmod 777 test.txt
就是将所有者、文件组所有者和其他人组的权限都设置为可读写执行
u
代表文件所有者
g
代表文件所属组
o
代表其他所有者
chmod u+x test.txt
给文件所有者添加可执行权限
chmod u-x test.txt
给文件所有者删除可执行权限
以此类推
umask 022
ps
top
jobs
bg
fg
kill
killall
shutdown
ps
ps x
TTY一栏出现?
表示没有控制终端
STAT表示当前进程的状态
状态 | 含义 |
---|---|
R | 运行中 |
S | 正在睡眠,进程没有运行,而是正在等待一个事件 |
D | 不可中断睡眠,正在等待I/O |
T | 已停止 |
Z | 僵尸进程 |
< | 一个高优先级进程 |
N | 低优先级进程 |
ps aux
标题 | 含义 |
---|---|
USER | 进程的所有者 |
%CPU | CPU 使用率 |
%MEM | 内存使用率 |
VSZ | 虚拟内存大小 |
RSS | 占用的物理内存大小,千字节为单位 |
START | 进程启动的时间 |
top - 15:45:23 up 29 min, 1 user, load average: 0.16, 0.36, 0.57
任务: 309 total, 1 running, 251 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.6 us, 0.2 sy, 0.0 ni, 99.2 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 12162404 total, 7581380 free, 1541436 used, 3039588 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 9914304 avail Mem
load average
第一个是最后 60 秒的平均值,下一个是前 5 分钟的平均值,最
后一个是前 15 分钟的平均值。若平均值低于 1.0,则指示计算机工作不忙碌。
%Cpu(s)
以xlogo
程序为例
运行xlogo
,终端等待进程终止,使用Ctrl+c
终止程序
将进程放置后台运行,运行xlogo &
[1] 4470
任务号:1 PID:4470
通过ps
可以看到后台运行的进程
通过jobs
可以看到后台的任务的运行情况
[1]+ 运行中 xlogo &
将进程返回至前台,运行fg %1
百分号+任务号
停止一个进程Ctrl+z
xlogo
^Z
[1]+ 已停止 xlogo
kill [-signal] PID
编号 | 名字 | 意义 |
---|---|---|
1 | HUP | 挂起 |
3 | INT | 终端,终止一个程序 |
9 | KILL | 杀死 |
15 | TERM | 终止 |
18 | CONT | 继续,在一个停止信号后,回复进程运行 |
19 | STOP | 停止,不是终止 |
xlogo &
[1] 4682
xlogo &
[2] 4684
killall xlogo
jobs
[1]- 已终止 xlogo [2]+ 已终止 xlogo
pstree
树形结构进程列表,展示了进程间的父子进程关系vmstat
输出一个系统资源使用快照,包括内存,交换分区和磁盘 I/O。printenv
set
export
alias
printenv
查看环境变量printenv 变量名
set
当使用没有带选项和参数的 set 命令时,shell 变量,环境变量,和定义的 shell 函数都会被显示echo $变量名
alias
查看别名变量 | 内容 |
---|---|
SHELL | shell程序的名字 |
LANG | 字符集以及语言编码方式 |
PATH | 由冒号分开的目录列表,当你输入可执行程序名后,会搜索这个目录列表 |
PS1 | 这个定义了你的 shell 提示符的内容 |
TERM | 终端类型名。类 Unix 的系统支持许多终端协议;这个变量设置你的终端仿真器所用的协议。 |
PWD | 当前工作目录 |
当我们登录系统后,bash 程序启动,并且会读取一系列称为启动文件的配置脚本,这些文件定义了默认的可供所有用户共享的 shell 环境。
文件 | 内容 |
---|---|
/etc/profile | 应用于所有用户的全局配置脚本。 |
~/.bash_profile | 用户个人的启动文件。可以用来扩展或重写全局配置脚本中的设置 |
~/.bash_login | 如果文件 ̃/.bash_profile 没有找到,bash 会尝试读取这个脚本 |
~/.profile | 如果文件 ~/.bash_profile 或文件 ~/.bash_login 都没有找到,bash 会试图读取这个文件。 |
文件 | 内容 |
---|---|
/etc/bash.bashrc | 应用于所有用户的全局配置文件 |
~/.bashrc | 用户个人的启动文件。可以用来扩展或重写全局配置脚本中的设置 |
在普通用户看来,文件 ∼/.bashrc 可能是最重要的启动文件,因为它几乎总是被读取。非登录 shell 默认会读取它,并且大多数登录 shell 的启动文件会以能读取∼/.bashrc 文件的方式来书写。
source .bashrc
使其生效从一个资源库中下载一个软件包,并经过完全依赖解析来安装它
风格 | 命令 |
---|---|
Debian | apt-get update;apt-get install package_name |
RedHat | yum install package_name |
如果从某处而不是从资源库中下载了一个软件包文件,可以使用底层工具来直接(没有经过依赖解析)安装它
风格 | 命令 |
---|---|
Debian | dpkg -i package_name |
RedHat | rpm -i package_name |
风格 | 命令 |
---|---|
Debian | apt-get remove package_name |
RedHat | yum erase package_name |
风格 | 命令 |
---|---|
Debian | apt-get update;apt-get upgrade |
RedHat | yum update |
风格 | 命令 |
---|---|
Debian | dpkg -i package_file |
RedHat | rpm -U package_file |
风格 | 命令 |
---|---|
Debian | dpkg --list |
RedHat | rpm -qa |
风格 | 命令 |
---|---|
Debian | dpkg -state package_name |
RedHat | rpm -q package_name |
风格 | 命令 |
---|---|
Debian | apt-cache show package_name |
RedHat | yum info package_name |
mount
umount
fsck
fdisk
mkfs
fdformat
dd
md5sum
mount /dev/sdc1 /mnt/sdcard
umount /mnt/sdcard
插入可移动设备之前可以通过系统日志查看可移动设备的挂载过程,Ununtu系统的系统日志文件/var/log/messages
文件不存在可以通过以下操作打开系统日志
sudo vim /etc/rsyslog.d/50-default.conf
取消这部分的注释
*.=info;*.=notice;*.=warn;\
auth,authpriv.none;\
cron,daemon.none;\
mail,news.none -/var/log/messages
重启服务器systemctl restart rsyslog.service
通过sudo tail -f /var/log/messages
即可实时查看系统日志
./dev/sdb
为例,操作之前必须卸载它sudo umount /dev/sdb
sudo fdisk /dev/sdb
-t
用于指定创建的文件系统类型sudo mkfs -t ext3 /dev/sdb1
dd if=input_file of=output_file [bs=block_size [count=blocks]]
ping
traceroute
打印一台网络主机的路由数据包netstat
打印网络连接/路由表/接口统计数据等ftp
wget
ssh
locate
通过名字查找文件find
在一個目录层次结构中搜索文件xargs
从标准输入生成和执行命令行touch
更改文件是时间stat
locate 程序只能依据文件名来查找文件,而 find 程序能基于各种各样的属性搜索一个给定目录(以及它的子目录),来查找文件。
find $PWD -type f
查找当前目录下的文件
文件类型 | 描述 |
---|---|
b | 块设备文件 |
c | 字符设备文件 |
d | 目录 |
f | 普通文件 |
l | 符号链接 |
查找当前目录下文件大小大于1M,文件名以.jpeg
结尾的普通文件
find $PWD -type f -name "*.jpeg -size +1M"
+
大于 -
小于限制条件 | 描述 |
---|---|
-empty | 匹配为空文件或目录 |
-iname | 同-name,不区分大小写 |
-inum | 匹配 inode 号是 n 的文件。这对于找到某个特殊 inode 的所有硬链接很有帮助 |
-size | 匹配大小的文件 |
-type | 匹配文件类型的文件 |
-depth | 指示 find 程序先处理目录中的文件,再处理目录自身 |
-maxdepth | 当执行测试条件和行为的时候,设置 find 程序陷入目录树的最大级别数 |
-mindepth | 在应用测试条件和行为之前,设置 find 程序陷入目录数的最小级别数。 |
find 命令提供了一种方法来结合测试条件,通过使用逻辑操作符来创建更复杂的逻辑关系
逻辑符号 | 描述 |
---|---|
-and/-a | 与 |
-or/-o | 或 |
-not/(!) | 非 |
() | 把测试条件和操作符组合起来形成更大的表达式。这用来控制逻辑计算的优先级。默认情况下,find 命令按照从左到右的顺序计算 |
执行 find 命令得到结果列表很有用处,但是我们真正想要做的事情是操
作列表中的某些条目
操作 | 描述 |
---|---|
-delete | 找到之后删除 |
-ls | 找到之后ls出来 |
找到之后打印到标准输出 | |
-quit | 一旦找到匹配则退出 |
17.1.4指定了几个固定操作,还可以通过-exec
自定义操作
-exec command {} ;
command 就是指一个命令的名字
{}是当前路径名的符号表示
分号是必要的分隔符表明命令的结束
find $PWD -type f -exec ls -l '{}' ';'
通过使用 -ok 行为来代替 -exec,在执行每个指定的命令之前,会提示用户,相当于rm
命令加个-i
的情况
find $PWD -type f -ok ls -l '{}' ';'
find $PWD -type f -print | xargs ls -l
find 命令的输出被管道到 xargs 命令,之后,xargs 会为 ls 命令构建参数列表,然后执行 ls 命令
gzip
bzip2
tar
zip
rsync
.gz
结尾选项 | 描述 |
---|---|
-c | 把输出写入到标准输出,并且保留原始文件 |
-d | 解压缩 |
-f | 强制压缩 |
-r | 递归地压缩目录中的文件 |
-t | 测试压缩文件的完整性 |
-v | 显示压缩过程中的信息 |
.bz2
结尾模式 | 描述 |
---|---|
c | 为文件和/或目录列表创建归档文件 |
x | 抽取归档文件 |
r | 追加具体的路径到归档文件的末尾 |
t | 列出归档文件的内容 |
cat
sort
uniq
cut
paste
join
comm
diff
patch
tr
sed
aspell
…未完待续