多多练习。。。

stat

查看文件的属性状态信息。

1
2
3
4
5
6
7
8
  File: ‘game.sql’
Size: 5188 Blocks: 16 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 158837 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 1970-01-01 08:00:00.000000000 +0800
Modify: 2019-05-25 21:18:36.000000000 +0800
Change: 2019-05-25 21:21:36.685591248 +0800
Birth: -

时间属性

Access time:最后访问时间,查看文件的内容时,这个时间会改变,使用cat命令查看文件时,可以看出Access time已经变了。

Modify time:最后修改时间,修改文件内容,文件的修改时间会改变,访问时间和状态改变时间也发生变化。

Change time:状态改变时间,修改文件内容,移动文件,或者改变文件属性(权限)等,文件的change time会发生改变。

touch

创建空文件,或者改变文件/文件夹的时间戳属性。

创建空文件

创建一个或多个文件

1
2
3
touch a.txt
touch b.txt c.txt
touch a-{1..20}.txt # 创建了20个名为 a-1.txt 到 a-20.txt 的空文件

修改时间

  • 修改access时间

    • 修改文件访问时间:

      1
      2
      3
      # 将当前时间设置为该文件或目录的访问和修改时间。
      touch -a a.txt #没有a.txt会创建一个
      touch -c a.txt #有a.txt就修改access时间,没有也不会创建
    • 修改目录访问时间:

      1
      2
      # 将当前时间设置为该文件或目录的访问和修改时间。
      touch -m /root/
  • 更改modify时间

    1
    2
    touch -m devops.txt # 修改文件modify时间
    touch -m /dir/ # 修改目录modify时间

将access和modify时间设置为特定的日期和时间

日期和时间格式

1
{CCYY}MMDDhhmm.ss
  • CC – 年份的前两位数字
  • YY – 年份的后两位数字
  • MM – 月份 (01-12)
  • DD – 天 (01-31)
  • hh – 小时 (00-23)
  • mm – 分钟 (00-59)

修改

1
2
3
touch -c -t 202510191820 a.txt # -c 选项没有也不创建新文件

touch -c -d "2010-02-07 20:15:12.000000000 +0530" b.txt

使用参考文件设置时间戳(-r)

touch 命令中,我们可以使用参考文件来设置文件或目录的时间戳。假设我想在 devops.txt 文件上设置与文件 sysadm-20.txt 文件相同的时间戳,touch 命令中使用 -r 选项可以轻松实现。

1
touch -r {参考文件} 真正文件

在符号链接文件上更改访问和修改时间

默认情况下,每当我们尝试使用 touch 命令更改符号链接文件的时间戳时,它只会更改原始文件的时间戳。如果你想更改符号链接文件的时间戳,则可以使用 touch 命令中的 -h 选项来实现。

1
touch -h {符号链接文件}

mkdir

make directory。

参数:-p 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立
好那些尚不存在的目录,即一次可以建立多个目录。

1
mkdir –p test/test1 # 递归建立多个目录

rmdir

删除目录。

参数:-p 当子目录被删除后如果父目录也变成空目录的话,就连带父目录一起删除。

rm

rm -r -i dirname这条命令在删除文件夹的时候,会对每个文件询问是否要删除。

参数:
-r 删除目录及其下面的所有目录/文件
-i 删除线询问
-f 即使文件权限只读(写保护),也直接删除

man

真男人手册!哈哈哈

Man 帮助页通过数字标识符来分成不同类型的内容:man man

  1. 一般用户命令
  2. 系统调用命令(如open、write之类的)
  3. 库函数(如printf、scanf之类的)
  4. 特殊的文件和驱动程序
  5. 文件格式(比如passwd,就会说明这个文件中各个字段的含义)
  6. 游戏和屏保(由各个游戏自己定义)
  7. 杂项(比如environ这种全局变量在这里就有说明)
  8. 系统管理命令和守护进程(这些命令只能由root使用,如ifconfig)

cp

copy。

文件 -> 文件

1
2
cp sourcefile destfile
# 当然,拷贝文件到目录也可以这么做

同时拷贝多个文件 -> 文件夹

1
cp file_1.txt file_2.txt file_3.txt /home/ahoj/test

文件夹 -> 文件夹

1
2
3
4
cp -r srcDir /dest/dir/ # -r 参数,全称 “recursive”
# -r或-R 选项表明递归操作。无论该目录是否为空目录,这个选项都是必要的。
# 需要注意的一件事,你需要移除在目录名尾部的斜杠。否则你会收到类似的错误信息cp: omitting directory‘srcDir/’
# 如果想获取更多的反馈,就使用 -v 参数让执行结果更详细。

只拷贝新文件

1
2
3
cp -r -u -v srcDir /dest/dir
# -r 是“递归”, -u 是“更新”,-v 是“详细”
# 也可以这么连用 -ruv。

创建文件的硬链接,而不是拷贝它们

创建“快捷方式”或者链接到文件,而不是拷贝它们。要做到这一点,可以使用 -l 选项。

1
cp -l file_4.txt /home/aaa/office

创建文件的符号链接

1
cp -s /home/pungki/Documents/file_6.txt file_6.txt

交互模式

-i 选项,拷贝前会问你。

强制拷贝

用了 -f 选项会强制进行拷贝操作。如果目标文件不能打开,可以用 -f 试试。

mv

move,move!

移动文件

1
2
3
mv srcFile /root/Desktop/
mv *.txt /root/Desktop/
mv 1.txt 2.bat 3.sh /root/Desktop/

移动目录

1
mv srcDir/ /root/destDir/

重命名文件或目录

move 到相同的文件夹下即可。

