文章目录
由于最近疫情期间一直在家隔离,跟随时代潮流学习了做凉皮、面包、猫耳朵。。。 做的多了所以想学习会儿,系统的看点书、整理点琐碎的知识点,写这篇博客的初衷也只是为了在自己的ubuntu基础上拾点柴火 加把火,当然经典的柴火要在空闲的时间多烧,所以有些是自己感觉当前暂时不用的或者当前掌握的指令就没整理,后期还会再回炉。
言归正传首先对linux ubuntu下手,平时一直在用ubuntu系统,基本使用没问题,但总感觉没有系统的学习过,平时都是遇到指令再查,导致好多零碎的东西没拾起来,好多方便的东西没用起来。以前读过鸟叔私房菜基础篇(第四版),看过慕课公开课PegasusWang的玩转Vim 从放弃到爱不释手和bilibili TheCW的上古神奇Vim 对我使用ubuntu、vim的影响非常大,配置了.vimrc
能让你更喜欢ubuntu系统,更喜欢手不离开键盘的乐趣 哈哈,在此强烈推荐PegasusWang的课程,非常适合入门观看,视频短、直入正题、课程编排合理,重要的是将每个指令都解释成英文形式 方便复杂的指令简单记住,后期有时间会整理一版。我当前使用的ubuntu 16.04lts版本,大部分指令都在本机测试过。
《the linux command line》-- William Shotts (《快乐的linux命令行》 翻译由好奇猫工作室
发起 )
Introduction
- 图形用户界面 GUI
Graphical User Interface
- 命令行界面 CLI
Command-Line Interface
- 图形用户界面让简单的任务更容易完成,而命令行界面使完成复杂的任务成为可能
- 适合新手,从头到尾阅读,它并不是一本技术参考手册,更像是一本故事书。
Part 1 Learning the Shell
- 命令行其实真正指的是shell。shell就是一个程序,接收来自键盘的命令,并传递给操作系统执行。
bash
–Bourne Again SHell
- 如果提示符的最后一个字符是
#
而不是$
,那么这个终端就有超级用户权限
lyz@lyz:/home/lyz$
root@lyz:/home/lyz#
注意:
不要在一个终端窗口里使用Ctrl-c
和Ctrl-v
快捷键执行拷贝和粘贴操作。因为早于Microsoft Windows 许多年两个快捷键已经赋予了不同意义。
date # 日期
cal # 日历
df # 磁盘剩余空间 -h
free # 空闲内存 -h
exit # 退出
- 即使终端仿真器没有运行,在后台仍然有几个终端运行着,它们叫做虚拟终端或者虚拟控制台。大多数linux发行版中,终端可以通过按下
Ctrl-Alt-F1
到Ctrl-Alt-F6
访问,切换虚拟控制台,使用Alt
和F1-F6
(中的一个)。返回图形桌面,按Alt-F7
。
pwd # Print name of current Working Directory 打印当前工作目录路径
cd # Change Directory 更改目录
cd - # 更改工作目录到先前的工作目录
ls # List directory contents 列出目录内容
ls /home/lyz /usr # 列出多个目录内容
ls -l -h # 长模式输出 humman-readable 人们可读的格式,而不是以字节显示文件大小
ls -t # 按文件修改时间先后排序
ls -r # 相反顺序显示结果
ls -S # 按照文件大小排序
file # Determine file type 确定文件类型
less # View file contents 浏览文件内容
长格式模式中第一列 -rw-r--r--
文件的访问权限。第一个字符指明文件类型。在不同类型之间,开头的“-”说明是一个普通文件,“d”表明是一个目录,“l”表明是一个链接。其后三个字符是文件所有者的访问权限,再其后的三个字符是文件所属组中成员的访问权限,最后三个字符是其他所有人的访问权限。
less快捷键
命令 | 行为 |
---|---|
Page Up or b | 向上翻滚一页 |
Page Down or space | 向下翻滚一页 |
UP Arrow | 向上翻滚一行 |
Down Arrow | 向下翻滚一行 |
G | 移动到最后一行 |
1G or g | 移动到开头一行 |
/charaters | 向前查找指定字符串 |
n/N | 向前/后查找下一个出现的字符串 |
h | 帮助 |
q | 退出 |
部分目录
目录 | 解释 |
---|---|
/ | 根目录 |
/bin | 包含系统启动和运行所必须的二进制程序 |
/boot | 所有Linux内核 初始RAM磁盘镜像和启动加载程序 /boot/grub/grub.conf 配置启动加载程序 /boot/vmlinuz Linux内核 |
/dev | 设备节点的特殊目录 usb |
/etc | 包含所有系统层面的配置文件。 一系列的shell脚本,系统启动时,这些脚本会开启每个系统服务 /etc/crontab, 定义自动运行的循环任务 /etc/fstab 包含存储设备的列表,以及与他们相关的挂载点 /etc/passwd 包含用户账户列表 |
/home | 家目录 |
/media | 包含可移动介质的挂载点 例如 USB驱动器 CD |
/mnt | 可移动介质的挂载点 |
/opt | 安装可选的软件 商业软件 第三方软件 |
/usr | 包含普通用户所需要的所有程序和文件 |
/var | 动态文件 例如 日志文件 /var/log |
cp item1 item2
cp -a # 复制文件和目录以及它们的属性,包括所有权和权限
cp -r # 递归地复制目录及目录中的内容。
cp -u # 仅复制目标目录中不存在的文件或者文件内容新于目标目录中已经存在的文件
ln file link # 创建硬链接
ln -s item link # 创建符号链接 item可以是一个文件或一个目录
硬链接局限性:
- 硬链接不能关联它所在文件系统之外的文件,这是说一个链接不能关联与链接本身不再同一个磁盘分区的文件。例如:不可以在home下链接/media的文件
- 硬链接不能关联目录
type # 说明怎样解释一个命令名
which # 显示会执行哪个可执行程序
man # 显示命令手册页
apropos # 显示一系列适合的命令
info # 显示命令 info
whatis # 显示一个命令的简洁描述
alias # 创建命令别名
alias ls='ls --color=tty'
cat # 连接文件
sort # 排序文本行
uniq # 报告或省略重复行
grep # 打印匹配行
wc # 打印文件中换行符,字,和字节个数
head # 输出文件第一部分
tail # 输出文件最后一部分
tee # 从标准输入读取数据,并同时写到标准输出和文件
重定向
- I/O 重定向允许我们来重定义标准输出的地点。我们使用 “>” 重定向符后接文件名将标准输出重定向到除屏幕以外的另一个文件。当我们使用 “>” 重定向符来重定向输出结果时,目标文件总是从开头被重写。
- 使用 “>>” 操作符,将导致输出结果添加到文件内容之后。如果文件不存在,文件会被创建,就如使用了 “>” 操作符。
- 处理不需要的输出,可以重定向输出结果到
/dev/null
文件中,此文件叫做位存储桶,可以接受输入并且不对输入做任何处理。
管道线 pipline
命令从标准输入读取数据并输送到标准输出的能力被一个称为管道线的 shell 特性所利用。使用管道操作符 “|”(竖杠),一个命令的标准输出可以通过管道送至另一个命令的标准输入
echo $((expression))
echo $((2+2))
echo $(($((5**2)) * 3))
echo Front-{A,B,C}-Back # 花括号展开
>> Front-A-Back Front-B-Back Front-C-Back
echo Number_{1..5}
>> Number_1 Number_2 Number_3 Number_4 Number_5
echo $USER
>> lyz
echo "$USER"
>> lyz
引用
- 双引号。如果你把文本放在双引号中, shell 使用的特殊字符,都失去它们的特殊含义,被当作普通字符来看待。有几个例外: $, \ (反斜杠),和 ‘(倒引号)。使用双引号,我们可以处理包含空格的文件名。
- 单引号。如果需要禁止所有的展开,我们要使用单引号。
echo '$USER'
结果还是$USER
移动光标快捷键
按键 | 行动 |
---|---|
Ctrl-a | 移动光标到行首。 |
Ctrl-e | 移动光标到行尾。 |
Ctrl-f | 光标前移一个字符;和右箭头作用一样。 |
Ctrl-b | 光标后移一个字符;和左箭头作用一样。 |
Alt-f | 光标前移一个字。 |
Alt-b | 光标后移一个字。 |
Ctrl-l | 清空屏幕,移动光标到左上角。clear 命令完成同样的工作。 |
Ctrl-d | 删除光标位置的字符 |
Ctrl-h | 删除光标前一个字符 |
!!
重复最后一次执行的命令
!number
重复历史列表中第number行命令
!string
重复最近历史列表中,以这个字符串开头的命令
!?string
重复最近历史列表中,包含这个字符串的命令
passwd
更改密码
进程
bg # 把一个任务放到后台执行
fg # 把一个任务放到前台执行
kill # 给一个进程发送信号
killall # 杀死指定名字的进程
shutdown # 关机或重启系统 `sudo shutdown -h now` 立刻关机
ps # 查看进程,静态,当前执行时刻的快照 process status
ps aux
top # 动态查看进程活动 默认三秒更新一次 `htop`秀一点 多彩多样 能过滤进程
jobs # 列出活跃的任务 任务控制 (后台执行的任务 经过jobs之后会报出任务号,根据任务号使用`fg %1`调到前台)
pstree # 输出树型结构的进程列表
Part 2 Configuration and the Environment
printenv/env # 打印部分或所有的环境变量
set # 设置 shell 选项
export # 导出环境变量,让随后执行的程序知道。
alias # 创建命令别名
Part 3 Common Tasks and Essential Tools
dpkg --list # 列出安装到系统中的所有软件包列表
dpkg --status package_name # 确定是否安装了软件包
apt-cache show package_name # 显示所安装软件包的信息
dpkg --search file_name # 查找安装了某个文件的软件包
netstat -ie
netstat -r # 会显示内核的网络路由表
wget # 下载文件
locate # 通过名字来查找文件
find # 在一个目录层次结构中搜索文件
20 正则表达式
grep
这个名字来自于短语 global regular expression print
重要,需要找资料重点学习。
cat # 连接文件并且打印到标准输出
sort # 给文本行排序
uniq # 报告或者省略重复行
cut # 从每行中删除文本区域
paste # 合并文件文本行
join # 基于某个共享字段来联合两个文件的文本行
comm # 逐行比较两个有序的文件
diff # 逐行比较文件
patch # 给原始文件打补丁
tr # 翻译或删除字符
sed # 用于筛选和转换文本的流编辑器
aspell # 交互式拼写检查器
Part 4 Writing Shell Scripts
一个 shell 脚本就是一个包含一系列命令的文件。shell 读取这个文件,然后执行文件中的所有命令,就好像这些命令已经直接被输入到了命令行中一样。
shell脚本第一行 #!/bin/bash
#!
字符序列是一种特殊的结构,用来告诉操作系统将执行此脚本所用的解释器名字。
if commands; then
commands
[elif commands; then
commands...]
[else
commands]
fi
x=5 # 赋值等号左右无空格
if [ $x=5 ]; then # 注意中括号 以及 中括号空格
echo "X"
else
echo "Y"
fi
command1 && command2
command1 || command2
对于 && 操作符,先执行 command1,如果 command1执行成功后,才会执行 command2。对于 || 操作符,先执行 command1,如果command1 执行失败后,才会执行 command2。
read # 从标准输入读取数值
echo -n "Please enter an integer -> " # -n 会删除结果末尾的换行符
read int
程序访问命令行,位置参数 $0 $1 $2 ...
./test.sh 1 2 3 # $0 ./test.sh ; $1 为1
echo "$1" # 默认$0为指令,$1为第一个参数
echo "$#" # 显示命令行参数个数
echo "$*" # 展开从1开始的位置参数列表
针对最新版的bash for循环格式支持C语言格式
for (( expression1; expression2; expression3 )); do
commands
done
tt=1
while(( $tt<4 )); do
echo "heheda"
let tt++ # let
echo $tt
done
a="foo"
echo "${a}_file" # 变量添加大括号 与普通字符串分割
>> foo_file
bc 高精度计算器语言
quit 结束