常用命令

常用命令汇总

命令 功能 其他
pwd 打印当前路径
cd 切换路径
mkdir 创建文件夹
rmdir 删除文件夹
ls 列出目录内容 ls -a(显示隐藏文件);ls -l(显示详细信息)
cp 复制 cp 1.txt 12.txt; cp -frd
rm 删除 rm -rf
cat 打印文件内容
mv 移动文件/重命名
touch 修改文件时间/创建空文件
find 按照文件名查找
grep 按照文件内容名查找
clear 清屏
sudo 临时切换 root 用户
ifconfig 查看网/修改络信息
reboot 重启系统
poweroff 关机
man 打开帮助信息
sync 数据同步写入磁盘
du 查看文件大小
df 磁盘空间检测
ps 查看当前进程
top 查看进程实时运行状态
file 查看文件类型

文件常用操作

命令 功能 其他
pwd 打印当前路径
cd 切换路径
mkdir 创建文件夹
rmdir 删除文件夹
ls 列出目录内容 ls -a(显示隐藏文件);ls -l(显示详细信息)
cp 复制 cp 1.txt 12.txt; cp -frd
rm 删除 rm -rf
cat 打印文件内容
mv 移动文件/重命名
touch 修改文件时间/创建空文件
tar 压缩/解压

mv

1
2
3
4
5
mv file.txt /home/user/Documents/
mv file.txt /home/user/Documents/newfile.txt
mv file1.txt file2.txt /home/user/Documents/
# 目标路径中已经存在同名文件,`mv` 会直接覆盖它。如果需要提示,可以加上 `-i` 选项:
mv -i file.txt /home/user/Documents/

文件查找

命令 功能
find 按照文件名查找
grep 按照文件内容名查找

find

1
2
3
find -name 1.txt
find abc -name 1.txt
find abc -name "*2.txt"

grep

1
2
3
4
grep "abc" *
grep "abc" * -n # -n 显示 "abc" 所在的行
grep "abc" * -nw # -w 整词查找
grep "abc" * -nwr # -r 递归查找

压缩命令

命令 功能
gzip
bzip2
tar

压缩命令

1
2
3
4
5
6
dd if=/dev/zero of=test bs=1024 count=1024
gzip -k test # -k 保留之前的文件
bzip2 -k test
tar czf test.tar.gz test # -c 创建压缩包,-z 使用 gzip, -f 表示文件,后面接着一个文件名
tar cjf test.tar.bz2 test # -j 使用 bzip2
tar cjf abc.tar.bz2 abc # 压缩文件夹

解压命令**

1
2
3
4
5
gzip -dk test.gz # -k 保留之前的文件
bzip2 -dk test.bz2
tar xzf test.tar.gz # -x 解压,-z 使用 gzip, -f 表示文件,后面接着一个文件名
tar xjf test.tar.bz2 # -j 使用 bzip2
tar xjf abc.tar.bz2 -C temp # 解压到指定文件夹

Vi 编辑器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
gedit 1.txt
vi 1.txt
vi 1.txt +1

# vi 1.txt 进入编辑模型
a 光标前插入
i 光标后插入
ese 退出
x 删除
u 撤销删除
dw 删除一个单词 光标在首字母前输入 dw
D 删除光标之后的所有内容
dd 删除光标所在的1行
4dd 删除光标所在的后4行
o 在当前行添加新的一行


# :进入命令行模型
:wq 保存退出
:q! 不保存退出
:set number 显示行号

# 快捷键
G 跳到结尾
:100 跳到100行
ctrl + f 向前翻页
ctrl + b 向后翻页

# 复制粘贴
yy 复制
p 粘贴
3yy 复制三行

# 查找替换
/abc 按 n 查找下一个
:%s/abc/ABC/g 替换
:%s/abc/ABC/gc 替换时加确认

用户与组

1
2
3
4
5
6
7
8
9
adduser --help
sudo adduser xxh # 创建用户
finger xxh # 查找用户
sudo passwd xxh # 修改用户密码
sudo deluser xxh # 删除用户

sudo addgroup xxh_group # 添加组
groups xxh_group # 查看组内用户
sudo delgroup xxh_group

文件权限管理

  • r 可读文件
  • w 可写文件
  • x 可执行文件
  • -rw-rw-r-- 本用户-组内其他用户-其他组用户的权限

修改文件权限

rwx 每个权限激活为 1 ,二进制表示 111,十进制表示为 7

