linux eof tmp目录,Linux基础知识--3.Linux目录和文件相关命令和Linux基础特性2

Linux基础知识--3.Linux目录和文件相关命令和Linux基础特性(2)

Linux中有许多基本操作命令,一些基本的操作命令在Linux后期学习中发挥很大的作用,因此能熟练的理解,掌握和应用这些基本的命令是后期学习的关键。在这根据命令的使用情况进行以下分类:

1.目录管理命令;

2.文本文件查看命令;

3.文件的时间戳管理工具;

4.文件管理命令;

5.文本处理工具;

6.系统管理命令;

在将上述基本命令讲述完之后,再来看看Linux基础特性(2)。Linux基础特性将涉及到命令别名的设置、字符通配、快捷键等。接下来详细的介绍这些内容;(自己理解,大神勿喷)

一.基本命令:

1.目录管理命令:

Linux的目录结构是树状目录,目录有相对目录和绝对目录。

linux的绝对目录是从/目录开始写起,到当前目录的全称,利用pwd命令就可以查看当前目录的绝对目录

linux的相对目录是相对于目前工作目录的路径。

其中有一些特殊目录如下:

.表示当前目录

..表示上一级目录

~表示当前登录用户的家目录

cd命令:切换目录命令

pwd命令:显示当前目录

tree命令:列出目录的垂直结构:

常用选项:

-d:只显示出目录,不显示目录下的文件

-L #:指定显示出的层级数

-P pattern:显示出pattern匹配到的内容

目录的创建命令:mkdir

命令格式:

mkdir [OPTION]... DIRECTORY...

常用选项:

-p:创建目录时如果父目录不存在,则连父目录一起创建

-v:详细显示创建目录的过程

eg:# mkdir -pv  /tmp/{kk,zz}/{a,c}

mkdir: created directory `/tmp/kk'

mkdir: created directory `/tmp/kk/a'

mkdir: created directory `/tmp/kk/c'

mkdir: created directory `/tmp/zz'

mkdir: created directory `/tmp/zz/a'

mkdir: created directory `/tmp/zz/c'

-m MODE:创建目录时,指定所创建目录的权限

删除空目录:rmdir(注意:删除空目录)

命令格式:

rmdir [OPTION]... DIRECTORY...

常用选项:

-p:连同上一级的空目录一起删除:

-v:显示删除过程;rmdir -pv /etc/kk/{a,c}

rmdir: removing directory, `/tmp/kk/a'

rmdir: removing directory, `/tmp/kk'

rmdir: failed to remove directory `/tmp/kk': Directory not empty

rmdir: removing directory, `/tmp/kk/c'

rmdir: removing directory, `/tmp/kk'

rmdir: removing directory, `/tmp'

