时间:2021-11-13 作者:冰城心无泪 分类: Linux基础
poweroff
reboot
Ctrl + c 中止当前正在执行的程序。
Ctrl + d 相当于exit命令,退出当前会话。
Ctrl + z 将当前运行的程序放到后台运行。与运行时加 & 类似。
Ctrl + s 暂停终端,锁定输入状态(肯定有很多人踩过坑)
Ctrl + q 取消锁定输入状态
Tab 键 自动补全命令
可从yum源下载并安装rpm包,并自动解决依赖关系。(Centos8升级为dnf,兼容yum)
命令应用
安装vim编辑器(-y参数,yes,不加该参数会有一个确认的提示)
yum -y install vim
移除vim
yum -y remove vim
更新所有软件
yum update
升级指定的包,如wget
yum -y update wget
清除所有缓存
yum clean all
仅下载所需软件和及其依赖包不安装(仅下载nginx及其依赖包到/home目录,不安装)
yum -y install --downloadonly nginx --downloaddir=/home
清除屏幕所有显示
clear
参数
ls 查看当前目录下的所有目录和文件
ls -a 查看当前目录下的所有目录和文件(包括隐藏的文件)
ls -l 或 ll 列表查看当前目录下的所有目录和文件(列表查看,显示更多信息)
ls / 查看指定目录下的所有目录和文件(如:查看根目录下的文件和子目录)
ls -lh (ll -h) 查看文件大小
ls -t 按最后修改时间对文件进行排序
ls -1 每行显示一个文件或目录
举例说明
查看/home目录下所有文件及子文件夹
ls /home
查看/home目录下所有文件及子文件夹,包含隐藏文件
ls -a /home
查看/home目录下所有文件及子文件夹,以列表的形式显示(可查看文件权限、大小、修改时间等)
ll /home
注:可以与其他参数配合,如head.下面的意思是/home下的文件按照最后的修改时间并且每行只显示一个文件的方式进行排序显示.只显示第一行,也就是只列出最后修改的一个文件
ls -1t /home | head -n1
ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义
-A 列出所有的进程
-C 列出指定程序的情况
-w 显示加宽可以显示较多的资讯
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的进程信息
举例说明
列出当前所有进程信息
ps -aux
列出nginx的进程信息
ps -C nginx
参数
-mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
-amin n : 在过去 n 分钟内被读取过
-anewer file : 比文件 file 更晚被读取过的文件
-atime n : 在过去n天内被读取过的文件
-cmin n : 在过去 n 分钟内被修改过
-cnewer file :比文件 file 更新的文件
-ctime n : 在过去n天内被修改过的文件
-empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name
-ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写
-name : 文件名称符合 name 的文件。iname 会忽略大小写
-size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。
-type : 文件类型
d: 目录
c: 字型装置文件
f: 一般文件
l: 符号连结
格式
find 所需搜索的目录 参数 文件名称
举例说明
搜索/home目录下(包含子目录)名为test.log的具体文件路径
find /home -name test.log
搜索根目录下所有以.log结尾的文件
find / -name *.log
列出当前目录下所有的一般文件
find . -type f
列出/var目录下所有子目录
find /var -type d
列出/var下以w开头的目录
find /var -name w* -type d
列出当前目录下大于10M的文件
find . -size 10M
切换到home目录
cd /home
切换到当前用户主目录
cd ~
切换到当前目录的上一目录
cd ..
切换到上次访问的目录
cd -
参数
-m, --mode=模式 创建目录时同时设定权限,只在最后一级目录生效,不论上级目录是否存在-不常用
-p, --parents 需要时创建上层目录,如目录早已存在则不当作错误-常用
-v, --verbose 每次创建新目录都显示信息
-Z, --context=CONTEXT (SELinux) 设置安全上下文,当使用SELinux时有效;-不常用
--help 显示此帮助信息并退出-不常用
--version 输出版本信息并退出-不常用
举例说明(所需创建目录均不存在)
1 在根目录创建名为test的目录
mkdir /test
2 在根目录创建名为my_mk的目录,并在test目录同时创建名为test_1的目录
mkdir -p /my_mk/test_1
3 在根目录创建名为mk_test的目录,并在mk_test目录下同时创建名为test_1、test_2、test_3的三个目录
mkdir -p /mk_test/{test_1,test_2,test_3}
4 在根目录下创建名为our_test的目录,并在our_test目录下创建test_4目录,同时设置创建test_4目录权限为700(此权限只在test_4目录生效,our_test目录不受影响)
mkdir -p -m 700 /our_test/test_4
参数
-a 只更改存取时间;
-c 若文件不存在,不建立新文件;
-d 使用指定的日期,而非现在的日期;(yyyy年mm月dd日)
-m 只修改文件的修改时间为当前时间;
-r 把指定文件或目录的日期时间,设成和目标文件或目录的相同的日期时间
-t 使用指定的时间,而非现在的时间;语法:年月日时分.秒 如 200111082339.12(秒数前面有个点)
举例说明
1 创建空文件test
touch test
2 同时创建多个文件
touch test test.log .....
3 创建多个有序的空文件test1到test4
touch test{1..4}
4 创建多个有序的空文件test1.log到test4.log
touch test{1..4}.log
5 创建多个有相同字符的空文件test5.log test7.log test.9.log
touch test{5,7,9}.log
6 更改文件的时间戳(访问、修改、状态改变时间)为当前系统时间(文件不存在则创建,已存在文件只会修改时间戳)
touch test1.log
7 设定文件的时间戳(源时间戳202111082339)
touch -t 200111082339.12 test.log
8 将文件日期调整为两天前(访问和修改的日期)
touch -d "2 days ago" test1.log
9 将文件日期调整为2008年10月12日(访问和修改的日期)
touch -d '20081012' test2.log
注:查看文件的访问、修改、状态改变时间
stat file_name
vi系统自带,vim未安装的话需要安装。创建并编辑新文件或修改现有文件
默认进入后处于正常模式,无法编辑,通常用字母i/insert进入编辑模式
字符按键以及Shift组合,输入字符
ENTER,回车键,换行
BACK SPACE,退格键,删除光标前一个字符
DEL,删除键,删除光标后一个字符
方向键,在文本中移动光标
HOME/END,移动光标到行首/行尾
Page Up/Page Down,上/下翻页
Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
ESC,退出输入模式,切换到命令模式
:q 退出;
:q! 不保存退出;
:w 保存;
:w! 强行保存;
:wq 保存退出
:wq! 强制保存并退出
参数
-b 在非空行前显示所行号
-n 在每行前显示行号,包括空行
举例说明
查看test.log文件的内容
cat test.log
查看testt.log文件的内容,在非空行前显示所行号
cat -b test.log
查看testt.log文件的内容,在每行前显示行号,包括空行
cat -n test.log
扩充知识点:
查看物理CPU个数
cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l
查看每个CPU核数:
cat /proc/cpuinfo | grep "cpu cores" | uniq | awk '{print $4}'
查看全部CPU逻辑核心数(CPU线程)
cat /proc/cpuinfo | grep "processor" | wc -l
直接查看CPU具体信息
lscpu
用cat创建文件并写入内容(常用与shell脚本)
说明:
一个大于号‘>’ 代表输出的内容重定向到文件,覆盖源文件内容,一般用于新建文件时
两个大于号‘>>’ 代表输出的内容重定向到文件,将输出内容追加到源文件内容后面行,一般用于源文件存在时
EOF只是标识,也可以用别的符号代替比如FFF等等。最后一个EOF一定要在行首,前面不能有空格等。
格式:
cat >或者>> 需要创建或者追加内容的文件名 << EOF
"需要重定向的内容"
EOF
创建test.txt文件并写入内容"It is a test"
cat > test.txt << EOF
It is a test
EOF
向test.txt文件追加写入内容"Yes just a test"
cat >> test.txt << EOF
Yes just a test
EOF
当输入的字符包含变量时,会先解析变量,然后将解析内容重定向到文件,如
定义变量
file="It is a test file"
将变量解析后重定向到文件。(查看test.txt内容,显示内容:It is a test file)
cat > test.txt << EOF
$file
EOF
当需要将变量当做普通字符重定向到文件时,需要用单引号或双引号将第一个EOF括起来
定义变量
file="It is a test file"
将变量当做普通字符重定向到文件。(查看test.txt内容,显示内容:$file)
cat > test.txt << 'EOF'
$file
EOF
参数
-a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。是dpR参数组合。
-d:复制时保留链接。
-f:覆盖已经存在的目标文件而不给出提示。测试中加上此参数还是提示
-i:与 -f 选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖。这个是使用命令时默认就已将加上的参数。
-p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
-r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
-l:不复制文件,只是生成链接文件(此链接为硬链接,硬链接:只能用于文件不能用于目录)
举例说明
1 将目录my_test及my_test下的所有文件复制到新目录our_test目录下(复制源包含目录时,-r参数必须加)
cp -r my_test our_test
2 将目录my_test下的所有文件复制到新目录our_test目录下(若目录my_test下存在子目录,参数-r必须加,不存在子目录,参数-r可不加)
cp -r my_test/* our_test/
3 将目录my_test下的所有文件复制到新目录our_test目录下,同名文件覆盖不提示(注意,建议用\cp而不是加参数-f)
\cp -r my_test/* our_test/
4 只复制目录my_test下的文件test.log及目录your_test到新目录our_test目录下
cp -r my_test/{test.log,your_test} our_test/
5 将目录my_test下的所有文件、链接及所有属性复制到新目录our_test目录下,同名文件覆盖不提示
\cp -a my_test/* our_test/
6 将目录my_test下的文件test.log复制一份名为test_bak.log的备份文件
cp my_test/test.log my_test/test_bak.log
参数
-b 若需覆盖文件,则覆盖前先行备份
-f 强制移动或覆盖并且不提示
-i 目标文件存在时有覆盖提示,默认参数,不用加
举例说明
将目录my_test下的所有文件剪切到新目录our_test目录下,存在同名文件会有覆盖提示
mv my_test/* our_test/
将目录my_test下的所有文件剪切到新目录our_test目录下,若存在同名文件直接覆盖不提示
mv -f my_test/* our_test/
将目录my_test(包含目录下所有文件和子目录)剪切到新目录our_test目录下
mv my_test/ our_test/
将目录my_test下test.log文件剪切到新目录our_test目录下,存在同名文件会有覆盖提示
mv my_test/test.log our_test/
将目录my_test下test.log文件剪切到新目录our_test目录下,若目标目录存在同名文件,则先备份目标目录内同名文件,然后直接覆盖不提示(备份文件名为test.log~)
mv -fb my_test/test.log our_test/
将目录my_test下test.log和test1.log两个文件剪切到新目录our_test目录下,存在同名文件会有覆盖提示
mv my_test/{test.log,test1.log} our_test/
将目录my_test下test.log文件剪切到新目录our_test目录下,并更名为test_bak.log
mv my_test/test.log our_test/test_bak.log
参数
-i 删除前逐一询问确认。(默认删除时就询问,一般不用加)
-f 强制删除无需确认,不论源文件属性是什么。(慎用)
-r 将目录下文件逐一删除。(删除文件为目录或其目录下包含子目录时使用)
举例说明
1 将目录my_test下名为test.log的文件删除,删除时有确认提示
rm my_test/test.log
2 将目录my_test下名为test.log的文件删除,删除时无确认提示直接删除
rm -f my_test/test.log
3 将目录my_test下所有文件删除(包目录下的子目录),删除时无确认提示直接删除
rm -rf my_test/*
4 只删除目录my_test下的文件test.log及子目录your_test,删除时无确认提示直接删除(不管子目录下是否存在文件或目录)
rm -rf my_test/{test.log,my_test}
5 将目录my_test删除,(不管该目录下是否有子目录或文件,都直接删除),删除时无确认提示直接删除
rm -rf my_test
6 删除当前目录下所有文件,删除时无确认提示直接删除
rm -rf *
参数 无
常用与进入多级目录后查看当前所在目录
举例说明
假如我目前所在的目录为/home/test/
pwd
显示结果:/home/test
参数
-1:强制scp命令使用协议ssh1
-2:强制scp命令使用协议ssh2
-4:强制scp命令只使用IPv4寻址
-6:强制scp命令只使用IPv6寻址
-B:使用批处理模式(传输过程中不询问传输口令或短语)
-C:允许压缩(打开压缩功能)
-p:保留原文件的修改时间,访问时间和访问权限。
-q:不显示传输进度条。
-r:递归复制整个目录(传输目录时使用,属于常用参数)。
-v:显示详细的传输信息(个人喜欢加上此参数,出问题也知道哪里报错)。
-c cipher: 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
-F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh。
-i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
-l limit: 限速功能,限制传输速度,以Kbit/s为单位。
-o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式,
-P port:端口,注意是大写的P(默认端口是22,如果远程服务器修改了SSH端口,则需要加此参数,指定端口号,属于常用参数)
命令
scp 参数 源文件或目录 目标文件或目录
举例说明(test为远程主机用户名,以下命令都会提示输入远程主机密码)
将当前目录下的scp_test.txt传输到远程主机192.168.1.111的/home/My_test目录下,文件名称不变(若远程目录下存在同名文件,将会被覆盖且无提示)
scp scp_test.txt test@192.168.1.111:/home/My_test
将当前目录下的scp_test.txt传输到远程主机192.168.1.111的/home/My_test目录下,并更名为My_scp.txt(若远程目录下存在同名文件,将会被覆盖且无提示)
scp scp_test.txt test@192.168.1.111:/home/My_test/My_scp.txt
使用ssh2协议将远程主机192.168.1.112的/home/My_test目录复制到本机的/scp目录下,远程主机端口222,显示详细传输信息
scp -2rvP 222 test@192.168.1.112:/home/My_test /scp
使用ssh2协议将远程主机192.168.1.112的/home/My_test目录复制到本机的/scp目录下并更名为My_scp_test,远程主机端口222,显示详细传输信息
scp -2rvP 222 test@192.168.1.112:/home/My_test /scp/My_scp_test
使用ssh2协议将/home目录的scp_test.txt复制到远程主机192.168.1.113的/test目录下,远程主机端口223,显示详细传输信息
scp -2rvP 223 /home/scp_test.txt test@192.168.1.113:/test
复制多个文件到远程主机192.168.1.111的/home/My_test目录下,远程主机端口223,以下两条命令均可
scp 1.txt 2.txt -P 223 test@192.168.1.111:/home/My_test
scp {1,2}.txt -P 223 test@192.168.1.111:/home/My_test
复制远程主机192.168.1.111多个文件到本地当前目录,远程主机端口223
scp -P 223 test@192.168.1.111:/home/My_test/\{1.txt,2.txt\} ./
复制远程主机192.168.1.111的/home/My_test目录到本地当前目录,远程主机端口223,复制完成后,你在当前目录下可看到已复制过来的My_test目录
scp -rP 223 test@192.168.1.111:/home/My_test/ ./
文件权限表示:
r、w、x表示读、写、执行权限,也可用数字表示:数字 4 、2 和 1,即 r=4,w=2,x=1
rwx = 4 + 2 + 1 = 7(读、写、执行权限)
rw = 4 + 2 = 6(读、写权限)
rx = 4 + 1 = 5(读、执行权限)
文件用户权限表示
u 表示“用户(user)”,即文件或目录的所有者。
g 表示“同组(group)用户”,即与文件属主有相同组ID的所有用户。
o 表示“其他(others)用户”。
a 表示“所有(all)用户”。它是系统默认值。
常用可选项
-R 表示给目录内所有文件递归指定权限
文件权限的操作:
命令格式
chmod mode(u/g/o权限分配) 所需要更改权限的文件或目录
举例说明:
设置test.log文件为所有用户可读、写、执行(默认权限rw-r-r,更改后权限(rwx-rwx-rwx)
chmod 777 test.log
删除其他用户的执行权限
chmod o-x test.log
设置文件test.log只有所属用户有读写权限,用户所属组(group)及其他用户(others)只有执行权限
chmod =611 test.log
设置文件test.log用户所属组(group)添加执行权限(这里)
chmod g+x test.log
设置test目录(不包含目录内文件及子目录)给用户所属组(group)及其他用户(others)增加写权限
chmod go+w test
设置test目录(包含目录内文件及子目录)给用户所属组(group)及其他用户(others)增加写权限
chmod -R go+w test
格式
chattr [+-=] [属性] 文件或目录名
常用参数
a 即Append Only.追加属性 如果对文件设置 a 属性,那么只能在文件中増加数据,但是不能删除和修改数据.如果对目录设置 a 属性,那么只允许在目录中建立和修改文件,但是不允许删除文件。
i 即Immutable.只读属性 如果对文件设置 i 属性,那么不允许对文件进行删除、改名,也不能添加和修改数据.如果对目录设置 i 属性,那么只能修改目录下文件中的数据,但不允许建立和删除文件.
R 递归修改所有的文件及子目录,这是一个可选项
例如1 给文件f123添加a属性.此时,只能向文件 f123 中新增数据,无法修改和删除文件中原有数据,也不能对文件重命名。
chattr +a f123
例如2 给目录 d456 添加a属性.此时,可以向目录d456中新增文件及目录,无法删除目录中原有文件,也不能对目录内文件重命名。测试时发现,可以修改目录内文件内容,但会生成一个备份文件,备份文件内容为原文件中的内容。
chattr +a d456
例如3 给文件f123添加 i 属性。此时,文件f123无法进行修改、新增、删除、重命名操作.
chattr +i f123
例如4 给目录 d456 添加i属性,那么只能修改目录 d456 下文件中的数据,但不允许建立和删除文件.也不能对目录及目录中的文件重命名。
chattr +i d456
例如5 给目录d456及其子目录下所有文件赋予i属性。那么只能修改目录d456及子目录下文件中的数据,目录d456及子目录,不允许建立和删除文件.也不能对目录及目录中的文件重命名
chattr -R +i d456
例如6 假如同时给文件f123赋予 a 及 i 属性,a属性表示允许新增数据,i属性表示拒绝新增数据,那么能否向文件 f123 新增或修改数据呢?不能!权限 “拒绝” 优先。对目录亦如此。
chattr +ia f123
上面是用‘+’号对文件或目录增加属性,相反,那么删除属性就用‘-’号,对目录亦如此。
chattr -a f123
假如我不管原来文件或者目录有什么属性,我只想给他指定i 或者 a 属性,那么就用‘=’号,此时,不管原文件或目录有什么属性,都会替换为你指定的属性。
chattr =a f123
我不知道文件或目录拥有哪些属性,怎么查看?用 lsattr 命令查看
lsattr f123
格式
chmod user:group 文件名或目录名
常用参数
-h 当更改的是链接时,更改的是链接的所有权,不更改链接指向的文件或目录的所有权,不指定此参数时,更改链接指向的文件或目录的所有权,不更改是链接的所有权
-v 显示详细的处理信息
常用可选项
-R 表示给目录内所有文件递归指定权限
举例说明:
更改test目录属主为www
chown www test
更改test目录所属组为www(前面有个冒号),不改变所属用户
chown :www test
更改test目录(不包含目录内文件及子目录)所属用户及所属用户组为www:www,一般情况下,设置文件归属时,会同时设置属主和属组(前面www代表用户,后面www代表用户组)
chown www:www test
更改test目录(包含目录内文件及子目录)所属用户及所属用户组为www:www,一般情况下,设置文件归属时,会同时设置属主和属组(前面www代表用户,后面www代表用户组)
chown -R www:www test
注:这里CPU占用百分比是指单核的使用率,CPU如果是4(多)核的话,满载应该是 400%
建议安装top升级版软件htop来使用
yum -y install htop
参数
-h 自适应显示方式(大于1024M用G为单位显示,小于1G用M为单位显示),个人喜欢用这个
-m 以M为单位统计
-g 以G为单位统计
-s 刷新统计时间,默认单位秒
举例说明
以M为单位,显示目前内存使用率
free -m
以自适应显示方式,显示目前内存使用率,并三秒刷一次,直到ctrl+c结束
free -hs 3
参数:
-A 新增压缩文件到已存在的压缩
-c 建立新的压缩文件
-x 从压缩的文件中提取文件
-t 显示压缩文件的内容
-z 支持gzip压缩解压文件(系统自带)
-j 支持bzip2压缩解压文件(压缩能力要大于gzip,系统最小化安装,需要另外安装bzip2)
-Z 支持compress解压文件
-t 查看压缩文件内容
-v 显示操作过程
-f 指定压缩文件
-C 指定解压目录
举例说明
将www目录打包为www.tar
tar -cf www.tar www
将www.tar解压到当前目录(若当前目录已存在www目录,则www目录内同名文件将会被覆盖)
tar -xf www.tar
将www.tar解压到/home目录
tar -xf www.tar -C /home
将www目录打包,并用gzip压缩
tar -czf www.tar.gz www
将www.tar.gz解压到/var目录
tar -xzf www.tar.gz -C /var
将www目录打包,并用bzip2压缩
tar -cjf www.tar.bz2 www
将www.tar.bz2解压到/var目录
tar -xjf www.tar.bz2 -C /var
查看www.tar.bz2内的文件
tar -tf www.tar.bz2
-e 激活转义字符,默认情况下输出一般字符,但是以下字符特别处理
\a 发出警告声;
\b 删除前一个字符;
\c 最后不加上换行符号;
\f 换行但光标仍旧停留在原来的位置;
\n 换行且光标移至行首;
\r 光标移至行首,但不换行;
\t 插入tab;
\v 与\f相同;
\ 插入\字符;
\nnn 插入nnn(八进制)所代表的ASCII字符;
注:若是一般字符,双引号与单引号无异,当输入字符中包含变量时,双引号会输出变量解析后结果,单引号会将变量当做一般字符输出。
输出一般字符
echo "I will make a test"
输出命令执行结果,即输出的是命令执行后的输出结果(命令用反引号括起来)
echo `nmcli`
输出带颜色或者背景颜色的字符
控制选项:这个是可选的
0m 关闭所有属性
1m 设置高亮度
4m 下划线
5m 闪烁
7m 反显
8m 消隐
文字颜色:重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,洋红=35,青色=36,白色=37
背景颜色:重置=0,黑色=40,红色=41,绿色=42,黄色=43,蓝色=44,洋红=45,青色=46,白色=47
如:输出高亮绿色普通字符
echo -e "\e[1;32m Test Green word \e[0m"
输出高亮闪烁绿色普通字符(控制选项可以多个,用分号;隔开)
echo -e "\e[1;5;32m Test Green word \e[0m"
输出高亮闪烁绿色命令执行结果。注意,命令是是在反引号里面(这种使用方法一般人干不出来)
echo -e "\e[1;5;32m `ping -c4 www.baidu.com` \e[0m"
参数
-b :以字节为单位进行截取(当截取的内容包含汉字时,需和参数-n同时使用,即:-nb)
-c :以字符为单位进行截取
-d :自定义分隔符,默认为制表符
-f :与-d一起使用,指定显截取的区域
-n :取消分割多字节字符。仅和 -b 标志一起使用。
新建一个名为test.txt的文件,并写入一下内容
It is a test
这是一个测试文件
00:11:22:33:44:55
截取文件内容每行的第二个字符
cut -c 2 test.txt
显示内容:
t
是
0
截取文件内容每行的第三个字符
cut -c 3 test.txt
显示内容(第一行为空,其实是个空格,详见扩展):
一
:
截取文件内容每行的第一至第三个字符
cut -c 1-3 test.txt
显示内容(第一行It后面有个空格,只是看不出来):
It
这是一
00:
截取文件内容每行第四个字符及以后的内容
cut -c 4- test.txt
显示内容:
is a test
个测试文件
11:22:33:44:55
截取文件内容每行第1个、第4个、第6个字符
cut -c 1,4,6 test.txt
显示内容
Ii
这个试
01:
以冒号":"为分隔符,截取第2段内容
cut -d : -f 2 test.txt
显示内容(只分割带指定分隔符的字符串,不含分隔符的,将全部显示):
It is a test
这是一个测试文件
11
扩展:
字母、数字、汉字和特殊符号(+、*、の.....)都算字符,每一个都算一个字符
一个汉字,utf-8编码下占用3个字节,gbk编码下,占用2个字节,当用参数-b时截取时,没有完整截取汉字所占字节数,总不能让汉字显示一半啊,所有只能与参数-n同时使用,只要截取到就显示完整汉字。
由上看来,在实际使用中,参数-c是比较常用的。当使用参数-b,建议与-n参数同时使用,即-nb
默认以tab键或者空格为分隔符将一行分为多个列(字段)
常用参数
-F 指定字段分隔符(当指定的分隔符不存在于某行时,则此行的所有内容将不输出)
注:
NR 表示行号
$0 表示这一行的内容
$x x为数字,表示某一列
$NF 最后一列
举例说明
新建一个名为awk.txt的文件,并写入一下内容
This is awk test
I hope the test succeeds
Next a simple test is carried out
以空格为分隔符,取第3个字段
awk '{print $3}' awk.txt
显示内容
awk
the
simple
以字母t为分隔符,取第2个字段
awk -F t '{print $2}' awk.txt
显示内容(第二行he后面有个空格,第三行a前面有个空格)
es
he
a simple
显示行号大于1的每行的内容
awk 'NR>1{print $0}' awk.txt
显示内容
I hope the test succeeds
Next a simple test is carried out
显示行号大于1的每行的内容,并标注行号
awk 'NR>1{print NR,$0}' awk.txt
显示内容
2 I hope the test succeeds
3 Next a simple test is carried out
只显示第三行的全部内容
awk 'NR==3{print $0}' awk.txt
显示内容
Next a simple test is carried out
显示行号大于1并且小于3的正行内容
awk 'NR>1&&NR<3{print $0}' awk.txt
显示内容
I hope the test succeeds
假如文本有10列内容,要求只截取3-10列,屏蔽1-2列,这个时候,我们需要将1、2列内容赋空值,然后打印所有行就好了
awk '{$1=""; $2=""; print $0}' awk.txt
或者这样写
awk '{$1=$2=""; print $0}' awk.txt
sed: 文本数据处理
sed 后面接的动作以 两个单引号括住
参数
-r:使用扩展正则表达式
-i:直接对内容进行修改,不加-i时默认只是预览,所以此参数要慎用,备份是个好习惯
编辑命令(选项参数)
a: 向匹配行的后面插入内容
c: 更改匹配行的内容(整行都会被替换,一定要区别于选项参数s)
i: 向匹配行前插入内容,与a想反
d: 删除匹配的内容
s: 替换掉匹配的内容(只会替换关键字,一定要区别于选项参数c)
g: 全局
举例说明
特殊范例:删除文件sed.txt内容的最后一行(没有加参数-i,因此只是预览,不会修改原文件)
sed '$d' sed.txt
特殊范例:删除文件sed.txt内的空行(^表示开头,$表示结尾,没有加参数-i,因此只是预览,不会修改原文件)
sed '/^$/d' sed.txt
特殊范例:在sed.txt文件中的每一行开头加一个#(没有加参数-i,因此只是预览,不会修改原文件)
sed 's/^/#&/g' sed.txt
特殊范例:删除sed.txt文件中的空格(每行的空格都会被删除,没有加参数-i,因此只是预览,不会修改原文件)
sed 's/ //' sed.txt
将第三行的全部内容替换为This is number 3(没有加参数-i,因此只是预览,不会修改原文件)
sed '3cThis is number 3' sed.txt
删除文件sed.txt包含number的行(所有包含number的行,全部都会被删除,没有加参数-i,因此只是预览,不会修改原文件)
sed '/number/d' sed.txt
删除文件sed.txt第2-5行(没有加参数-i,因此只是预览,不会修改原文件)
sed '2,5d' sed.txt
删除文件sed.txt第2行到最后一行的所有内容(没有加参数-i,因此只是预览,不会修改原文件)
sed '2,$d' sed.txt
删除文件sed.txt第五行,直接修改源文件而不预览
sed -i '5d' sed.txt
在文件sed.txt第二行后面插入一行,内容为It is a test,直接修改源文件而不预览
sed -i '2aIt is a test' sed.txt
在文件sed.txt第二行前面插入一行,内容为“Just trust me ”,直接修改源文件而不预览
sed -i '2iJust trust me' sed.txt
将文件sed.txt中的trust替换为believe,直接修改源文件而不预览(默认只替换每行第一个关键字,这就是说下面命令只替换每行的第一个trust)
sed -i 's/trust/believe/' sed.txt
将文件sed.txt中的trust全部替换为believe(g代表全局),直接修改源文件而不预览
sed -i 's/trust/believe/g' sed.txt
将文件sed.txt中的所有行行首加上“#”号,直接修改源文件而不预览
sed -i 's/^/#/' sed.txt
将文件sed.txt中的所有行行尾部加上“%”,直接修改源文件而不预览
sed -i 's/$/%/' sed.txt
将文件sed.txt中的所有行行首加上“#”号,行尾部加上“%”,用一条命令同时执行,直接修改源文件而不预览
sed -i '/./{s/^/#/;s/$/%/}' sed.txt
参数
-a 将内容输入到文件原内容后面
-i 忽略中断信号
举例说明
查看当前目录下有哪些文件或目录,并将文件或目录名称写入tee_test.txt内(若不纯在tee_test.txt文件,将会自动新建一个,如果tee_test.txt文件存在,将会覆盖文件内容)
ls | tee tee_test.txt
查看当前目录下有哪些文件或目录,并将文件或目录名称写入tee_test.txt内(若不纯在tee_test.txt文件,将会自动新建一个,若tee_test.txt文件存在,则会将输入内容输入到文件原内容后面)
ls | tee -a tee_test.txt