一、系统信息与目录定位命令
1.1 用户与主机信息
命令 | 功能 | 示例 | 输出示例 |
---|---|---|---|
whoami | 显示当前登录的用户名 | whoami | root |
who | 显示关于当前在本地系统上的所有用户的信息 | who | user1 pts/0 Aug 20 09:15 |
w | 显示当前登录到系统中的用户及其进程的信息 | w | 包含USER/TTY/LOAD 的详细列表 |
hostname | 显示当前机器的主机名 | hostname | ubuntu-server |
补充:
hostnamectl set-hostname db #更改主机名为db(重新登录时生效)
useradd zeal #添加用户zeal
su - zeal #切换登录用户zeal
1.2 目录操作
命令 | 功能 | 示例 | 示例 |
---|---|---|---|
pwd | 显示当前(绝对)路径(print working directory) | pwd | /home/user/docs |
cd | 切换目录(change directory) | cd . (进入当前目录)cd .. (进入上级目录)cd - (返回上次目录) | cd ../downloads |
# 典型操作流
$ cd /var/log
$ pwd
/var/log
$ cd -
/home/user
补充:以树状结构显示文件夹/opt中的内容:
tree /opt
二、目录与文件管理
2.1 查看与创建目录
ls # list directory contents
-a #显示所有文件(包括隐藏文件)
-l #以长格式显示文件信息(包括文件类型、权限、硬链接数、所有者、所属组、大小和修改时间等)
-h #以易读的格式显示文件大小(如KB、MB)
-S #按文件大小排序
-t #按最后修改时间排序文件
-r #逆序显示文件和目录
-F #标识文件类型(目录/可执行文件*)
-d #仅显示目录本身,而不显示其内容
-i #显示文件的索引节点号(inode)
--full-time #使用完整的日期和时间格式显示文件和目录的修改时间
mkdir # make directory
mkdir dir1 dir2 dir3
#创建dir1、dir2、dir3目录
mkdir -p dir4/dir401
#在dir4目录下创建一个子目录dir401,若dir4不存在则会创建一个(去掉-p则会报错)
命令 | 功能 | 关键选项 | 示例 |
---|---|---|---|
ls | 列出目录内容 | -a (显示隐藏文件)-l (详细列表)-h (易读大小) | ls -lht |
mkdir | 创建目录 | -p (创建多级目录) | mkdir -p project/{src,backup} |
ls
参数组合详解:
# 按时间倒序显示详细信息(含隐藏文件)
$ ls -alth
-rw-r--r-- 1 user group 12K Aug 20 10:00 .bashrc
drwxr-xr-x 2 user group 4.0K Aug 19 09:00 .cache
2.2 删除操作
rmdir 删除空目录
rmdir dir4/dir401
#删除空目录dir401
rmdir -p dir4/dir401
#删除空目录dir401,若子目录dir401被删除后父目录dir4为空,则父目录dir4一并删除
rmdir dir*
#删除名称以dir开头的空目录
rm rm -f
#(force)强制删除文件,不提示确认,即使文件是只读的或不存在
rm -i
#(interactive)交互式删除文件,在每个文件被删除之前,提示用户确认
rm -r
#(recursive)递归删除目录及其内容
命令 | 功能 | 危险等级 | 示例 |
---|---|---|---|
rmdir | 删除空目录 | ★☆☆☆☆ | rmdir empty_dir |
rm | 删除文件/目录 | ★★★★★ | rm -rf temp/ |
安全删除实践:
# 交互式删除(推荐新手)
$ rm -i old_file.txt
rm: remove regular file 'old_file.txt'? y
# 递归删除目录(慎用!)
$ rm -r deprecated_code/
三、文件内容操作
3.1 查看与统计
cat # concatenate
cat -n 1.txt #显示文件1.txt的内容,并给每一行加上行号。--number
cat -b 1.txt #显示文件1.txt的内容,并仅对非空白行加上行号。--number-nonblank
cat -s 1.txt #显示文件1.txt的内容,并压缩多行空白行到一行。--squeeze-blank
cat -E 1.txt #显示文件1.txt的内容,并在每行行尾标记$。--show-ends
cat -T 1.txt #显示文件1.txt的内容,并显示制表符\t。--show-tabs
cat 1.txt 2.txt > 3.txt #连接文件1.txt和2.txt,并将结果输出到文件3.txt。
wc # word count 统计文件中的行数、单词数、字节数和字符数。
wc #默认情况下,wc 命令会同时显示行数、单词数和字节数。
-l #统计文件的行数。--lines
-w #统计文件的单词数。单词是指由空格、制表符或换行符分隔的非零长度字符序列。--words
-c #统计文件的字节数。字节数是指文件中所有字符占用的字节数。--bytes
-m #统计文件的字符数。字符数是指文件中所有字符的数量,包括多字节字符。--chars
-L #显示文件中最长行的长度。--max-line-length
命令 | 功能 | 关键选项 | 示例 |
---|---|---|---|
cat | 显示文件内容 | -n (显示行号)-b (跳过空行编号) | cat -n server.log |
wc | 统计文本数据 | -l (行数)-w (单词数) | wc -l access.log |
cat
高级用法:
# 合并多个文件
$ cat part1.txt part2.txt > complete.txt
# 显示文件内容并标记特殊字符
$ cat -ET config.conf
echo "Hello"^I# 制表符显示为^I$
3.2 文本处理
cut - 精准切割
cut
-c #以字符为单位进行分割截取
-d #自定义分隔符,默认为制表符\t
-f #与-d一起使用,指定截取哪个区域
-b #以字节为单位进行分割截取,通常与-n一起使用(适用于分割内容中包含汉字)
cut -c 1-5 1.txt #每一行截取第1到第5共5个字符
cut -c -5 1.txt #每一行截取第1到第5共5个字符
cut -c 1,2,3,4,5 1.txt #每一行截取第1到第5共5个字符
cut -c 4- 1.txt #每一行截取第4到行尾的字符。
cut -c 1,5 1.txt #每一行截取第1和第5共2个字符。
cut -d ':' -f 1,7 1.txt #以“:”分割,每行取第1和第7个分割区域。
使用场景示例:
# 提取/etc/passwd的用户名和shell
$ cut -d: -f1,7 /etc/passwd
root:/bin/bash
daemon:/usr/sbin/nologin
sort - 智能排序
sort -r #反转排序结果,即降序排列。
sort 1.txt #基础排序:对文件内容进行默认排序。
sort -n 1.txt #数值排序:按照数值大小进行排序(默认升序)。
sort -u 1.txt #去重排序:去除重复行,只保留唯一的行,并排序。
sort -t ':' -k 2 1.txt #按列排序:以":"为分隔符,按第2列排序。
使用场景示例:
# 按数值倒序排列
$ sort -nr data.txt
100
45
32
uniq - 去重统计
uniq # unique 基于相邻行之间的比较,检查和删除文本文件中重复出现的行
#这意味着 uniq 只会移除连续的重复行,对于非连续的重复行则无能为力
#因此,实际应用中,uniq 通常与 sort 结合使用,以确保所有相同行都是相邻的,从而能够被正确地处理
-c #在每行前加上此行共计出现的次数。--count
-d #只输出重复的行,每个重复组只显示一次。--repeated
-u #只显示唯一的行,即那些没有重复的行。--unique
sort -n 1.txt | uniq -cd #输出重复行,并显示出现次数
sort -n 1.txt | uniq -cu #输出唯一行,并显示出现次数(1)
使用场景示例:
# 统计IP访问次数
$ cut -d' ' -f1 access.log | sort | uniq -c
142 192.168.1.10
89 203.0.113.5
3.3 字符转换工具
tr # Text Replacer 从标准输入中通过替换或删除操作进行字符转换。
# tr 只能进行字符的替换、缩减和删除,不能用来替换字符串。
echo "hello" | tr 'h' 'H'
#字符替换:输出Hello
echo "hello world" | tr 'a-z' 'A-Z'
#字符集转换:将小写字母转换为大写:输出HELLO WORLD
echo "hello 123" | tr -d '123'
#--delete删除字符:输出hello
echo "aaabbbccc" | tr -s 'ac'
#--squeeze-repeats压缩重复字符:输出abbbc
tr -s '\n' < 1.txt #删除文件里面的空白行。
命令 | 功能 | 典型场景 | 示例 |
---|---|---|---|
tr | 字符替换/删除 | 格式转换 | tr 'a-z' 'A-Z' < input.txt |
实战案例:
# 删除Windows换行符
$ tr -d '\r' < win_file.txt > unix_file.txt
# 压缩连续空行
$ tr -s '\n' < messy.log > clean.log
四、命令常用参数组合实例(核心参数)
命令 | 常用参数组合 | 功能说明 |
---|---|---|
ls | -lhtr | 按时间逆序显示详细信息 |
rm | -iv | 交互式删除并显示过程 |
sort | -nru | 数值去重降序排列 |
mkdir | -pv | 显示多级目录创建过程 |
五、避坑指南
-
路径验证
# 删除前务必确认路径 $ ls /tmp/important_files/ # 先查看 $ rm -rf /tmp/important_files # 后操作
-
防止误覆盖
# 使用noclobber防止重定向覆盖 $ set -o noclobber $ echo "new" > existing.txt -bash: existing.txt: cannot overwrite existing file
-
时间戳陷阱
# 修改时间时注意时区 $ TZ=UTC touch -t 202308201200 file.txt
验证说明:所有命令在Ubuntu 22.04 LTS和CentOS Stream 9实测通过,关键操作均提供安全警告。