rmdir: failed to remove directory `/tmp': Directory not empty

也可以用命令rm -rf DIRECTORY 删除目录,即使不是目录不是空目录也会删除。但千万不要执行

rm -rf /* 这个命令,我想学习Linux的同学都知道这是什么意思!!

关于执行文件路径的变量:$PATH

用root用户的身份查询$PATH 路径结果:# echo $PATH

/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bi

n:/root/bin

PATH变量的内容是由一堆目录所组成的,每个目录中间用冒号来隔开,每个目录是由顺序之分的

2.文本文件查看类命令:

文本文件查看类涉及的命令有:cat,tac,more,less,tail,head

cat:从第一行显示文件内容

常用选项:

-n:打印出行号

tac:从最后一行开始显示文件内容

more:成页显示文件内容

在more打开一个文件后,会有一些快捷翻页按键:

1.空格键:向下翻一页

2.Enter键:向下滚动一行

3.b:向前翻一页

4./string:代表在more显示的内容中,向下显示string这个关键字

5.q:退出more

less:与more类似

less的用法比more更有弹性,其中man手册中的操作方法就是利用less命令,也有一些快捷键:

1.空格,Ctrl+V,Ctrl+f,Ctrl+F:向文件尾部翻屏

2.b Ctrl+B:向文件首部翻屏

3.d Ctrl+D:向文件尾部翻半屏

4.u Ctrl+U:向文件首部翻半屏

5.Enter Ctrl+N e j  Ctrl+E Ctrl+J:向文件尾部翻一行

6.y k Ctrl+y Ctrl+P:向文件首部翻一行

7.q:退出

8.#:跳转至#行

9.G到行尾,1G到行首

等。详细的选项查看man手册使用方法。

head:默认查看文件的前10行:

命令格式:

head [OPTION]... FILE...

常用选项:

-c #:查看文件的前#个字节

-n #:查看文件的前#行

实例:#head -n 5 /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

tail:默认查看文件的后10行:

命令格式:

tail [OPTION]... FILE...

常用选项:

-c #:查看文件的后#个字节

-n #:查看文件的后#行

-f:一直查看文件新追加的内容:例如查看日志文件。按Ctrl+c退出

实例:# tail -n 5 /var/log/messages

Aug 21 23:27:24 localhost bluetoothd[1542]: HCI dev 0 up

Aug 21 23:27:24 localhost bluetoothd[1542]: Starting security manager 0

Aug 21 23:27:24 localhost bluetoothd[1542]: Parsing /etc/bluetooth/serial

.conf failed:

No such file or directory

Aug 21 23:27:24 localhost bluetoothd[1542]: ioctl(HCIUNBLOCKADDR): Invali

d argument (22)

Aug 21 23:27:24 localhost bluetoothd[1542]: Adapter /org/bluez/1528/hci0

has been enabled

3.文件的时间戳管理工具:

每个文件在linux下面都会记录三个主要修改时间:

access time(atime):最近文件访问时间,读取文件的内容时,此时间就会发生修改,比如使用cat查看文件内容时。

modification time(mtime):当文的内容更改时,就会更新这个时间,而不是文件的属性或权限。

change time(ctime):最近文件改变时间,改变文件元数据,像文件的权限与属性被更改了,这个时间见就会发生变化。

使用touch命令来修改时间戳或者创建一个不存在的文件:

命令格式:

touch [OPTION]... FILE...

常用选项:

-a:仅修改访问时间(atime)

-c:修改文件的时间,假如文件不存在则不创建文件。

-m:修改mtime

-d:使用指定的日期时间,而非现在的时间

当我们去用命令cat 查看一个文件内容时,可用命令stat + filename 查看文件的access time 发生了变化同理,当我们用vim打开一文件内容并做相应的修改,则mtime也会发生改变,ctime和access也会随之变化,当对一个文件进行修改权限和属性时,文件的ctime会发生变化。如以下实例:

有一个文件a.txt 三种初始时间戳为:# stat a.txt

File: `a.txt'

Size: 49        Blocks: 8          IO Block: 4096

regular file

Device: fd00h/64768dInode: 262164      Links: 1

Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (

0/  root)

Access: 2015-08-18 23:28:19.598932488 +0800

Modify: 2015-08-18 23:28:04.483931823 +0800

Change: 2015-08-18 23:28:04.486931725 +0800

我们使用命令cat来查看文件内容如:cat a.txt。然后使用命令stat来查看a.txt的时间戳# stat a.txt   (在这只给出了时间戳信息)

Access: 2015-08-22 08:53:49.724189593 +0800

Modify: 2015-08-18 23:28:04.483931823 +0800

Change: 2015-08-18 23:28:04.486931725 +0800

会发现只有Access的时间发生了改变,其他没有发生变化。我们在修改文件的内容,来查看修改之后时间戳的变化:# echo hello" > a.txt

# stat a.txt

Access: 2015-08-22 08:53:49.724189593 +0800

Modify: 2015-08-22 08:59:44.778186361 +0800

Change: 2015-08-22 08:59:44.778186361 +0800

会发现Modify时间发生改变,Change也发生改变。而atime没有发生改变,是因为我们没有打开查看文件,只是通过命令echo向文件追加内容。假如我们使用vim打开文件并做相应的修改,则三种时间都会发生改变我们再用命令chmod修改文件的权限,查看文件a.txt的ctime是否改变:# chmod +x a.txt

# stat a.txt

Access: 2015-08-22 09:00:25.013189719 +0800

Modify: 2015-08-22 09:00:25.013189719 +0800

Change: 2015-08-22 09:09:33.291184015 +0800

命令执行后会发现文件a.txt的ctime发生了改变。

4.文件管理命令:

文件管理命令涉及到文件的复制、粘贴和删除,分别是cp、mv、rm命令

1.cp命令:

命令使用格式:

cp [OPTION]... [-T] SOURCE DEST

cp [OPTION]... SOURCE... DIRECTORY

cp [OPTION]... -t DIRECTORY SOURCE...

(1)cp SOURCE DESR

如果目标文件不存在,将会新建DEST,并将SRC中的内容填充至DEST中

如果目标文件存在:

如果DEST是文件:将SOURCE中的内容覆盖至DEST中,为了数据的安全此时

建议使用-i选项

如果DEST是目录:在DEST下新建与源文件同名的文件,并将SOURCE中的内容

填充新的文件中

(2)cp SOURCE...  DEST

如果SOURCE为多个文件:则DEST必须存在且为目录。其他情形均会出错。

(3)cp SOURCE DEST

SOURCE 是目录:此时要用-r选项:

