Linux - 基本命令
常用基本命令
- w 显示目前登录系统的用户信息
- who 显示目前登录系统的用户信息 whoami
- last 显示近期用户或终端的登录情况 /var/log/wtmp
lastlog 查看所有用户最近一次登录信息 /var/log/lastlog
ctrl+u 清除当前输入的命令
ctrl+z 后台执行命令
df -h 查看系统分区的使用情况
ls [选项] [参数]
-l 显示详细信息
-a 显示所有文件,包括隐藏文件
-d 显示目录属性
-h 人性化显示文件大小
-i 显示inode
- ls > xxx.md 将(ls)命令执行的结果写入文件
mkdir 创建文件夹
mkdir directory
mkdir -p directory : 递归创建
cd 进入目录
cd - 进入上次所在目录
pwd : print working directories
链接ln(link) : ln source_file target_file
- link 硬链接
- link -s 软链接
软链接
,如果原文件和目标文件在同一目录中,可以不写绝对路径;如果不在同一目录,必须写绝对路径。不过建议在创建软链接的时候都使用绝对路径。硬链接
存储的是源文件的inode,源文件如果被删除,硬链接文件依旧可以使用。软链接
存储的是源文件的文件名,源文件换个地方,软链接就不可用了;源文件被删除,软链接也就不可用了;源文件删除,重新创建一个同名文件,此时软链接再次可用,但此时硬链接与软链接内容已经不同,因为源文件是重新创建的,它的inode已经变了,而硬链接还是原来的inode。
文件搜索
locate 文件搜索命令
locate命令搜索的后台数据库: /var/lib/mlocate
默认数据库每天更新一次,可以执行updatedb更新数据库,并且只能根据文件名搜索,按照/etc/updatedb.conf配置文件的规则进行搜索
whereis | which 搜索命令的命令
搜索命令所在的路径以及帮助文档所在的位置 (whereis | whatis | whoami)
同样遵守/etc/updatedb.conf的搜索规则
-b 只查找可执行文件
-m 只查找帮助文档
which 能看到命令的路径,如果命令有别名,并显示别名。
find 文件搜索命令
- find [搜索范围] [搜索条件] : find / -name install.log 根目录下名称为install.log的文件
- find / -iname install.log : -i 不区分大小写
- find / -user root : 根据所有者搜索文件,属于root用户的文件
- find / -nouser : 搜索没有所有者的文件(基本上,没有所有者的文件是垃圾文件)
find /var/log -mtime +10 : 查找10天前修改的文件
- -10 10天内修改的文件
- 10 10天当天修改的文件
- +10 10前修改的文件
- atime(access time) 文件访问时间。即文件读取或执行的时间。
- ctime(change time) 改变文件属性时间,指文件i节点被修改的时间,如通过chomd修改文件属性,就会修改ctime时间。
- mtime(modify time) 修改文件时间。
可以通过stat 文件名 查看文件的atime, ctime, mtime
- find . -size 25k : 按文件大小搜索
- +25k -25k 25k 大于小于等于25k
注:千字节k小写,兆字节M大写
- +25k -25k 25k 大于小于等于25k
- find . -inum 23343 : 按照i节点查找文件
- find /etc -size +20k -a -size -50k : 搜索大小在20-50k之间的文件 (-a and 逻辑与)
- find /etc -size -20k -o -size +50k : 搜索小于20k以及大于50k的文件 (-o or 逻辑或)
- find /etc -size +20k -a -size -50k -exec ls -lh {} \; : 第一个命令搜索到的结果交给后面的命令处理,{} \; 必须带上,语法要求。
grep 字符串搜索命令: 在文件中匹配符合条件的字符串
- grep [选项] 字符串 文件名
-i : 忽略大小写
-v 排除指定字符串 (搜索条件取反搜索)
find 与 grep 的区别
- find 在系统中搜索符合条件的文件名,如果需要匹配,使用通配符匹配,
通配符是完全匹配
。 - grep 在文件中搜索符合条件的字符串,如果需要匹配,使用正则表达式进行匹配,
正则表达式是包含匹配
。
文件/文件夹压缩 .zip .gz .bz2 .tar.gz .tar.bz2
.zip 格式压缩文件
- 压缩文件:zip 压缩文件名 源文件
- 压缩文件夹:zip -r 压缩文件名 源目录
- 解压缩文件/文件夹:unzip 压缩文件名
.gz 格式压缩 : 压缩目录下的子文件
- 不保留源文件压缩文件:gzip 源文件 (压缩为.gz格式的压缩文件,源文件会消失)
- 保留源文件压缩文件:gzip -c 源文件 > 压缩文件 (压缩为.gz格式,源文件保留)
- gzip -r 目录:(压缩目录下的所有子文件,但是不压缩目录本身)
- 解压缩:gzip -d 压缩文件
- 解压缩:gunzip 压缩文件
- gunzip -r 目录:(解压目录中所有的压缩文件)
.bz2 格式 : 不能压缩目录
- 不保留源文件压缩:bzip2 源文件
- 保留源文件压缩:bzip2 -k 源文件
- 解压缩:bzip2 -d 压缩文件 (-k 保留压缩文件)
- 解压缩:bunzip2 压缩文件 (-k 保留压缩文件)
打包成.tar
打包
tar -cvf 打包文件名 源文件 (-c打包 -v显示过程 -f指定打包的文件名)
eg: tar -cvf cangls.tar cangls
然后使用gzip bzip2压缩/解压缩打包文件解包
tar -xvf 打包文件名 (-x解打包)
eg: tar -xvf cangls.tar
.tar.gz 格式
- tar -zcvf 压缩包名.tar.gz 源文件 (-z 压缩为.tar.gz格式)
- tar -zxvf 压缩包名.tar.gz (解压缩)
.tar.bz2 格式
- tar -jcvf 压缩包名.tar.bz2 源文件 (-j压缩为.tar.bz2格式)
- tar -jxvf 压缩包名.tar.bz2 (解压缩)
一些小技巧
- tar -jxvf 压缩包名.tar.bz2 -C /temp/ (-C指定解压到指定目录)
- tar -jcvf /temp/压缩包名.tar.bz2 源文件1 源文件2 (压缩多个文件到指定文件夹)
- tar -ztvf text.tar.gz (-t只查看,不解压缩)
关机和重启
shutdown : 还是比较安全的,会在关机和重启时保存工作状态
-c 取消前一个关机民兵
-h 关机: shutdown -h now
-r 重启: shutdown -r nowshutdown -h now&
其中的&
符号表示:将命令放在后台执行其他关机命令: halt | poweroff | init 0
- 重启命令: reboot | init 6
- 退出登录: logout
系统运行级别
- 0 关机
- 1 单用户
- 2 不完全多用户,不含NFS服务
- 3 完全多用户
- 4 未分配
- 5 图形界面
- 6 重启
查询和自动挂载
- mount 查询系统中已经挂载的
- mount -a 依据配置文件/etc/fstab的内容,自动挂载
挂载命令
- mount [-t 文件系统] [-o 特殊选项] 设备文件名(/hda1) 挂载点(类似windows下的盘符)
- -t 文件系统:加入文件系统类型来指定挂载的类型,可以是ext3, ext4, iso9660等文件系统
- -o 特殊选项:指定挂载的额外选项(这里有个栗子,将某个挂载点特殊选项的exec属性指定为noexec,存储在该目录下的所有文件都不可执行了,报错:权限不够。ps:默认是exec,可执行的。)
- remount 重新挂载
挂载光盘
- 先将光盘插入光驱
- 建立挂载点:mkdir /mnt/cdrom/
- 挂载光盘 :mount -t iso9660 /dev/sr0 /mnt/cdrom
卸载命令
- umount 设备文件名/挂载点 : umount /dev/sro or umount /mnt/cdrom/
系统目录结构
用来保存系统命令的 根(/)目录下的/bin /sbin ; usr/目录下的 /bin /sbin
/bin : 目录下的命令普通用户可以使用
/sbin : 目录下的命令超级用户使用/boot 启动目录
/dev 设备文件
/etc 配置文件目录
/home 普通用户目录
/root 超级用户目录
/lib 函数库
shell
echo 输出命令
echo [选项] [输出内容] : 将指定内容输出到控制台
控制字符 | 作用 |
---|---|
\a | 输出警告音 |
\b | 退格键(向左删除键) |
\n | 换行符 |
\r | 回车符 |
\t | 水平制表符 |
\v | 垂直制表符 |
\0??? | 按照八进制ASCII码表输出字符 |
\x??? | 按照八进制ASCII码表输出字符 |
eg: echo -e “hello\tworld” #> hello world
- 写一个shell脚本 : hello.sh
1 | #!/bin/bash |
- 执行脚本
1 | 1. 将文件权限修改为可执行,然后输入文件路径即可执行 |
查看历史 history
history [选项] [历史命令保存文件] : 历史命令存在 .zsh_history/.bash_history中
- -c 清空历史纪录
-w 将命令写入 .zsh_history/.bash_history文件中
!n : 执行第n条命令(n代表行数)
- !! : 执行上一条命令
- !字符串 : 执行以该字符串开头的命令
输出重定向
| 标准输入 | /dev/stdin | 0 |
| 标准输出 | /dev/stdout | 1 |
| 标准错误输出 | /dev/stderr | 2 |
- 输出正确信息
1 | $ 命令 > 文件 # 覆盖输出 |
- 输出错误信息
1 | $ 命令 2> 文件 # 覆盖输出 |
- 输出正确&错误信息到同一个文件
1 | # 法1 |
- 正确&错误信息分开输出
1 | $ 命令 >>文件1 2>>文件2 |
- 将执行结果直接丢掉
1 | $ ls(命令) &> /dev/null #有时候,执行脚本不需要看执行过程信息,就使用该方法 |
输入重定向
wc [选项] [文件名]
- -c 统计字节数
- -w 统计单词数
- -l 统计行数
1 | # 按ctrl+d退出 |
多命令顺序执行
;
; 命令1; 命令2 ; 多个命令顺行执行,命令之间没有逻辑关系&&
; 命令1 && 命令2 ; 命令1正确执行,命令2才能执行||
; 命令1 || 命令2 ; 命令1不正确执行,命令2才执行
管道符 |
,命令1 | 命令2 : 将命令1执行的结果作为命令2执行的对象
1 | # netstat 显示各种网络相关信息,如网络连接,路由表,接口状态(interface staticstics),masquerade连接,多播成员(Multicast Memberships); |
bash中的其他特殊符号
符号 | 作用 |
---|---|
‘’ | 单引号。在单引号中所有的特殊符号没有特殊含义,仅仅是个符号而已。 |
“” | 双引号。在双引号中特殊符号都没有特殊含义,但是”$”,”`”和”\”是例外,拥有调用变量值,引用命令,转义符的特殊含义。 |
`` | 反引号。反引号扩起来的内容是系统命令,在bash中会先执行它。和$()作用一样。 |
$() | 和反引号作用一样,用来引用系统命令。 |
# | 在shell脚本中,#开头的代表行注释。 |
$ | 用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的值。 |
\ | 转义符。 |
shell变量
自定义变量,环境变量,位置参数变量,预定义变量
自定义变量是局部变量,环境变量是全局变量
- 变量叠加
1 | x=123 #=> echo $x : 123 |
- 变量查看
1 | set [选项] |
- 设置环境变量
1 | export 变量名=变量值 |
- locale
Locale是根据计算机用户所使用的语言,所在国家或者地区,以及当地的文化传统所定义的一个软件运行时的语言环境。
1 | echo $LANG 查看当前语系环境 |
位置参数变量
位置参数变量 | 作用 |
---|---|
$n | n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数用大括号表示${10} |
$* | 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体 |
$@ | 这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待 |
$# | 这个变量代表命令行中所有的参数的个数 |
- 运算demo
1 | # calculate.sh |
1 | # 代码文件 calcul.sh |
预定义变量
预定义变量 | 作用 |
---|---|
$? | 最后一次执行的命令的返回状态。如果变量值为0,上一条命令正确执行;如果非0,则上一条命令执行不正确 |
$$ | 当前晋城的进程号(PID) |
$! | 后台运行的最后一个进程的进程号(PID) |
命令后面跟上
&
符号,是指将该命令放在后台执行。
ps aux 查看进程
接收键盘输入
read [选项] [变量名]
- -p “提示信息”: 在等待read输入时,输出的提示信息
- -t 秒数: read命令会一直等待用户输入,使用此选项可以指定等待时间
- -n 字符数: read命令只接受指定的字符数,就会执行
- -s : 隐藏输入的数据,适用于机密信息的输入,如密码
declare 声明变量类型
declare [+/-] [选项] 变量名
- : 给变量设定类型属性
- : 取消变量的类型属性
- -a : 将变量声明为数组类型
- -i : 将变量声明为整数类型
- -x : 将变量声明为环境变量 (与export命令类似,export默认执行的还是declare -x命令)
- -r : 将变量声明为只读变量 (只要将变量设置为只读的,那就完了=_=||| 不可编辑,不可删除,不可取消变量类型ps除非操作配置文件删除)
- -p : 显示指定变量被声明的类型
- …
1 | a=1 |
声明数组变量
1 | movie[0]=zp |
expr | let 数值运算工具
1 | a=1 |
$((运算符))
- 数值运算$()
- aa=$(date) #将命令运行的结果,赋值给变量
字符串处理
cut [选项] 文件名
- -f 列号:提取第几列
- -d 分隔符:默认是水平制表符
df -h
查看系统分区的使用情况。cut命令不能识别df的不规则空格分隔,所以使用awk查看awk ‘条件1{动作1} 条件2{动作2} …’ 文件名
- awk ‘BEGIN{动作} 条件{动作} …’ 文件名 : 先执行begin的动作
- awk ‘END{动作} 条件{动作} …’ 文件名 : 最后执行end的动作
- awk ‘{print $2 “\t” $4 “\n”}’ readme.txt : 打印readme.txt文件中的第二,四列
-sed [选项] ‘[动作]’ 文件名
- 选项
- -n :一般sed命令会把所有数据都输出到屏幕上,如果加入此选项,只会将经过sed处理的行输出到屏幕上
- -e :允许对输入数据应用多条sed命令编辑
- -i :用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出(源文件会被修改,使用需谨慎)
- 动作
- -a :追加,在当前行后添加一行或多行
- -c :行替换,用c后面的字符串替换原数据行
- -i :插入,在当前行之前插入一行或多行
- -d :删除,删除指定行
- -p :打印,输出指定的行
-s :字符串替换,用一个字符串替换另一个字符串
eg: sed -n ‘2p’ readme.txt : 查看文件第二行(如果没有-n,显示全文)
字符处理
sort [选项] 文件名
- -f 忽略大小写
- -n 以数值型进行排序,默认使用字符串型排序
- -r 反向排序
- -t 指定分隔符,默认是水平制表符
- -k n,m 按照指定的字段范围排序,从n到m
wc [选项] 文件名
- -l 只统计行数
- -w 只统计单词数
- -m 只统计字符数