我在阿里云学习Linux,下面是我的学习笔记:
区不区分大小写和文件系统有关,和操作系统无关。标准的Linux文件系统(如ext4),对大小写敏感。
文件有两个类型的数据:
元数据 metadata (文件属性)
数据 data (文件数据)
文件名filename最多255字节
touch filename
建立新文件filename
Linux文件类型:
(不完全固定,可以根据后缀改变,)
蓝色:目录 绿色:可执行文件
红色:压缩文件
浅蓝色:链接文件(快捷方式)
灰色:其他文件
- 普通文件
d 目录文件
b 块设备
c 字符设备
l 符号链接文件
p 管道文件pipe
s 套接字文件socket
pwd
显示工作目录
pwd -P
显示真实路径(对于软链接,即快捷方式)
cd -P
前往真实路径(对于软链接,即快捷方式)
cd ~homename
去到某人的家目录
cd -
回到刚刚来的目录(因为系统里面有一个变量存储了刚刚来的目录。echo $OLDPWD
)
basename
取出基名
dirname
取出目录名
ls -r
反向排序
ls -S
按文件大小排序,从大到小
ls -Sr
从小到大排序
ls -t
按文件修改时间排序
ls -X
按文件后缀排序
ls ~-
查看刚才的目录文件
man 7 glob
查看通配符
[:lower:]
== a-z
(小写)
[[:lower:]]
== [a-z]
(小写)
ls -I pattern
忽略符合pattern的文件
ls -.[^.]* -d / ls -aI "[^.]*"
查看当前目录隐藏文件
关防火墙的命令:
centos7
systemctl stop firewalld (关掉)
systemctl disable firewalld(开机不启动)
centos6
service iptables stop (关掉)
chkconfig iptables off (开机不启动)
touch filename
对于已有文件file,touch可以用来刷新文件时间戳(atime,ctime,mtime)
touch -c filename
如果file文件不存在,则不创建
cp的使用:
cp source dest
把source源文件复制成dest文件,例如:
cp /etc/fstab /data/fstab.bak
cp source... dir
把多个源文件复制到一个文件夹dir里面,例如:
cp /etc/fstab /etc/profile /root/anaconda-ks.cfg .
(.是指当前文件夹)
cp -t dest source
和上一个命令功能想同
cp filename
把已经存在的文件覆盖
cp filename -f
把已经存在的文件强制覆盖(因为权限不足,普通覆盖会失败)
cp -i
在覆盖文件时出现提示是否真的覆盖
cp -n
不执行覆盖
cp --backup[=numbered]
在覆盖文件的时候制作一份备份(备份出来的文件名为原文件名加上~)
cp -r
源文件夹 目标文件夹(目标路径) 把源文件夹里面的文件复制成目标文件夹(到目标路径),成为子目录(r是递归的意思)
如果目标文件夹存在,那就会复制到目标文件夹里面成为子目录
cp -a
文件归档(想当于把源文件完全一致的备份)
cp -v
可以看到拷贝过程
cp不能复制特殊文件(比如设备文件sd)
mv的使用:
mv f1 f2
如果f1和f2在同一目录下,则是把f1改名为f2,在不同目录下,则是移动(可改名)
rm的使用:建议不要用rm
rm不能直接删文件夹,需要加上递归-r
rm -rf /*
在删除的时候不会提醒用户!!!建议把alias rm=mv
例如,用一个/data文件放要删除的文件,alias rm=‘mv -t /data’ 这样就可以执行rm的时候其实在执行mv了
> file
把已有文件清空,变成0字节(即覆盖已有文件file)
>> file
建立空文件,如果文件已存在,则什么也不变。(而touch对于已存在文件,会刷新时间戳)
rename
可以批量改名,例如:
rename conf conf. bak *.conf
把conf替换成conf.bak,文件列表为*.conf
tree
:显示目录树
-L level
显示指定的level层级数目
-d
只显示文件夹
-P pattern
只显示pattern规定格式的文件
mkdir
:创建文件夹
-p
可以建立多层目录
rmdir
:删除空文件夹
-p
删除最里面的目录以后如果上级目录为空,会自动删除上级目录并继续查看上上级目录。
索引节点inode:
在分区中唯一,属于文件的源数据
ls -i
查看节点编号
df -i
查看各个分区最多存放的节点编号。
节点编号用光和硬盘满了报错提示是一样的。(面试常考)
硬链接:
对一个文件起多个名称。
ln f1 f2
给f1文件起一个硬链接f2(f2不能与当前目录文件重名),之后改任意一个文件,另一个文件也会改变。(可以类比Python命名变量的规则)
(可以跨文件夹命名硬链接,但是不能跨分区,因为硬链接共用一个节点编号,跨分区相同节点编号代表文件不一样)(硬链接不支持目录)
文件的链接数大于1是因为 . 或者 子文件夹的 … 产生的。
软连接:
快捷方式
ln -s f1 f2
创建f1的软链接f2
软连接不会增加链接数,节点号也不同。
软连接支持文件夹。也支持跨分区。
注意:在新建软链接时,使用相对路径,是相对于创建出来的软连接的路径,不是相对于当前目录。
硬链接和软连接的区别(面试常出):
1 是否是同一文件
2 是否能跨分区
3 是否会使链接数增长
4 节点编号是否一样
5 原始文件删除是否影响链接文件
6 原始文件与链接文件大小是否一样
7 是否支持目录
8 相对路径写法不同
…………
file
确定文件内容:
用cat看文件要求被看的文件为文本文件,如果看的不是文本文件,可能会导致之后输入的命令为乱码,只能重启(或者reset命令),应该先用file看文件类型。(file通过看文件的头部信息魔数magic number看出文件类型的)
-b
只显示查看结果,不显示文件名
-L
查看软链接指向的文件的文件类型
-f file
通过在file里面写多个链接,一次性把里面的链接类型都输出
标准输入和输出:
打开的文件都有一个fd:
file descriptior(文件描述符)
Linux给程序提供三种I/O设备
标准输入 -0 默认接受来自键盘的输入
标准输出 -1 默认输出到终端窗口
标准错误 -2 默认输出到终端窗口
重定向I/O (redirect):(重新设置输入输出设备)
假如有两个窗口 1 /dev/pts/0,2 /dev/pts/1 则可以通过 command > window
的命令把输出设备换到window上,例如:
ls > /dev/pts/1
(在1窗口上输入,在2窗口输出)
(command > file
如果file不存在,则创建file,并把command运行结果存入file里面,如果存在,则覆盖file;command >> file
则不会覆盖而把新内容追加到file里面)(>只会把标准输出重定向到文件里面,不会重定向错误信息,如果要重定向错误信息可以这么做: errorcommand 2> file
)
/dev/null 是存放不需要的文件的地方,放进去就找不回来了。
把某次指令的对的信息放在一个文件里,错的信息放在另一个文件里面,例如:
ls /data /error > /root/f1 2> /root/f2
如果把对的错的信息放一起,则可以这样:
ls /data /error &> /root/all.log
或者
ls /data /error > /root/all.log 2>&1
或者
ls /data /error 2> /root/all.log 1>&2
把多个命令重定向到文件中:
(command1;command2) > file
对于某些有输出到命令,如果不想让别人知道可以把口令重定向到/dev/null
command &> /dev/null
用文件代替标准输入:
现有一个f1.txt文件,里面的内容是2*3
通过bc < f1.txt
用文件代替标准输入。
(使人工输入变成了自动化文件输入)
用cat实现内容复制:
cat < f1 > f2
tr inset outset
把键盘输入的内容中inset字符集的内容转换成outset字符集对应内容输出
如: tr 'a-z' 'A-Z'
可以通过tr把文件内容进行转换
字符集未一一对应:
tr 'abc' '1234'
abcdef
>123def
tr 'abcd' '123'
abcdef
> 1233ef
tr -t 'abcd' '123'
abcdef
>123def
tr -d set
删除set字符集里面的内容
tr -c/-C set
取反(配合-d可以删除除set字符集以外的内容,如果字符集里面没有回车,那么要通过Ctrl+D表示结束输入,不能通过回车)
tr -s
压缩,把input中连续的字符集里面的字符压缩为一个
压缩文件里面的空格:
tr -s ' ' < file
压缩加替换:
tr -s ' ' + < file
(把空格替换成加号(只能替换成单字符))
面试题:通过命令实现1加到100
echo {1..100} > cal1
tr -s ' ' + < cal1 > cal2
bc < cal2
set -C
禁止覆盖操作,可追加
set +C
允许覆盖操作
>|
强行覆盖,例如:
command >| file