Linux - 基本命令

发表于:,更新于:,By Sally
大纲
  1. 1. 常用基本命令
    1. 1.1. ls [选项] [参数]
    2. 1.2. mkdir 创建文件夹
    3. 1.3. cd 进入目录
    4. 1.4. pwd : print working directories
    5. 1.5. 链接ln(link) : ln source_file target_file
  2. 2. 文件搜索
    1. 2.1. locate 文件搜索命令
    2. 2.2. whereis | which 搜索命令的命令
    3. 2.3. find 文件搜索命令
    4. 2.4. grep 字符串搜索命令: 在文件中匹配符合条件的字符串
    5. 2.5. find 与 grep 的区别
  3. 3. 文件/文件夹压缩 .zip .gz .bz2 .tar.gz .tar.bz2
    1. 3.1. .zip 格式压缩文件
    2. 3.2. .gz 格式压缩 : 压缩目录下的子文件
    3. 3.3. .bz2 格式 : 不能压缩目录
    4. 3.4. 打包成.tar
    5. 3.5. .tar.gz 格式
    6. 3.6. .tar.bz2 格式
    7. 3.7. 一些小技巧
  4. 4. 关机和重启
    1. 4.1. 系统运行级别
  5. 5. 查询和自动挂载
    1. 5.1. 挂载命令
    2. 5.2. 挂载光盘
    3. 5.3. 卸载命令
  6. 6. 系统目录结构
  7. 7. shell
    1. 7.1. echo 输出命令
    2. 7.2. 查看历史 history
    3. 7.3. 输出重定向
    4. 7.4. 输入重定向
    5. 7.5. 多命令顺序执行
    6. 7.6. bash中的其他特殊符号
    7. 7.7. shell变量
      1. 7.7.1. 位置参数变量
      2. 7.7.2. 预定义变量
      3. 7.7.3. 接收键盘输入
      4. 7.7.4. declare 声明变量类型
      5. 7.7.5. 字符串处理
      6. 7.7.6. 字符处理

常用基本命令

  • 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大写

  • 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 now

  • shutdown -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
2
#!/bin/bash
echo -e "\e[1;33m 我就是爱音乐,别叫我停下来 \e[0m"
  • 执行脚本
1
2
1. 将文件权限修改为可执行,然后输入文件路径即可执行
2. 使用bash hello.sh (上面的例子将文字带颜色输出,我在mac上运行,bash hello.sh 内容原样输出,我用zsh hello.sh 会输出带色的文字)

echo_show

查看历史 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
2
$ 命令 > 文件   # 覆盖输出
$ 命令 >> 文件 # 追加输出
  • 输出错误信息
1
2
$ 命令 2> 文件  # 覆盖输出
$ 命令 2>> 文件 # 追加输出
  • 输出正确&错误信息到同一个文件
1
2
3
4
5
6
7
# 法1
$ 命令 > 文件 2>&1
$ 命令 >> 文件 2>&1

# 法2
$ 命令 &>文件
$ 命令 &>>文件
  • 正确&错误信息分开输出
1
$ 命令 >>文件1 2>>文件2
  • 将执行结果直接丢掉
1
$ ls(命令) &> /dev/null #有时候,执行脚本不需要看执行过程信息,就使用该方法

输入重定向

wc [选项] [文件名]

  • -c 统计字节数
  • -w 统计单词数
  • -l 统计行数
1
2
3
# 按ctrl+d退出
$ wc < 文件名 # 显示文件的统计结果
$ wc << end(标志符) # 统计标志符之间输入的字符

std_in_demo

多命令顺序执行

  • ; ; 命令1; 命令2 ; 多个命令顺行执行,命令之间没有逻辑关系
  • && ; 命令1 && 命令2 ; 命令1正确执行,命令2才能执行
  • || ; 命令1 || 命令2 ; 命令1不正确执行,命令2才执行

管道符 |,命令1 | 命令2 : 将命令1执行的结果作为命令2执行的对象

1
2
3
# netstat 显示各种网络相关信息,如网络连接,路由表,接口状态(interface staticstics),masquerade连接,多播成员(Multicast Memberships);
# ESTABLISHED 过滤已连接状态;
netstat -an | grep 'ESTABLISHED' | wc -l

bash中的其他特殊符号

符号 作用
‘’ 单引号。在单引号中所有的特殊符号没有特殊含义,仅仅是个符号而已。
“” 双引号。在双引号中特殊符号都没有特殊含义,但是”$”,”`”和”\”是例外,拥有调用变量值,引用命令,转义符的特殊含义。
`` 反引号。反引号扩起来的内容是系统命令,在bash中会先执行它。和$()作用一样。
$() 和反引号作用一样,用来引用系统命令。
# 在shell脚本中,#开头的代表行注释。
$ 用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的值。
\ 转义符。

shell变量

自定义变量,环境变量,位置参数变量,预定义变量
自定义变量是局部变量,环境变量是全局变量

  • 变量叠加
1
2
3
x=123 #=> echo $x : 123
x="$x"456 #=> echo $x : 123456
x=${x}789 #=> echo $x : 123456789
  • 变量查看
1
2
3
4
5
6
7
8
set [选项]
-u 如果设定此选项,调用未声明变量时会报错(默认无任何提示)

# 查看环境变量
env

# 删除变量
unset 变量名 eg:unset x

variable_show

  • 设置环境变量
1
2
3
4
export 变量名=变量值
or
变量名=变量值
export 变量名
  • locale

Locale是根据计算机用户所使用的语言,所在国家或者地区,以及当地的文化传统所定义的一个软件运行时的语言环境。

1
2
3
echo $LANG 查看当前语系环境
locale -a | more 查看linux支持的所有语系环境
/etc/sysconfig/i18n 系统默认语系环境

位置参数变量

位置参数变量 作用
$n n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数用大括号表示${10}
$* 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
$@ 这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待
$# 这个变量代表命令行中所有的参数的个数
  • 运算demo
1
2
3
4
5
6
# calculate.sh
#!/bin/bash
sum1=$1
sum2=$2
sum=$(($sum1+$sum2))
echo $sum
1
2
3
4
5
6
7
8
9
10
11
# 代码文件 calcul.sh
echo "\$* 的参数:$*"
echo "\$@ 的参数:$@"
echo "\$# 的参数:$#"

$ ~/calcul.sh 11 22 33 44

# 以下是输出
$* 的参数:11 22 33 44
$@ 的参数:11 22 33 44
$# 的参数:4

预定义变量

预定义变量 作用
$? 最后一次执行的命令的返回状态。如果变量值为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
2
3
4
5
6
7
8
9
a=1
b=2
c=$a+$b
echo $c #=> 1+2

a=1
b=2
declare -i c=$a+$b
echo $c #=> 3

声明数组变量

1
2
3
4
5
6
7
movie[0]=zp
movie[1]=tp
declare -a movie[2]=live

echo ${movie} #=> 默认查看数组第一个值
echo ${movie[2]} #=> 查看指定下标的值
echo ${movie[*]} #=> 查看数组中所有的值

expr | let 数值运算工具

1
2
3
4
a=1
b=2
c=$(expr $a + $b) # 注意+两边的空格,不能省略;不带空格,就是字符串拼接
echo $c #=> 3

$((运算符)) - 数值运算
$() - 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 只统计字符数