Linux 命令行

帮助

  命令分为两类,一类集成在shall中,被称为内置命令;一部分是shall调用的命令,被称为外部命令。

type

  用于区分命令是内置命令还是外部命令。

示例

type cd

help

  查询内置命令的使用说明。

示例

help cd

man

  man:manual,查询外部命令的帮助手册。

示例

man ls

  帮助手册的翻页等查看操作与Vim的操作方法相同。

文件系统

符号含义
.当前工作目录
..当前工作目录的上一级目录
~当前用户的主目录

pwd

  pwd:print working directory,显示当前工作目录的绝对路径。

选项

简写含义
-P若当前工作目录是符号链接路径,则显示其真实的物理(physical)链接路径

示例

pwd

cd

  cd:change directory,切换当前工作目录。

选项

简写含义
-P若给出一个符号链接路径,则会被转换成真实的物理(physical)路径

示例:

cd /root/Desktop	# 切换到/root/Desktop
cd ./Desktop		# 切换到当前工作目录下的Desktop目录
cd Desktop			# 与上句等价
cd ..				# 切换到当前工作目录的上级目录
cd ~				# 切换到当前用户的主目录
cd					# 与上句等价
cd -				# 切换到上次工作的目录

ls

  ls:list,列出目录内容。

选项
选项

简写全写含义
-a--all连同隐藏文件一并列出
-l列出详细数据(llls -l的别名)
-h--human-readable-l一起使用,打印文件大小时,使用k,M,G等单位

示例

ls -a
ls -al /usr

  对ls -l所列出的内容解释如下:

|----1----|-2-|-3-|-4-|--5--|-----6-----|----------7----------|
drwxr-xr-x. 2 root root   42 Jul 20 18:01 Desktop
drwxr-xr-x. 2 root root    6 Jul 16 21:30 Documents
drwxr-xr-x. 2 root root    6 Jul 16 21:30 Downloads
-rw-r--r--. 1 root root 1892 Jul 14 23:09 initial-setup-ks.cfg
  • 第一部分:总共有 10 个字符,第 1 个字符表示文件类型,符号含义参看图表第 2-4 表示文件所有者拥有的权限,‘r’ 表示读权限,‘w’ 表示写权限,‘x’ 表示执行权限,需注意三者之间的顺序(读、写、执行);第 5-7 表示文件所属组的成员拥有的权限;第 8-10 表示其它用户拥有的权限。第 2-10 对于文件权限的描述称为文件模式(file mode)。此外,目录的读权限意思是可以读取目录下有哪些文件;写权限的意思是可以在目录下添加或删除文件;执行权限的意思是可以对目录下文件的内容进行操作,也可将该目录设为当前工作目录。
  • 第二部分:链接数,对于普通文件,该数值表示硬链接的数量;对于目录,该数值表示目录下文件的数量。
  • 第三部分:文件所有者。
  • 第四部分:文件所属组。
  • 第五部分:文件大小,单位是字节。
  • 第六部分:创建时间。
  • 第七部分:文件名称。

符号文件类型
-f常规文件(regular file)
d目录(directory)
l符号链接(symbolic link)
c字符设备(charactoer special)
b块设备(block special)
p命名管道(named pipe)
s套接字(socket)

stat

  stat:status,打印文件的详细信息。

选项

简写全写参数含义
-f--file-system打印文件在文件系统中的详细信息
--printfstring格式化打印(格式串中转义字符的含义,使用man stat查看,这里不再赘述)

示例

stat hello
stat -f hello

文件的四个时间戳

时间戳解释
访问时间(Access,atime)上次查看文件内容的时间
修改时间(Modify,mtime)上次修改文件内容的时间,不包含修改文件的属性
改变时间(Change,ctime)上次修改文件内容或修改文件属性的时间
创建时间(Birth)创建文件的时间

mkdir

  mkdir:make directory,创建目录。

选项