1
chmod 664 hello

修改文件所属的用户

1
2
3
sudo chown root hello # 修改用户
sudo chown .root hello # 修改用户组
sudo chown root.root hello # 修改用户和用户组

链接文件

  • 符号链接
    • 符号链接需要使用绝对路径
    • 原文件删除后符号链接不能使用
  • 硬链接
    • 只有硬链接的文件全都删除才算删除该文件
    • 修改硬链接的随意一个文件,其他文件都被修改
    • 硬链接不能跨文件系统
1
2
3
ln -s /home/book/hello ./abc/hello1 # 符号链接
cp -d ./hello ./abc/hello1
ln hello hello1 # 硬链接

Makefile与make

Makefile 文件是让 gcc 编译工具以一定的规则来进行编译文件

  • gcc -c 只编译文件,不产生链接
  • gcc -o 指定链接的输出文件名,可以生成可执行文件,也可以指定目标文件名
1
2
3
4
5
# 例子
gcc -c main.c # 生成 mian.o
gcc -c input.c # 生成 input.o
gcc -c add.c # 生成 add.o
gcc mian.o input.o add.o -o main

main 需要 main.o input.o add.o,都有则执行下一句,gcc main.o input.o add.o -o main,没有的话找下面有 main.o 的地方,生成 main.o,以此类推。当 input.cinput.o 要新时,会重新编译 input.c

  • makefile01

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    main: main.o input.o add.o 
    gcc main.o input.o add.o -o main
    main.o: main.c
    gcc -c main.c
    input.o: input.c
    gcc -c input.c
    add.o: add.c
    gcc -c add.c
    clear:
    rm *.o
    rm main

  • makefile02

    1
    2
    3
    4
    5
    6
    7
    8
    object = main.o input.o add.o 
    main: $(object)
    gcc -o $(object)
    %.o: %.c
    gcc -c $<
    clear:
    rm *.o
    rm main

  • makefile03

    1
    2
    3
    4
    5
    6
    7
    8
    9
    object = main.o input.o add.o 
    main: $(object)
    gcc -o $(object)
    %.o: %.c
    gcc -c $<
    .PHONY:clear
    clean:
    rm *.o
    rm main

  • makefile04

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    # 对象文件列表
    object := main.o input.o add.o

    # 生成可执行文件
    main: $(object)
    gcc -o $@ $(object)

    # 生成依赖文件列表
    dep_files := $(foreach f, $(object), .$(f).d) # foreach 循环生成 .main.o.d
    dep_files := $(wildcard $(dep_files)) # wildcard 把存在的文件列出来

    # 如果有依赖文件,包含它们
    ifneq ($(dep_files),)
    include $(dep_files)
    endif

    # 编译规则,生成 .o 和 .d 文件
    %.o: %.c
    gcc -Wp,-MD,.$@.d -c $< -o $@

    # 清理
    .PHONY: clean
    clean:
    rm *.o
    rm .*.d
    rm main

  • 执行 Makefile 文件,输入以下代码

    1
    2
    make Makefilr
    make

Makefile 语法

  • 变量与引用变量

    1
    2
    object = main.o input.o add.o 
    main: $(object)

  • 将变量的最新值进行赋值给其他变量

    1
    2
    3
    name = xxh
    newname = $(name) # newname = xxh1230
    name = xxh1230

  • :=

    1
    2
    3
    name = xxh
    newname := $(name) # newname = xxh
    name = xxh1230

  • ?= 若变量之前没有赋值,则赋=后的值

    1
    newname ?= xxh1230 # newname = xxh1230

  • % 通配符,相当于正则表达式里面的 * ,

  • $@, $<, $^ 自动化变量

    • $@ 目标集
    • $^ 所有的依赖对象集
    • $< 依赖对象集中的第一个

    1
    2
    3
    4
    5
    6
    # main : main.o func1.o func2.o
    # $@ = main
    # $^ = main.o func1.o func2.o
    # $< = main.o
    %.o: %.c
    gcc -c $<

  • .PHONY:clear 声明伪目标,防止文件夹里面有同名的文件导致程序没有执行

    1
    2
    3
    .PHONY:clear
    rm *.o
    rm main

  • $(foreach <var>;,<list>;,<text>;) 函数

    1
    2
    3
    object := main.o input.o add.o 
    # 判断是否存在依赖文件
    dep_flies := $(foreach f, $(object), .$(f).d) # foreach 循环生成 .main.o.d

  • $(wildcard pattern) 函数

    1
    2
    dep_flies := $(foreach f, $(object), .$(f).d)
    dep_flies := $(wilcard, $(dep_flies)) # pattern 把存在的文件列出来