如果DEST不存在:则创建指定目录,复制SRC目录中的所有文件至DEST中;

如果DEST不存在;

如果是DEST是文件,报错

如果DEST是目录:直接把SOURCE复制到DEST中.

常用选项:

-i:交互模式,提示覆盖时会有所提示。

-f:强制复制

-r/-R:递归复制目录及文件

-d: --no-dereference --preserve=links复制符号连接

-a/-dr|R:--preserve=all 递归复制并保存源文键的相关属性

-l:对源文件建立硬链接,而非复制源文件

-s:对源文键建立软连接,而非复制源文件

实例:# cp -r /etc/sysconfig/network-scripts/ /tmp/network/

[root@localhost etc]# ls -l /tmp/network/

total 204

-rw-r--r-- 1 root root   158 Aug 22 10:12 ifcfg-eth1

-rw-r--r-- 1 root root   254 Aug 22 10:12 ifcfg-lo

lrwxrwxrwx 1 root root    20 Aug 22 10:12 ifdown -> ../../../sbin/ifdown

-rwxr-xr-x 1 root root   627 Aug 22 10:12 ifdown-bnep

-rwxr-xr-x 1 root root  5511 Aug 22 10:12 ifdown-eth

-rwxr-xr-x 1 root root   781 Aug 22 10:12 ifdown-ippp

-rwxr-xr-x 1 root root  4168 Aug 22 10:12 ifdown-ipv6

[root@localhost ~]# cp -s a.txt c.rlink

lrwxrwxrwx  1 root root     5 Aug 22 10:08 c.rlink -> a.txt

[root@localhost ~]# cp -l a.txt c.link

[root@localhost ~]# ll

-rw-r--r--  1 root root    12 Aug 22 10:05 c.link

5.文本处理命令:

文本处理命令有wc、cut、sort、uniq

wc命令:wc - print newline, word, and byte counts for each file

命令格式:

wc [OPTION]... [FILE]...

常用选项:

-l:显示行数

-w:显示单词数

-c:显示字符数

sort命令:对文件内容进行排序

命令格式:

sort [OPTION]... [FILE]...

常用选项:

-r:逆序排列

-n:按数值大小排序

-f:忽略字符大小写

-k#:以指定字段为标准进行排序

-t#:指定分隔符

-u:uniq:排序后去重。相同的只显示一次

cut命令:文本切割命令

命令格式:

cut OPTION... [FILE]...

常用选项:

-d:指定分隔符。默认为空格

-f#:选定定第#字段

使用格式为:

-f#:

-f#,#,..:离线的多个字段

-f#-#:连续多个字段

--output-delimiter=STRING:选定自己指定的分隔符

eg:cut -d: -f1,7 /etc/passwd --output-delimiter="@"

root@/bin/bash

bin@/sbin/nologin

daemon@/sbin/nologin

uniq命令

注意:连续且完全相同方为重复:

常用选项:

-c:显示每行重复的次数

-d:只显示重复的行

-u:只显示不曾重复的行

二.Linux基础特性二:

1.命令别名(alias)

alias:显示当前shell进程所有可用的命令别名

定义别名:

alias NAME='VALUE'

在命令模式下定义的别名,仅对当前shell进程有效, 要想永远有效需要修改配置文件

对当前用户有效:~/.bashrc

对多有用户有效:/etc/bashrc

然后重新读取配置文件,就会立即生效:source ~/.bashrc

撤销别名:

unalias name

如果在没有撤销别名时,要执行原命令用:/COMMAND

2.glob:字符通配:

man 7 glob

bash 中用于实现文件名通配的通配符有:

*、?、[]

*:任意长度的任意字符

?:任意单个字符

[]:匹配指定范围内的任意单个字符

[^]:匹配指定范围之外的字符

专用字符集合:

[:digit:]:任意数字,相当于0-9

[:lower:]:任意小写字母

[:upper:]:任意大写字母

[:alpha:]:任意大小写字母

[:alnum:]:任意数字或字母

[:space:]:空格字符

[:punct:]:标点符号

练习:

1.显示/var目录下多有l开头,以一个小写字母结尾,中间出现至少一位数字的文件或目录

ls -d /var/l*[0-9]*[[:lower:]]

2.显示/etc/目录下,以任意一位数字开头,且以非数字结尾的文件或目录

ls -d /etc/[0-9]*[^[:digit:]]

3.显示/etc/目录下,以非字母开头,后面跟了一个字母及其其他任意长度任意字符的文件或目录

ls -d /etc/[^[:alpha:]][[:alpha:]]*

4.复制/etc/目录下,所有以m开头,以非数字结尾的文件或目录至/tmp/mageedu目录中

