常用命令

常用命令汇总

命令功能其他
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"