更多参数

  • -v 打印详细信息
  • -i 移动前问你
  • -u 只在源文件比目标文件新时才执行更新
  • -n 不会允许覆盖任何已存在的文件
  • -b 复制时创建备份(避免如果移动错了文件而目标文件已经被新的文件覆盖了)
  • -f 无条件覆盖已经存在的文件

cat

输出行号

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# -n 对所有输出都有行号
➜ C cat -n test.c
1 #include <stdio.h>
2
3 int main(int argc, char const *argv[])
4 {
5 int a = 10;
6 printf("hello vscode\n");
7 return 0;
8 }

# -b 对非空行输出行号
➜ C cat -b test.c
1 #include <stdio.h>

2 int main(int argc, char const *argv[])
3 {
4 int a = 10;
5 printf("hello vscode\n");
6 return 0;
7 }

不输出多行空行

1
cat -s test.cpp # 不输出多行空行

more

-n 对输出的所有行编号
q 退出more

more 是一个老式的、基础的终端分页阅读器,它可以用于打开指定的文件并进行交互式阅读。如果文件的内容太长,在一屏以内无法完整显示,就会逐页显示文件内容。使用回车键或者空格键可以滚动浏览文件的内容,但有一个限制,就是只能够单向滚动。也就是说只能按顺序往下翻页,而不能进行回看。

在有些系统里more是可以按b向前看的,有些more不可以配合管道,有些more阔以。在我的电脑上就都阔以。

less

less 可以打开一个比较大的文件,less 打开大文件效率很高,尤其是几个 G 的文件。
less 打开文件的时候,只把一小部分数据加载到内存中,而其他编辑器都是直接把整个文件都加载。(延时加载/懒加载)

搜索

  • 向下搜索

    输入斜杠(/)之后接着输入需要搜索的内容,按 n 键可以跳转到下一个匹配的字符串,如果需要跳转到上一个匹配的字符串,可以按 N 键。

  • 向上搜索

    输入问号(?)之后接着输入需要搜索的内容。

  • -i 忽略搜索时的大小写

  • -N 显示每行的行号

用默认编辑器打开

v 键,就会将正在阅读的文件在默认编辑器(我的是用vim打开)中打开,然后就可以对文件进行各种编辑操作了。

-n<行数> 显示的行数

tail

-f 循环读取
-n<行数> 显示行数

date

注意哟:

时间:注意闰秒的问题,最好还是用有符号数来表示,因为要涉及到时间的运算。

C 语言中有一组这样的数字:

1
2
3
4
5
6
include <stdint.h>

int8_t
int16_t
int32_t
int64_t / uint64_t

使用:

1
2
3
4
5
➜  ~ date +%F
2019-05-28
➜ ~ date
2019年 5月28日 星期二 09时32分57秒 CST
➜ ~

参数

%H : 小时(00..23)
%M : 分钟(00..59)
%S : 秒(00..61)
%X : 相当于 %H:%M:%S %d : 日 (01..31)
%m : 月份 (01..12)
%Y : 完整年份 (0000..9999) %F : 相当于 %Y-%m-%d

设置时间

1
2
3
4
5
6
date -s # 设置当前时间,只有root权限才能设置,其他只能查看。
date -s 20080523 # 设置成20080523,这样会把具体时间设置成空00:00:00 date -s 01:01:01 //设置具体时间,不会对日期做更改
date -s “01:01:01 2008-05-23′′ # 这样可以设置全部时间
date -s “01:01:01 20080523′′ # 这样可以设置全部时间
date -s “2008-05-23 01:01:01′′ # 这样可以设置全部时间
date -s “20080523 01:01:01′′ # 这样可以设置全部时间

时间戳

时间->时间戳:date +%s

时间戳->时间:date -d@1508749502

Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp)是从1970年1月1日(UTC/GMT的
午夜)开始所经过的秒数,不考虑闰秒。

cal

日历。

-3 显示系统前一个月,当前月,下一个月的月历
-j 显示在当年中的第几天(一年日期按天算,从1月1号算起,默认显示当前月在一年中的天数)
-y 显示当前年份的日历

find

常用选项:-name

1
find -name 1.txt > ~/result.txt

grep

在文件中搜索字符串,将找到的行打印出来。

语法:grep [选项] 搜寻字符串 文件

我常用:ps aux | grep test

-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 ‘搜寻字符串’ 内容的那一行

zip & unzip

将目录或文件压缩成zip格式。

选项:-r 递归处理,将指定目录下的所有文件和子目录一并处理。

1
将test2目录压缩:zip test2.zip test2/* 解压到tmp目录:unzip test2.zip -d /tmp

tar

tar 命令使用介绍

参数:

1
2
3
4
5
6
7
-c :建立一个压缩文件的参数指令(create 的意思);
-x :解开一个压缩文件的参数指令!
-t :查看 tarfile 里面的文件!
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程! -f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
-C : 解压到指定目录

bc

bc命令可以很方便的进行浮点运算。

1
2
3
4
5
6
7
➜  ~ bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
1.1 + 2.2
3.3

uname

uname用来获取电脑和操作系统的相关信息。name可显示linux主机所用的操作系统的版本、硬件的名称等基本信息。

1
2
3
4
5
6
7
➜  ~ uname -r
18.6.0
➜ ~ uname
Darwin
➜ ~ uname -a
Darwin ahoj-MBP.local 18.6.0 Darwin Kernel Version 18.6.0: Thu Apr 25 23:16:27 PDT 2019; root:xnu-4903.261.4~2/RELEASE_X86_64 x86_64
➜ ~

更多学习资料:
在 Linux 下 9 个有用的 touch 命令示例
UNIX 高手的 10 个习惯
教你如何比谷歌搜索更快速有效地利用 man
cp 命令两个高效的用法
Linux cp 命令的15个示例 - 创建文件和目录的副本
tar 命令使用介绍