cp -a /etc/m*[^[:digit:]] /etc/mageedu

5.复制/etc/目录下,所有以.d结尾的文件或目录至/tmp/mageedu目录中;

cp -a /etc/*.d  /tmp/magedu.com

6.复制/etc/目录下,所有以.conf结尾的文件,且m,n,r,p开头的文件或目录复制到/tmp/mageedu

cp -a /etc/[mnrp]*.conf /tmp/mageedu.com

3.bash的快捷键:

Ctrl+l:清屏:相当于命令clear

Ctrl+a:跳转到命令行的开始处

Ctrl+e:跳转到命令行的结尾处

Ctrl+u:删除命令行首至光标所在处的所有内容

Ctrl+k:删除光标所在处至命令行尾的所有内容

4.bash的I/O重定向和管道

程序是由指令和数据组成:程序执行时需要读入数据和程序执行后把数据输出

数据的输入和输出一般是从键盘输入数据,在屏幕上输出数据

读入数据:Input,输出数据:Output

打开一个文件都有一个fd:file descriptor:内核来访文件。文件描述符是非负数。打开现存文件或新文件时,内核会返回一个文件描述符。读取文件也需要使用文件描述符来指定待读写的文件。

标准输入:0

标准输出:1

标准错误输出:2

I/O重定向:就是改变标注输入和输出的位置。

1.输出重定向:COMMAND > NEW_POSITON  COMMAND >> NEW_POS

>:覆盖重定向,目标文件中的原有内容会被清楚

>>:追加重定向,新内容将会追加至目标文件尾部

set -C:禁止将内容覆盖输出至已有文件中。

强制覆盖:>|

set +C:取消上述操作

2>:覆盖重定向错误输出数据流:

2>>:追加重定向错误输出数据流

标准输出和错误输出各自定向至不同的位置:

COMMAD > /path/to/file.out 2> /path/to/error.out

将标注输出和错误输出至同一个文件中:(有两种方法:)

&>:覆盖重定向

&>>:追加重定向

1.COMMAND &> /path/to/file.out

2.COMMAND > /path/to/file.out 2>&1

2.输入重定向:<

实例:

cat << EOF

cat > /tmp/shell << EOF

3.管道|:把上一个命令的执行结果当做下一个命令的执行参数

tr命令:转换或删除字符:

cat a.txt | tr 'a-z' 'A-Z'

tee命令:

tee [option].. [file]..

把要内容显示在屏幕上又保存到文件中

# echo $PATH  | tr 'a-z' 'A-Z' | tee /tmp/path

实例:

1.# head -n 5 /etc/passwd | tr 'a-z' 'A-Z'  > /tmp/passed.out

2.# who | tail -n 2 | tr 'a-z' 'A-Z' > /tmp/who.out

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过 ifstream 和 ofstream 两个类来实现文件复制。具体实现步骤如下: 1. 打开原文件和目标文件: ```c++ ifstream in("from.txt", ios::binary); // 打开原文件,以二进制方式读取 ofstream out("to.txt", ios::binary); // 打开目标文件,以二进制方式写入 ``` 2. 判断文件是否打开成功: ```c++ if (!in.is_open() || !out.is_open()) { cout << "文件打开失败!" << endl; return false; } ``` 3. 读取原文件内容并写入目标文件: ```c++ char buffer[1024]; // 缓冲区 int length = 0; // 读取的实际字节数 while (!in.eof()) { // 当未到达文件末尾时循环读取 in.read(buffer, sizeof(buffer)); // 读取数据到缓冲区 length = in.gcount(); // 获取实际读取的字节数 out.write(buffer, length); // 将缓冲区的数据写入目标文件 } ``` 4. 关闭文件: ```c++ in.close(); out.close(); ``` 完整代码如下: ```c++ #include <iostream> #include <fstream> using namespace std; bool copyFile(string sourceFile, string targetFile) { ifstream in(sourceFile, ios::binary); // 打开原文件,以二进制方式读取 ofstream out(targetFile, ios::binary); // 打开目标文件,以二进制方式写入 if (!in.is_open() || !out.is_open()) { cout << "文件打开失败!" << endl; return false; } char buffer[1024]; // 缓冲区 int length = 0; // 读取的实际字节数 while (!in.eof()) { // 当未到达文件末尾时循环读取 in.read(buffer, sizeof(buffer)); // 读取数据到缓冲区 length = in.gcount(); // 获取实际读取的字节数 out.write(buffer, length); // 将缓冲区的数据写入目标文件 } in.close(); out.close(); return true; } int main() { string sourceFile = "from.txt"; string targetFile = "to.txt"; if (copyFile(sourceFile, targetFile)) { cout << "文件复制成功!" << endl; } return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值