Automake 的用法

shell

  • 简单的shell

    1
    2
    #!/bin/bash
    echo "hello world"

  • 定义变量

    1
    2
    3
    4
    #!/bin/bash
    echo "please input name"
    read name
    echo "your name:" $name

  • 定义双变量

    1
    2
    3
    #!/bin/bash
    read -p "please input your name and age" name age
    echo "your name: $name, your age: $age"

  • 变量运算

    1
    2
    3
    4
    5
    6
    #!/bin/bash
    echo "please input two int number"
    read -p "first number:" x1
    read -p "second number:" x2
    y=$(($x1+$x2))
    echo "$x1 + $x2 = $y"

  • test 与 && 与 ||

    • test -e 检测文件是否存在
    • a && b a 成立则执行 b
    • a || b a 不成立则执行 b

    1
    2
    3
    4
    #!/bin/bash
    echo "please input file name"
    read -p "file name:" name
    test -e $name && echo "$name exit" || echo "$name not exit" #

    1
    2
    3
    4
    5
    #!/bin/bash
    echo "please input two string"
    read -p "file string:" str_1
    read -p "second string:" str_2
    test $str_1 == $str_2 && echo "$str_1=$str_2" || echo "$str_1!=$str_2" # == 两边有空格

  • [] 判断符

    1
    2
    3
    4
    5
    #!/bin/bash
    echo "please input two string"
    read -p "file string:" str_1
    read -p "second string:" str_2
    [ "$str_1" == "$str_2" ] && echo "$str_1=$str_2" || echo "$str_1!=$str_2" # 靠近 [] 两边有空格

  • 默认变量

    • $0 - $n $0表示 本身命令 $1 - $n 表示传入的参数
    • $# 表示最后一个参数的序号
    • $@ 表示 $1 - $n 所有传入的参数

    1
    2
    3
    4
    5
    6
    #!/bin/bash
    echo "file name" $0
    echo "total param num" $#
    echo "first param num" $1
    echo "second param num" $2
    echo "whole param num" $@

  • 条件判断 if then fi

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/bin/bash
    read -p "please input [y/n]" val
    if [ $val == "y" ] || [ $val == "Y" ]; then
    echo "you input is y"
    exit 0
    fi
    if [ $val == "n" ] || [ $val == "N" ]; then
    echo "you input is n"
    exit 0
    fi

  • 条件判断 if then else fi

    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/bash
    read -p "please input [y/n]" val
    if [ $val == "y" ] || [ $val == "Y" ]; then
    echo "you input is y"
    exit 0
    else
    echo "you input is $val"
    exit 0
    fi

  • 条件判断 if then elif then else fi

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/bin/bash
    read -p "please input [y/n]" val
    if [ $val == "y" ] || [ $val == "Y" ]; then
    echo "you input is y"
    exit 0
    elif [ $val == "n" ] || [ $val == "N" ]; then
    echo "you input is n"
    exit 0
    else
    echo "you input can't identify"
    fi

  • case

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/bin/bash
    case $1 in
    "a")
    echo "you input is a"
    ;;
    "b")
    echo "you input is b"
    ;;
    *)
    echo "you input is $1"
    ;;
    esac

  • 函数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #!/bin/bash
    function help(){
    echo "this is help cmd"
    }
    function close(){
    echo "this is close cmd"
    }
    case $1 in
    "-h")
    help
    ;;
    "-c")
    close
    ;;
    esac

  • 函数传参

    1
    2
    3
    4
    5
    6
    #!/bin/bash
    print(){
    echo "param 1: $1"
    echo "param 2: $2"
    }
    print a b

  • while do doneuntil do done

    1
    2
    3
    4
    5
    6
    #!/bin/bash
    while [ "$val" != "close" ] # 匹配多个字符串需要加""
    do
    read -p "please input string:" val
    done
    echo "stop while!!"

  • for do done

    1
    2
    3
    4
    5
    #!/bin/bash
    for name in xxh1 xxh2 xxh3
    do
    echo "your name: $name"
    done

    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/bash
    read -p "please input count:" val
    total=0
    for ((i=0; i<=$val; i++))
    do
    total=$(($i+$total))
    done
    echo "1+2+...+$val=$total"