此文为本人在学习Linux基础操作过程中的一些笔记与汇总,由于本人知识水平有限,错误在所难免,如若出现错误,恳请指教。
如果这篇文章对你有所帮助,不妨点赞与收藏,你们的支持是我继续写博客的最大动力。
文件及目录
-
ls
:查看目录下内容ls [-aAlh] <dir or file> -a #列出所有文件,包括隐藏文件 -A #列出所有文件,包括隐藏文件但不包括"."和".."两个目录文件 -l #列出文件的详细信息 -h #以易读单位显示文件的详细信息
-
cd
:切换当前工作目录cd /etc #直接切换到/etc目录 cd .. #切换到上层目录 cd . #切换到当前目录 cd #回到自己的家目录 cd ~ #同上 cd ~<user> #到用户<user>的家目录 cd - #回到上次工作目录
-
pwd
:打印工作目录pwd [-LP] -L #显示逻辑工作目录,链接文件当前所在的目录 -P #显示物理工作目录,链接文件所指向的文件真实所在的目录
-
cp
:拷贝cp [-irapdslu] <source> <destination> -i #若文件存在,询问用户 -r #递归复制 -a #pdr的集合 -p #连同文件属性一起拷贝 -d #若源文件为连接文件,则复制连接文件的属性 -s #拷贝为软连接 -l #拷贝为硬连接 -u #源文件比目的文件新才拷贝
-
mv
:移动文件及目录mv <source> <target>
-
rm
:删除文件及目录 -
mkdir
:创建目录mkdir [-pm] <dir> -p <dir> #自动创建父目录 -m <mod> <dir> #设置权限为<mod>-掩码,若<mod>为777,最后文件夹的权限为755,这与掩码022有关
-
tree
:打印目录树 -
tar
:文件归档与压缩 -
ln
:创建链接文件ln -s <file> <link> #软链接 ln <file> <link> #硬连接,相当于给<file>取了一个别名 ls -ali #查看硬连接文件的节点也是相同的
-
rmdir
:删除目录 -
basename
:一个路径最后一个文件夹/文件名称 -
dirname
:一个路径的第一个文件夹名称 -
文件的特殊权限
权限 作用的对象 效果 例子 set_uid s(原先没有x则为S) 二进制程序文件,非脚本 用户在执行该程序时获取程序所有者权限 用户修改密码时获得passwd权限 set_gid s(原先没有x则为S) 目录和二进制程序文件 用户在该目录里,有效组变为目录所属组 wall
命令sticky Bit t 目录 在该目录下,用户只能删除自己创建的内容 /tmp
文件内容的修改与查看
-
touch
:创建空白文件touch [-acdmt] <file> -a #仅修改访问时间 -c #仅修改文件时间,若文件不存在,不新建 -d #修改文件日期 -m #仅修改mtime -t #修改文件时间[yymmddhhmm]
-
cat
:正向连续读cat [-AbEnTv] <file> #文件名是作为参数传入 -A #相当于-vET -v #列出看不出的字符 -E #显示断行符为$ -T #显示TAB为^I -b #列出行号 -n #列出行号,连同空行也编号
-
tac
:按行反向连续读 -
nl
:输出行号显示文件nl [-bnw] <file> -b #行号指定方式 -b a #相当于cat -n -b t #相当于cat -b -n #列出行号的表示方法 -n ln #行号在屏幕最左边显示 -n rn #行号在自己字段的最右边显示 -n rz #行号在自己字段的最右边显示,前面自动补全0 -w <num> #行号所占位数
-
vim
:文本编辑器 -
echo
:打印文本 -
more
:一页一页地显示文件内容more <file> /string #向下查找string关键字 :f #显示文件名称和当前显示的行数 q #离开
-
less
:与more相似,但是比more更好,可以上下翻看less <file> /string #向下查找 n #继续向下查找 /?string #反向查找 N #继续反向查询
-
head
:只看文件的头几行 -
tail
:只看文件的末尾几行 -
od
:以二进制方式查看文件内容 -
diff
:对比文件 -
grep
:检索信息cat *.c | grep "haochen" #在当前目录的所有.c文件中查找“haochen” ./a.out < "haochen" #将haochen作为./a.out的输入,< > 都有输出流流向的意思。 cat << haochen #指定haochen为分隔符,当输入haochen时终止输入并输出
-
文件隐藏属性:
chattr [+-=] [ASacdistu] <file or dir> A #不修改atime S #同步写入,不通过缓冲的形式写入 a #只能增加数据 c #自动压缩,解压 d #不会被dump程序备份 i #不能删除,修改,建立连接 s #文件删除时,直接从磁盘删除 u #文件删除时,数据内容存在磁盘中
文件查找与定位
文件的三个时间
mtime:内容数据改动(modify)时才更新这个时间
ctime:文件的权限,属性改动(chmod)时更新这个时间
atime:文件的内容被取用(access)时,更新这个时间
-
find
:多样化高级查找find [PATH] [option] [action] #与时间相关的参数:-atime, -ctime, -mtime -mtime n #n天前的"一天之内"修改的文件amin -mtime +n #n天之前,不包含n,修改过的文件 -mtime -n #n天之内,包含n,修改过的文件 -newer <file> #比<file>还要新的文件 #与用户或用户组相关的参数 -uid <id> #用户UID为n -gid <id> #群组GID为n -user <name> #用户名为<name> -group <name> #群组名为<name> nouser #文件所有者不存在 nogroup #文件所在组不存在 #与文件权限及名称相关的参数: -name <file> #文件名为<file> -size [+-] SIZE #查找比SIZE大或小的文件 -type <TYPE> #查找文件类型为<TYPE>,<TYPE>可以是 f b c d l s p -perm <mode> #mode刚好等于的文件 -perm -<mode> #权限超过mode的文件 find -exec ls -l {} \; #将find找到的路径放入大括号内,ls是action的命令,-exec相当于action开始,分号相当于action的结束
-
which
:查找PATH路径下第一个可执行文件(系统决定使用的那个) -
whereis
:查找可执行、源码、帮助手册whereis [-bmsu] <file or dir> -b #只查找二进制文件 -m #只查找manual路径下的文件 -s #只查找source源文件
-
locate
:定位任何文件(可部分查找)无法找到刚新建的文件,需要先通过管理员权限执行
updatedb
命令更新文件索引数据库locate [-ir] <keyword> -i #忽略大小写 -r #后面可接正则表达式
数据提取操作
-
cut
:切分cut [-dfc] <file> -d <char> #以自定义字符<char>为分隔符分割,默认为制表符 -f <num> #显示第<num>个字段的内容 <num>有三种形式:[n- | n-m | -m] ~ [第n个到最后一个字段 | 第n到m个字段 | 第一个到第m个字段] -b <byte> #以字节<byte>为单位进行分割 -c #以字符为单位进行分割
-
sort
:排序sort [-fbMnrtuk] <file or stdio> -f #忽略大小写 -b #忽略最前面的空格符 -M #以月份名称排序 -n #以纯数字方式排序,不加-n则默认以字典序排列 -r #反向排序 -u #对结果去重 -t <char> #以自定义字符<char>为分割符分割,默认[TAB] -k <num> #以分割后的第<num>个区间排序
-
uniq
:去重uniq [-ic] <file> -i #忽略大小写字符的不同 -c #去重后进行计数
-
split
:把一个文件切分成若干个小文件split [-bl] <file> -b <size> #切分为<size>大小的文件 -l <num> #以num行作为大小切分
-
tr
:替换、压缩和删除tr [cdst] <字符集> <字符集> -c #取代所有不属于第一个字符集的字符,字符集<a-zA-Z>代表所有字母>,<0-9>代表所有数字 -d #删除所有属于第一字符集的字符 -s #压缩每一个连续的的重复字符段为一个字符 -t #先删除第一个字符集较第二字符集多出的字符 $ echo "abcdefghjl" | tr "ach" "321" $ 3b2defg1jl $ tr "[:lower:]" "[:upper:]" <file> #将<file>文件中的小写字符变为大写字符
-
wc
:统计字符,字数,行数wc [-lwm] <file or stdin> -l #仅列出显示行数 -w #仅列出显示字数 -m #仅列出字符个数
-
grep
:检索grep [-acinv] <string> <file> -a #将二进制文件以普通文件的形式搜寻数据 -c #统计在每个<file>中搜寻到<string>的次数 -i #忽略大小写 -n #顺序输出<string>在<file>中的行号 -v #反向输出(输出没找到的) last | grep -v ^$ | grep -v begins | cut -d " " -f 1 | sort | uniq -c ##查看最近登陆的用户及登录次数 #^代表行开始,$代表行末,^$组合在一起代表空行
-
awk
:数据整理、数据分析,对文本进行格式化输出、格式化统计并生成数据报表awk [-Ffv] 'BEGIN{ commands } pattern { command } END{ commands }' file -F <fs> #<fs>是所指定输入分隔符,<fs>可以是字符串或正则表达式也可以省略,如果省略,则默认空格/回车/<tab>作分隔符 awk -F 'BEGIN{ printf("%s\n", "Begin") } pattern { printf("%s\n", $1) } END{ printf("Bye") }' /etc/passwd #上面命令的意思是,在开头打印"Begin",读取/etc/passwd文件,并以默认分隔符分割,对每段进行打印,最后打印"Bye" -v var=<value> #赋值一个用户定义的变量,将外部变量传递给awk -f <scripfile> #从文本文件<scripfile>中读取而不是命令 #第一步:执行BEGIN{ commands }语句块中的语句; #第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ commands }语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,知道文件全部被读取完毕. #第三步:当读至输入流末尾时,执行END{ commands }语句块.
-
sed
:数据替换、查找、删除,与vim
中的操作类似 -
tee
:双向重导项,既保存又输出到stdout
中tee [-a] <file> -a #追加到文件后面而不是覆盖它
-
xargs
:参数代换,把前一个命令的输出当作后一个命令的参数xargs [-0pne] <command> -0 #将特殊字符还原为普通字符 -e<arg> #当xargs读到指定的一个<arg>时停止(<arg>也会读入),而<arg>后续的参数不再读入 -p #执行指令前询问 -n <num> #每次执行command时从参数流中读取<num>个参数,不加则默认一次性读取参数流中的所有参数 echo "/etc/" | xargs ls
用户相关命令
-
useradd
:新建用户useradd [-dmMsugGnefcD] <user> -d <dir> #指定$HOME目录 -m #自动建立$HOME目录 (/home/${<user>}) -M #不自动建立$HOME目录 -s <shell> #设置用户登录shell -u <UID> #设置用户编号 -g <group> #设置用户归属群组 -G <group> #设置用户归属附加群组 -n #不建立以用户名称为群组名称的群组 -e <days> #设置账号过期时间,绝对时间 -f <days> #缓冲时间,days天后关闭账号 -c <string> #设置用户备注 -D <expression> #更改预设值 /etc/login.defs #新建用户规则 /etc/skel/ #新建用户默认文件
-
userdel
:删除用户userdel -r <user> -r #删除用户相关文件和目录(邮件,$HOME目录)
-
usermod
:修改用户usermod [-cdefgGlLsuU] <user> -c <string> #修改备注信息 -d <dir> #修改$HOME目录 -e <days> #账户失效时期 YY-MM-DD -f <days> #密码过期后宽限的日期 -g <group> #修改用户所属群组 -G <group> #修改用户所属附加群组 -l <user> #修改用户账号名称 -L #锁定用户密码,使密码无效 -s <shell> #修改用户登录后所使用的shell -u <UID> #修改用户ID -U #解除密码锁定
-
passwd
:修改密码passwd [-dleSxnf] <user> -d #清除密码 -l #锁定账户 -e #使密码过期 -S #显示密码认证信息 -x <days> #密码修改后最大使用天数 -n <days> #密码修改间隔时间 -f #更改用户信息(用户昵称) -i #密码过期后宽限时间
-
gpassws
:设定群组密码gpasswd [-adrAM] <group> -a <user> #将用户加入群组 -d <user> #将用户从群组中删除 -r #删除密码 -A <user> #将用户设置为群组管理员 -M <user1>, <user2> #设置群组成员
-
su
:切换用户su [-lmpfc] <user> su - <user> #环境变量还原,推荐,而无-则环境变量保持 su -l <user> #同上 su -m #不更改环境变量 su -p #同上 su -c <command> #切换后执行命令,并退出
-
sudo
:获取管理员权限sudo [-siul] <command> -s #切换到root shell -i #切换到root shell,并初始化 -u <user> | <UID> #通过<user> | <UID>决定执行命令的身份 -l #显示当前用户的权限
-
chgrp
:修改所属组chgrp <group> <file> #修改<file>文件所属的组为<group>
-
chmod
:文件权限修改chmod a=x <file> #令<file>文件的root、组、用户只有执行权限 chmod a+x <file> #给<file>文件的ugo都赋予执行的权限 chmod o-x <file> #o失去对<file>文件的执行权限 chmod 755 <file> #设置<file>文件的权限为rwxr-xr-x chmod u=rwx,go=rx <file> #设置file文件的权限为rwxr-xr-x
-
chown
:修改文件所属chown <user> <file> #修改<file>文件的所属用户为<user> chown <user>:<group> <file> #修改<file>文件的所属用户为<user>,所属组为<group> chown -R <user>:<group> <dir> #修改<dir>目录及目录下的所有文件的所属用户为<user>,所属组为<group>
-
chsh
:更改用户SHELLchsh -s <path of shell> <user>
-
id
:显示用户信息id [-gGnru] <user> -g #下属所属组ID -G #显示附加组ID -n #显示用户,所属组,或附加群组的名称 -u #显示用户ID -r #显示实际ID
-
logout
:退出用户 -
exit
:退出用户
进程相关命令
-
ps
:报告当前进程状态ps -ef #用标准syntax列出系统的所有进程 ps -aux #列出所有正在运行的进程
-
kill
:删除执行中的程序和工作kill [-alpsu] <PID> -a #处理当前进程时,不限制命令名和进程号的对应关系 -l <signal ID> #不加信号ID,则列出全部信号 -p <PID> #给PID的进程只打印相关进程号,而不发送任何信号 -s <signal ID> | <signal name> #指定要发出的信号 -u #指定用户 kill -9 <PID> #强制杀死进程 kill <PID>
-
pkill
:批量按照进程名杀死进程pkill [-onpgt] <process name> -o #起始<PID> -n #结束<PID> -p <PID> #指定父进程号发送信号 -g #指定进程组 -t <tty> #指定终端
-
killall
:批量杀死进程 -
crotab
:定时任务 -
<ctrl> + z
:挂起前台进程 -
fg
:将进程调至前台运行 -
bg
:让挂起的进程后台执行 -
jobs
:查看挂起和后台进程 -
pstree
:以树状显示进程派生关系pstree [-acGhHlnpuU] -a #显示每个程序的完整指令 -n #使用PID排序 -p #显示PID -u #显示用户名 -l #使用长列格式显示树状
-
pgrep
:查找进程IDpgrep [-onlpgtu] <process name> -o #起始进程号 -n #结束进程号 -l #显示进程名称 -p <PID> #指定父进程 -g <GID> #指定进程组 -t <tty> #指定开启的进程终端 -u <UID> #指定uid
系统信息获取命令
-
date
:查看或设置系统时间与日期date [dsu] <arg> -d <string> #显示字符串<string>所指的日期 -s <string> #设置时间为字符串<string>所指的时间 -u #显示GMT(如果是CST的情况下) #参数: #<+日期格式>:显示使用的日期格式
-
df
:查看文件系统 -
du
:获取目录文件大小 -
free
:打印系统情况和内存情况free [-bkmgotsh] -b/-k/-m/-g #分别以bit/Kb/Mb/Gb显示 -o #忽略缓冲区调节列 -t <seconds> #每隔<seconds>执行一次 -h #以可读形式显示
-
top
:显示当前系统进程情况,内存,CPU等信息 -
htop
:查看系统信息 -
dstat
:试试监控磁盘,CPU,网络等dstat dstat 2 #每隔两秒显示一次 dstat 2 10 #每隔两秒显示一次,总共显示10次 dstat -list dstat 2 10 -output /tmp/data.csv
-
nmon
:查看系统信息 -
ifconfig
:查看IP信息 -
uname
:打印当前系统信息uname [options] -a #全部信息 -m #电脑类型 -n #网络上主机的名称 -v #os版本 -p #处理器类型 -i #硬件平台 -o #操作系统名称
-
last
:显示用户最近登录信息last [fnx] <user...> <tty...> -f <file> #指定记录文件 -n <num> #指定输出记录数 -x #显示系统关机,重新关机等信息 last | grep -v ^$ | grep -v begins | cut -d " " -f 1 | sort | uniq -c ##查看最近登陆的用户及登录次数 #-v 反选
-
who
:显示当前登录系统的用户信息who [option] <file | arg1 arg2> -H #各栏的标题信息列 -u #显示空置时间 -q #只显示登录系统的用户名称和总人数
-
uptime
:打印系统运行时长和平均载荷uptime [phsV]
-
w
:当前登录用户列表及正在执行的任务 -
whoami
:打印当前有效的用户名称whoami #打印当前身份,当普通用户切换到root时,显示root
-
cal
:显示日历 -
wall
:给所有用户发信息wall <info> echo <info> > /dev/pts/0 #最后一个参数不一定是0,需要通过w指令获取用户的tty
-
dstat
:类似于windows的任务管理器,需要另外安装
其他命令
-
ssh
:远程连接 -
scp
:远程拷贝 -
wget
:获取http文件 -
ping
:测试远程主机 -
poweroff
:关机 -
reboot
:重启 -
cron
:定时任务(重启也不会失效,除非用户被删除)crontab -e #编辑 crontab -l #显示列表 crond #守护进程
-
at
:在指定的时间执行一个指定的任务at [ldc] <args> -l #列出当前用户的at任务列表,也可以使用atq -d <task number> #删除一个at任务,等同于atrm -c <task number> #显示该任务的实际内存及详情 #时间指定方式 #HH:MM #HH:MM YYYY-MM-DD #HH:MM[am|pm] [month] [date] #HH:MM[am|pm] + number[minutes|hours|days|weeks] #now + <时间> #at now + 2 days #atd为at提供守护进程,需要保证atd启动
-
sleep
:睡眠 -
time
:查看运行一个命令的时间time ./a.out
实际使用遇到疑惑
寻找所需指令
-
<tab>
:命令补全 -
history
或<ctrl> + r
:检索历史命令 -
man -k
与grep
搭配检索man -k copy | grep ssh
-
apt
sudo apt-cache search nmon
如何使用
-
直接运行指令获取help手册
-
–help
-
man
或info
-
tldr
$ tldr ssh-copy-id Install your public key in a remote machine's authorized_keys. - Copy your keys to the remote machine: ssh-copy-id {{username@remote_host}}##大括号内是需要更改的变量 - Copy the given public key to the remote: ssh-copy-id -i {{path/to/certificate}} {{username}}@{{remote_host}} - Copy the given public key to the remote with specific port: ssh-copy-id -i {{path/to/certificate}} -p {{port}} {{username}}@{{remote_host}}
-
vim
中可以通过<shift> + k
快速调用函数的相关手册 -
国外stackoverflow论坛