简写全写参数含义
-p--parents创建多级目录(若路径中某些目录尚不存在,则创建这些目录)
-m--modeMODE设置文件权限(MODE的写法参照 chmod

示例

// 设./a/b/c不存在
mkdir a a/b a/b/c		# 创建./a/b/c
mkdir -p a/b/c			# 等价于上句

rmdir

  rmdir:remove directory,删除目录。

选项

简写全写含义
-p--parents删除多级目录(若路径中子目录删除后父目录为空,则删除父目录)

示例

# 设./a/b/c存在
rmdir a/b/c a/b a		# 删除./a/b/c ./a/b ./a
rmdir -p a/b/c			# 等价于上句

cp

  cp:copy,拷贝。

选项

简写全写含义
-f--force强制拷贝(目的文件或目录若存在,则将被覆盖)
-r--recursive递归拷贝(源文件若为目录,则其下级所有目录和文件都将被复制)

示例

# 设目录./tmp和文件./tmp/hello.txt
cp test.txt tmp					# 会有tmp/test.txt生成
cp test.txt tmp/hello.txt		# 会询问是否将tmp/hello.txt覆盖
cp -f test.txt tmp/hello.txt	# 不再询问,tmp/hello.txt被强制覆盖
cp -r tmp good					# tmp及其下所有文件被复制

mv

  mv:move,移动。

选项

简写全写参数含义
-f--force若存在与目标文件同名的文件,不询问,直接覆盖
-b若存在与目标文件同名的文件,在覆盖前先创建其备份文件
-u--update若存在与目标文件同名的文件,当源文件比该文件更新时,覆盖该文件
-t--target-directorydirectory当将多个文件移动到同一目录下时,需使用此选项指定目标目录
-v--verbose打印处理过程

示例

#设常规文件 1、2、3,设目录 Desktop
mv 1 11				# 将文件 1 的名称改为 11
mv -u 2 Desktop		# 将文件 2 移动到 Desktop 目录下
mv -t Desktop 1 2 3	# 将文件 1、2、3 都移动到 Desktop 目录下

rm

  rm:remove,删除。

选项

简写全写含义
-f--force强制删除(忽略不存在的文件,不提示确认)
-r--recursive递归删除(若为目录,则其下级所有目录和文件都将被删除)
-v--verbose打印处理过程

示例

rm -rf /*	# 删库跑路

touch

  更新目录或文件的访问和修改时间。

选项

简写全写参数含义
-c--no-create当文件不存在时不要创建新的
-a只更新访问时间(change only the access time)
-m只更新修改时间(change only the modification time)
-t[[CC]YY]MMDDhhmm[.ss]使用指定的时间

示例

touch hello							# 更新hello的访问和修改时间为当前系统时间,若hello不存在则创建
touch -ac hello						# 仅更新hello的访问时间为当前系统时间,若hello不存在则命令作废
touch -mc hello						# 仅更新hello的修改时间为当前系统时间,若hello不存在则命令作废
touch -act 202207201314.52 hello	# 仅更新hello的访问时间为2022年7月20日13时14分52秒,若hello不存在则命令作废

ln

  ln:link,建立链接。

选项

简写全写含义
-s--symbolic建立符号链接而非硬链接

示例

ln Desktop/hi hello		# 建立硬链接hello,使hello与hi指向同一文件实体
ln -s Desktop/hi hello	# 建立软连接hello->hi

chmod

  chmod: change file mode,更改文件的权限设置(文件模式)。只有文件的所有者和超级用户才能使用此命令。设置方式有以下两种:

  使用符号描述:用 u、g、o 、a分别代指文件所有者、文件所属组的成员、其它用户、所有用户;用 +、-、= 分别表示增加权限、去除权限、赋予权限;用 r、w、x 分别表示读权限、写权限、执行权。

chmod u+x hello				# 给文件所有者增加执行权
chmod g-w hello				# 给文件所属组的成员去除写权限
chmod o=rwx hello			# 给其它用户赋予全部权限
chmod u+x,g-w,o=rwx hello	# 同时输入以上三条设置

  使用二进制码描述:每种权限使用一个二进制位,按照读、写、执行的顺序,编制成一个三位的二进制码。例如:dex(6)=bin(110)=rw-。再按照文件所有者、文件所属组的成员、其它用户的顺序组成一个序列。例如:u=rw,g=r,o=r就是644

chmod 644 hello	# chmod u=rw,g=r,o=r hello
chmod 777 hello # chmod a=rwx hello

chown

  chown:change file owner,更改文件所有者。只有文件的所有者和超级用户才能使用此命令。

选项

简写全写含义
-r--recursive递归地更改(当操作对象为目录时,则目录下所有文件都将进行相同的操作)

示例

chown root hello		# 将 hello 的所有者改为root
chown root:happy hello	# 将 hello 的所有者改为root,所属组改为happy
chown -r root Desktop	# 递归地更改 

chgrp

  chgrp:change file group,更改文件所属组。只有文件的所有者和超级用户才能使用此命令。

选项

简写全写含义
-r--recursive递归地更改(当操作对象为目录时,则目录下所有文件都将进行相同的操作)

示例

chgrp root hello		# 将 hello 的所属组改为root
chgrp -r root Desktop	# 递归地更改 

辅助工具

重定向

  Linux 中部分文件(一切皆文件)的文件描述符(file descriptor,fp)的取值是固定的。

fp文件
0stdin(标准输入)
1stdout(标准输出)
2stderr(标准错误输出)

标准输入重定向

符号含义
<0<重定向 stdin 的输入源
<<0<<重新定义 stdin 的读取分隔符

  以上符号默认 fp 为 stdin,故可省去 0。

标准输出重定向

符号含义
>1>重定向 stdin 的输出端,对于输出端的文件,其原有内容将被覆盖
>>1>>重定向 stdin 的输出端,输出内容将会追加到文件原有内容之后
ls > hello	# 命令输出的内容不会在控制台显示,而是以覆盖的方式打印到文件hello中
ls >> hello # 命令输出的内容不会在控制台显示,而是以追加的方式打印到文件hello中

标准错误输出重定向

符号含义
2>重定向 stderr 的输出端,对于输出端的文件,其原有内容将被覆盖
2>>重定向 stderr 的输出端,输出内容将会追加到文件原有内容之后
2>&1令 stderr 的输出端与 stdout 保持一致
ls >> hello 2>> log		# 将 ls 的标准输出追加到 hello 中,标准错误输出追加到 log 中
ls >> hello 2>&1		# 将 ls 的标准输出和标准错误输出追加到 hello 中

管道

  将一个命令的输出作为另一个命令的输入,即将一个命令的输出与另一个命令的输入连接起来,这种连接方式被称为管道,使用|表示。

示例

ls -l | cat -n

alias

  设置别名。别名有效期仅限本次登录账户期间,若要保持恒定,需修改配置文件。

选项

简写含义
-p列出所有已设置的别名

示例

alias -p			# 列出所有已设置的别名
alias				# 与上句等价
alias cp='cp -i'	# 设置cp -i的别名为cp

echo

  在标准输出打印内容。

选项

简写含义
-e使能转义符识别
-n不要加换行符(默认自动在结尾添加换行符)

示例

echo hello
echo -e 'hello word!\nThis is Linux.'
echo -en 'hello word!\nThis is Linux.' >> hello	# 向 hello 中追加内容

history

  打印曾输入的命令

选项

简写含义
-c清除

示例

history		# 显示所有
history 10	# 显示最近的10条
history -c	# 清除所有

xargs

  xargs 通过指定的途径获取源字符串,而后将其分割成多个参数,依次将参数传递给其后的命令(以下称其为实际命令)。

选项

简写全写参数含义
-LK指定每次传入参数的个数(以行来分割参数)
-n--max-argsK指定每次传入的参数个数(以不可见字符或指定的分割符来分割参数)
-0--null指定\0作为分割参数的分割符
-d--delimitercharacter指定分割参数的分隔符
-Estring指定源字符串中的结尾字符串,此时仅传递结尾字符串前的参数(若也使用了-0-d,则此命令无效)
-Ireplace_str指定占位符,将占位符写在实际命令中,实际命令执行时,占位符会被替换为 xargs 传入的参数(一般指定{}为占位符)
-a--arg-filefile从指定的文件中读取参数(默认从 stdin 读取,所以使用标准输入重定向也可达到相同的效果)
-p--interactive每次执行实际命令时都询问
-t--verbose打印出每次执行的实际命令

注:

  • -L-n-I互斥(POSIX规定)
  • 默认每次传递一个参数
  • 默认以行分割参数

示例

echo -e 'hello\nDesktop' | xargs -L 2 cp								# 将 hello 拷贝到 Desktop 目录下
echo 'hello Desktop' | xargs -n 2 cp									# 与上句等价
echo -e '1.txt\n2.txt\n3.txt' | xargs -E '3.txt' -I {} -t cp {} Desktop	# 将 1.txt 和 2.txt 拷贝到 Desktop 目录下

文本过滤器

  读取数据,而后对数据做处理,最后输出的程序被称为过滤器(filter)。

cat

  cat:concatenate files and print on the standard output,打印文件内容。

选项

简写全写含义
-n--number打印行号

示例

cat -n hello
cat >> hello			# 将在终端输入的内容追加到 hello 中,按 Ctrl+d 退出编辑(Ctrl+d 代表EOF)
cat file1 file2 > file3	# 将 file1 和 file2 拼接起来,以覆盖的方式写入到 file3 中

tac

  tac 是 cat 的倒序,顾名思义,该命令是以行倒序的方式打印文件内容。

rev

  rev:reverse,以行内倒序的方式打印文件内容。

示例

tac hello | rev > olleh	# 将 hello 的全部内容整体倒序,写入到 ollah 中

more

  查看文档。浏览方式与 Vim 一致。more 会将文件全部载入,而 less 仅载入需要查看的部分,因此 less 的反馈速度更快。此外,less 的功能也比 more 更多。因此,推荐使用 less。

less

  最佳的大型文档查看器。

head

  查看文档前十行内容。

选项

简写全写参数含义
-n--linesK显示前 K 行内容
-c--bytesK显示前 K 个字节的内容

示例

head hello		# 显示前10行
head -n 2 hello	# 显示前2行
head -c 5 hello	# 显示前5个字节

tail

  查看文档后十行内容。

选项

简写全写参数含义
-f--follow跟踪显示(若文件尾部有更新,则将同步显示到终端上)
-n--linesK显示后 K 行内容
-c--bytesK显示后 K 个字节的内容

示例

tail -f hello	# 跟踪显示后10行
tail -n 2 hello	# 显示后2行
tail -c 5 hello	# 显示后5个字节

cut

grep

awk

sed

用户管理

useradd

  useradd:add a user,添加用户。仅限超级用户使用。

选项

简写全写参数含义
-p--passwordpassword设置用户密码
-g--gidprimary_group设置首选用户组(缺省时,程序创建一个与用户名同名的用户组,并将用户的 gid 设为该组)
-G--groupsgroup_1,[group_2],...用户将加入的用户组(两个用户组名之间用逗号隔开)
-N--no-user-group不创建同名的用户组(此时会将 gid 设为系统固有的一个用户组 user)
-d--home-dirhome_directroy设置用户主目录(缺省时,程序在 /home 下创建同名的用户主目录)
-e--expiredateMM/DD/YY设置过期时间(缺省时,设为永不过期)
-c--commentstring描述用户(类似于个性签名)

示例

useradd -p 123456 -g happy -G eat,sleep -d /home/joyful -e 07/25/22 -c 'Enjoy yourself' Tom

usermod

  usermod:modify a user account,修改用户信息。大部分选项及其使用方法与 useradd 一致。

选项

简写全写参数含义
-l--loginnew_name修改用户名

userdel

  userdel:delete a user,删除用户。仅限超级用户使用。

示例

userdel Tom

passwd

  passwd:password,修改用户密码。

示例

passwd		# 修改当前用户的密码
passwd Tom	# 修改用户 Tom 的密码,此命令仅限超级管理员使用

id

  打印用户 ID 和所属组的 ID。

示例

id		# 打印当前用户
id Tom	# 打印 Tom 的

su

  su:substitute user,在当前用户下嵌套另一用户的操作环境。可使用exit命令退出。

示例

su Tom

sudo

  获取权限。被超级管理员授权拥有超级管理员权限的用户,使用该命令来行使超级管理员权限。

示例

sudo userdel Tom

groupadd

  groupadd:add a group,添加组。仅限超级用户使用。

示例

groupadd happy

groupmod

  groupmod:modify a group,修改组信息。仅限超级用户使用。

选项

简写全写参数含义
-n--new-namenew_name修改组名

示例

groupmod happy -n joyful

groupdel

  groupadd:add a group,删除组。仅限超级用户使用。

示例

groupdel happy

搜索

find

  文件查找。

首选项(real options)

简写含义
-P不跟随路径下的软链接(默认选项)
-L跟随路径下的软链接
-H只跟随在搜索路径中指明的软链接

选项(options)

参数名参数含义
-maxdepthK最大目录深度
-mindepthK最小目录深度
-regextypetype_name设置正则表达式的语法类型(默认使用 Emacs,其它类型使用man find查看,这里不再赘述)

查找条件(tests)

参数名参数含义
-nameshell_pattern文件名
-regexpattern使用正则表达式匹配文件名(包含路径的文件名)
-type[fdlbcps]文件类型(各符号的含义参看图表
-permMODEMODE指定的权限文件必须有,未指定的权限文件必须没有(MODE的写法参照 chmod
-perm-MODEMODE指定的权限文件必须有,未指定的权限文件可有可无
-perm/MODEMODE指定的权限文件至少拥有一个,未指定的权限文件可有可无
-useruser_name文件所有者
-groupgroup_name文件所属组
-size[+-]K[cwkMG]文件大小([+-]K的含义看下表cwkMG为单位,具体含义看下表)
-atime[+-]K上次访问文件距今的时间(以天为单位)(访问、改变和修改的区别,见图表
-amin[+-]K上次访问文件距今的时间时间(以分钟为单位)
-ctime[+-]K上次改变文件距今的时间时间(以天为单位)
-cmin[+-]K上次改变文件距今的时间时间(以分钟为单位)
-mtime[+-]K上次修改文件距今的时间时间(以天为单位)
-mmin[+-]K上次修改文件距今的时间时间(以分钟为单位)
-newer[acm]treference_time目标文件的访问时间(a)或改变时间(c)或修改时间(m)比参考时间(reference_time)的更新(时间格式与date -d的格式一致)
-newer[acm][acm]reference_file目标文件的访问时间(a)或改变时间(c)或修改时间(m)比参考文件(reference_file)的访问时间(a)或改变时间(c)或修改时间(m)的更新

符号含义
+K大于K(如-amin +10表示上次访问距今超过10分钟)
K等于K(如-amin 10表示上次访问距今为10分钟)
-K小于K(如-amin +10表示上次访问距今在10分钟之内)

符号含义
c1字节
w2字节
k1024字节
M1024k
G1024M

逻辑操作符(operators)

语法含义
\( expreesion \)括号(一些符号在命令行中有特殊的含义,在命令中使用时需加转义符\
\! expreesion -not expreesion逻辑非
expreesion expreesion expreesion -a expreesion expreesion -and expreesion逻辑与
expreesion -o expreesion expreesion -or expreesion逻辑或

动作(actions)

语法含义
-print对于找到的每个文件,打印完整的文件名(包括路径),然后换行
-print0对于找到的每个文件,打印完整的文件名,其后追加一个空字符
-printf format对于找到的每个文件,按格式打印(格式串中转义字符的含义,使用man find查看,这里不再赘述)
-fprintf file format对于找到的每个文件,按格式打印到文件中(格式串中转义字符的含义,使用man find查看,这里不再赘述)
-exec command {} \;对于找到的每个文件,都执行一次 command({}是占位符,即执行command时,{}将被具体的文件名替代)
-exec command {} +对找到的全部文件执行一次 command

语法

find [real_option] [search_path_1 [search_path_2] ...] [option_1 [option_2] ...] [operator_1] test_1 [operator_2] [test_2] ... [action_1 [action_2] ...]

示例

find /home -name '*.jpg'					# 在 /home 下查找所有 jpg 文件
find . -maxdepth 1 \! -type f				# 在当前目录下,限制搜索的最大目录深度为1,查找文件类型不是常规文件的所有文件
find -perm u=rw								# 在当前目录下查找文件所有者仅拥有读写权限,组内用户和其它用户没有任何权限的文件
find -perm 600								# 与上句等价
find -perm -u=rw,g=r						# 在当前目录下查找文件所有者拥有读写权限,组内用户拥有读权限的文件
find -perm -640								# 与上句等价
find -perm /a=r								# 在当前目录下查找三类用户中至少有一类拥有读权限的文件
find -perm /444								# 与上句等价
find -H . /bin -size +20k					# 在当前目录和 /tmp 下查找大于 20kbytes 的文件,若 /bin 为软链接,则其将被跟随,而其它软链接因未指明,所以将不会被跟随
find . -size +2G -o -mmin -10				# 在当前目录下查找大于 2Gbytes 或 10 分钟内修改过的文件
find . -size -1k -exec rm -f {} +			# 将当前目录下小于 1kbytes 的文件一次性删除(rm仅执行了一次)
find . -size -1k -exec rm -f {} \;			# 将当前目录下小于 1kbytes 的文件逐个删除(有多少个文件,就执行了多少次rm)
find . -size -1k -print | xargs rm -f		# 与上句等价
find . -size -1k -print0 | xargs -0 rm -f	# 与上句等价
find -newerat '1 days ago'					# 查找一天之内访问过的文件
find -atime -1								# 与上句等价
find -neweram hello							# 查找访问时间比 hello 的修改时间更近的文件

locate

  使用文件名查找文件的绝对路径。locate使用了/var/lib/mlocate/mlocate.db数据库,查找速度比直接在目录结构上查找的find命令快的多。但也存在缺点,首先,数据库是使用定时任务每天更新一次。当目录结构改变时,数据库不会同步更新,这就造成刚刚删除的文件,可能依然保留在数据库里;刚刚创建的文件,可能在数据库里查不到。为了提高查找的准确性,可以在使用locate命令前,先调用updatedb命令更新数据库,当然这可能花费较长的时间。其次,该命令仅支持用文件名来查找。

选项

简写全写参数含义
-c--count仅输出结果的数量
-l--limitK最多输出 K 个结果
-i--ignore-case查找时忽略大小写
-P--no-follow不跟随符号连接(默认跟随)
-0--null每打印一个结果追加一个空字符(默认追加换行符)
-r--regexp使用POSIX-Basic正则表达式匹配文件的绝对路径
--regex使用POSIX-Extended正则表达式匹配文件的绝对路径

示例

locate Desk					# 查找所有文件的绝对路径中包含有 Desk 字段的文件
locate /root/Desk			# 查找所有文件的绝对路径中包含有 /root/Desk 字段的文件
locate -r '^/root/Desktop$'	# 查找所有文件的绝对路径中匹配 ^/root/Desktop$ 的文件

updatedb

  updatedb:update a database for mlocate,更新 mlocate 数据库。

示例

updatedb

文件打包压缩

tar

二级命令

符号含义
-c打包文件
-x开箱归档
-r追加文件
-A追加归档
-u更新内容
-t查看内容

选项

符号含义
-zgzip压缩
-jbz2压缩
-Zcompress压缩
-v显示处理过程
-f后接归档文件名
-C指定解压后文件路径

示例

tar -cvf all_jpg.tar *.jpg			# 将当前目录下的所有jpg文件打包并显示过程,最终输出all_jpg.tar文件。
tar -czf all_jpg.tar.gz *.jpg		# 将当前目录下的所有jpg文件打包并使用gzip进行压缩,最终输出all_jpg.tar文件。
tar -cjf all_jpg.tar.bz2 *.jpg		# 将当前目录下的所有jpg文件打包并使用bz2进行压缩,最终输出all_jpg.tar文件。
tar -cZf all_jpg.tar.Z *.jpg		# 将当前目录下的所有jpg文件打包并使用compress进行压缩,最终输出all_jpg.tar文件。
tar -xzvf all_jpg.tar.gz -C /home	# 将all_jpg.tar.gz解压到/home路径下并显示过程。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值