Ubuntu小技巧16--常见命令使用方法

 

不知觉间Linux系统已用了好多年,各种命令和小工具也接触了若干个,各类笔记分布到各个系统上,可一直没来得及整理归档,最近决定开始慢慢整理linux相关的小工具和命令,把以前、现在和以后的笔记都陆续按类别整理在此,一来可以记录自己的点点滴滴,其次也可以分享给有需要的人学习!

 

1 系统命令

1.1 Linux man中的man就是manual的缩写,用来查看系统中自带的各种参考手册,但是手册页分为好几个部分,如下所示:
1)  Executable programs or shell commands
2)  System calls (functions provided by the kernel)
3)  Library calls (functions within program libraries)
4)  Special files (usually found in /dev)
5)  File formats and conventions eg /etc/passwd
6)  Games
7)  Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7)
8)  System administration commands (usually only for root)
9)  Kernel routines [Non standard

1.2 ln 链接命令
ln -s DirA/FileA  DirB/FileB
将A目录或者文件链接到B目录或文件,使用场景:vim默认安装在用户目录的时候会出现root权限时候无法使用普通用户的vim配置,此时可以:ln -s /home/usrname/.vim  /root/.vim 解决该问题

1.3  用户管理相关
(1)su 实例名称  即可切换到对应的用户下;
su 切换到root目录下面;
(2)adduser u1 添加一个u1的用户,此时该用户只有读的权限,此时需要编辑etc/sudoers
添加u1 ALL=(ALL:ALL) ALL ,保存即可让u1拥有读写执行权限;
userdel -lf 删除用户已经用户目录等所有文件
(3)如何分配用户可用磁盘空间?
待完善??
(4)root用户可以修改任何用户的j权限,可以增加删除任意用户
124对应xwr
ls -ld /home/usr1 查看用户usr1的权限,
新建用户时默认权限为0755(见/etc/adduser.config),对应生成的为drwxr-xr-x,即:本用户读写执行权限-组内其它成员读执行权限-其它用户读执行权限,
需求1:修改本用户,使除本用户之外的为不可读写执行,chmod /home/usr1 0700
需求2:使其它用户有读权限,chmod /home/usr1 0755
0711是只有执行的权限,由于可以执行,所以可以cd到该用户目录,但是无法查看文件,更无法写文件;
0744是只有读权限,但是由于没有执行权限,所以无法cd到该目录;
综上:像操作该目录就要加执行权限,只读权限为0755(可执行),修改方式为使用该用户或者root执行chmod  0755 usr1

linux的每个文件和文件夹都有它的所有者和所属的组,这样是为了控制文件或文件夹的权限(读写和操作三个权限)。
1、用ll 命令展示一个文件或文件夹的时候,你可以看到前面有是一个十位的字符串,第一个判断是文件还是文件夹,2-4这三个是所有者的读写执行权限,5-7是组内其他成员的读写执行权限,8-10是其他用户的读写执行权限。
2、以上2-4/5-7/8-10,可以用二进制表示,如755 ,表示rwxr-xr-x,即所有者有读写执行权限(7),组内其他用户有读执行权限(5),其他用户有读执行权限(5)。
2、改变文件或文件夹的权限,方法如下:
chmod  755 文件  (755可以根据所需权限改成其他数字)
如果不是root用户创建的文件,其他非root用户只有读权限r;1x-2w-4r

(4) 用户登录相关命令
who #查看当前登录用户信息
who /var/log/wtmp #查看自从wtmp创建以来每次登录
user #查看当前登录用户
last #查看用户登录历史
lastlog #查看所有用户最近一次等登录历史

1.4 进程-程序相关
ps -ef可以查看隐藏的进程
ps -a查看当前所有的进程
pstree -pl 查看所有进程,以tree形式显示
ps -aux 查看所有进程相关信息

1.5 Linux查看磁盘文件使用情况
df -h 查看各个分区磁盘使用情况;
du --max-depth=1 -h 查看当前文件夹下磁盘使用情况(即各个文件夹大小),最后一行显示当前目录文件总大小(无-h默认单位为字节);
du -sh 形式当前文件夹总大小,等价于
du --max-depth=0 -h;
du -sh /opt 查看opt目录大小;
df -lh 查看磁盘使用情况,同df-h;

1.6 Linux常见压缩命令
01-.tar格式
解包:$ tar xvf FileName.tar
打包:$ tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)
02-.gz格式
解压1:$ gunzip FileName.gz
解压2:$ gzip -d FileName.gz
压 缩:$ gzip FileName
03-.tar.gz格式
解压:$ tar zxvf FileName.tar.gz
压缩:$ tar zcvf FileName.tar.gz DirName
04-.bz2格式
解压1:$ bzip2 -d FileName.bz2
解压2:$ bunzip2 FileName.bz2
压 缩: $ bzip2 -z FileName
05-.tar.bz2格式
解压:$ tar jxvf FileName.tar.bz2
压缩:$ tar jcvf FileName.tar.bz2 DirName
06-.bz格式
解压1:$ bzip2 -d FileName.bz
解压2:$ bunzip2 FileName.bz
07-.tar.bz格式
解压:$ tar jxvf FileName.tar.bz
08-.Z格式
解压:$ uncompress FileName.Z
压缩:$ compress FileName
09-.tar.Z格式
解压:$ tar Zxvf FileName.tar.Z
压缩:$ tar Zcvf FileName.tar.Z DirName
10-.tgz格式
解压:$ tar zxvf FileName.tgz
11-.tar.tgz格式
解压:$ tar zxvf FileName.tar.tgz
压缩:$ tar zcvf FileName.tar.tgz FileName
12-.zip格式
解压:$ unzip FileName.zip
压缩:$ zip FileName.zip DirName
13-.lha格式
解压:$ lha -e FileName.lha
压缩:$ lha -a FileName.lha FileName
14-.rar格式
解压:$ unrar x FileName.rar 其中x表示解压到文件夹,若用e则解药到但前路径下
压缩:$ rar e FileName.rar
15-.tar.xz
解压:
方法一:需要用到两步命令,首先利用 xz-utils 的 xz 命令将 FileName.tar.xz 解压为 FileName.tar,其次用 tar 命令将 FileName.tar 完全解压。
xz -d FileName.tar.xz
tar -xf FileName.tar
方法二(推荐):tar -Jxf FileName.tar.xz
压缩:
方法一:也是用到两步命令,首先利用 tar 命令将 FileName 文件夹打包成 FileName.tar,其次用 xz-utils 的 xz 命令将 FileName.tar 压缩成 FileName.tar.xz。
tar -cf FileName.tar FileName/
xz -z FileName.tar
方法二(推荐):tar -Jcf FileName.tar.xz FileName/

1.7 linux下常见的关机重启操作
poweroff 关机
reboot 重启
shutdown -r now  关机后重启
shutdown -h now  关机后不重启
shutdown -r +10 10分钟后重启
shutdown -r 10:00 10点钟重启
shutdown -h +10 10分钟后关机
shutdown -h 10:00 10点钟关机

1.8  bash profile介绍
.bash_profile 类似于编程中的构造函数,当登录shell时,shell会寻找该文件做环境初始化。
.bashrc 是在bash环境时.bash_profile的替补。
.bash_logout 类似于编程中的析构函数,当登录shell退出时,shell会寻找该文件,并按其指示办事。 
/etc/profile是系统文件,对系统下全体用户起作用

1.9 常用输出
tail -10 fname
head -10 fname
sed -n '5,10p' fname 输出5-10行内容
tac逆序输出文本内容
rev逆序输出字符串

1.10 系统属性查看
(a)lsb_release -a 查看系统版本
(b)cat /etc/issue 系统版本
(c)cat /proc/version 系统相关信息
(d)uname -a

1.11 文件大小数量相关操作
ls -l filename | awk '{print $5}'
du -b filename | awk '{print $1}'
wc -c filename | awk '{print $1}'
wc -c < filename
stat -c "%s" filename
以上方法都可以查看filename的大小,单位为bit
ls -Rl|grep '^-'|wc -l 统计当前目录下文件数量
ls -Rl|grep '^d'|wc -l 统计当前目录下文件夹数量

1.12 查看硬件信息
lspci  | grep -i vga(或者nvidia) 查看当前显卡信息
dmidecode 查看所有硬件信息
cat /proc/cpuinfo 查看cpu信息

1.13 Ubuntu下载常用命令源码方法
步骤:whereis '命令' -> dkpk -S '命令绝对路径' -> apt-get source '上一步中命令的包'
下载ls命令源码流程如下:

root@xg:/home/xg/Desktop/test_file# whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz
root@xg:/home/xg/Desktop/test_file# dpkg -S /bin/ls
coreutils: /bin/ls
root@xg:/home/xg/Desktop/test_file# apt-get source coreutils
Reading package lists... Done
Need to get 5,294 kB of source archives.
Get:1 https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic/main coreutils 8.28-1ubuntu1 (dsc) [2,302 B]
......
dpkg-source: info: applying 99_float_endian_detection.patch
W: Download is performed unsandboxed as root as file 'coreutils_8.28-1ubuntu1.dsc' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)
root@xg:/home/xg/Desktop/test_file# ls
coreutils-8.28 coreutils_8.28.orig.tar.xz
coreutils_8.28-1ubuntu1.debian.tar.xz coreutils_8.28.orig.tar.xz.asc
coreutils_8.28-1ubuntu1.dsc

1.14 内存相关命令

1) 清除buffer和cache中内容
free -m
echo 1 > /proc/sys/vm/drop_caches表示清除pagecache。
echo 2 > /proc/sys/vm/drop_caches:表示清除回收slab分配器中的对象(包括目录项缓存和inode缓存)。slab分配器是内核中管理内存的一种机制,其中很多缓存数据实现都是用的pagecache。
echo 3 > /proc/sys/vm/drop_caches:表示清除pagecache和slab分配器中的缓存对象。

1.15 磁盘相关命令

1) fdisk -l 查看磁盘信息
2) fdisk /dev/sdb (n参数可以用于创建新的分区)
1) pvcreate /dev/sdb 创建物理卷
2) vgcreate test /dev/sdb 创建卷组test
3) lvcreate -L 1G -n lv01 test 在卷组test上创建1个1G的逻辑卷lv01,此时 df -h会产生一个 /dev/mapper/test-lv01
4) mkfs.ext4 /dev/test/lv01  格式化磁盘为ext4格式
5) mount /dev/test/lv01 /home/xg/lv01/ 挂载逻辑卷到/home/xg/lv01目录
6) lvextend -L +100M /dev/test/lv01 对卷添加100M空间
对于已经挂载的目录,最好执行 resize2fs /dev/test/lv01 使其立即生效; 
7) lvreduce -L -1G /dev/test/lv02  对卷减少1G空间
8) lvcreate -L 500M -n lv02 test 创建了逻辑卷lv02
9) lvremove /dev/test/lv02 删除逻辑卷lv02
10) vgremove /dev/test 删除卷组test
11) wipefs -f -a /dev/sdb 清除磁盘
相关常用命令包括:vgdisplay,lvdisplay,blkid,lsblk

1.16 分区相关命令
cat /proc/mounts | grep -i ro 可以查看磁盘挂载的格式;
mount -o remount,rw /usr 以读写的格式重新挂载/usr目录;

1.17 网络相关命令
1)查看ip 链接数 netstat -tun|awk '{print $5}'|cut -d : -f1|sort|uniq -c|sort -n;
      netstat -nltp 查看所有网络占用情况,-nlep可查看使用的进程
2)查看网卡流量 iftop -i net-interface
3)查看路由表 route -n
4)跟踪到目的地址的路由链路 traceroute www.baidu.com
5)启动或者关闭网卡 ifup | ifdown net-card-name

1.x 其它命令1)kill -l #查看linux系统下的所有信号类型
2)查看目的大小:进入目录 du -sh;df -h 查看各个硬盘分区大小和使用情况;
3)init 0(关机) 6(重启) 1(单用户) 2(多用户) 5(X11,xwindow);
4)>>为追加; > 为覆盖;
5)history可以查看历史命令;history -c可以删除历史命令;
6)find /path -iname filename 可以查找文件名,并且不区分大小写,去掉i后就区分大小写了;
7)journalctl --disk-usage #查看/run/log下journal占用量

 

2 专业软件命令

2.1 scp和ssh命令
scp cmd:
scp local_file remote_username@remote_ip:remote_folder
scp -r local_folder remote_username@remote_ip:remote_folder
scp remote_username@remote_ip:remote_file local_folder
scp -r remote_username@remote_ip:remote_folder local_folder
ssh cmd:
ssh remote_username@remote_ip
input pwd,then we can visit remote PC

2.2 vim相关命令
vi打开时候经常出现有xxx.swp文件存在,此时将其删除即可,ll -a 就可以发现对应的swp文件,将其删除就可以正常打开文件,且不会出现提示;
vi移动到行末End(不是数字键盘上面的),或者$
vi移动到行首Home,或者0(不是数字键盘的0,是)对应的那个0)2.3 grep sed awk 三大文本处理工具
grep 文本搜索工具,仅仅过滤文本的话效率搞,可结合正则表达式;
sed 流编辑器,默认只处理模式空间,不处理原数据,若处理的数据是针对行进行处理,可用sed;
awk 报告生成器,格式化以后显示,若处理的数据需要生成报告之类的信息,或处理数据是按列进行处理的,最好用awk
以查询IP为例:
hostname -I
ifconfig eno4|grep -Po '(?<=addr:)\S+'
ifconfig eno4|sed -n '2s#^.*dr:##gp' | sed 's# B.*$##g
ifconfig eno4|awk -F "[ :]+" 'NR==2{print $4}'
eno4需要更换为实际的网卡,如eth0
ps -ef|grep docker #找到所有与docker相关的进程

 

3 常见错误处理

3.1 从其它文件夹拷贝文件到另外电脑,会出现无权限访问情况,此时可以sudo chmod- R 777 file/*  ,然后就有读写删除权限了
chmod u+xrw file等价于chmod 777 file ,其中x-1,w-2,r-4

3.2 终端后台启动程序通常启动程序后,终端会被占用,需要新开终端才能执行其它任务,此时可以通过后缀
&的方式标注为后台程序;
如redis-server &就可以将server设置为后台,然后再打开redis-cli进行操作了;
ctrl  z 就是挂起一个进程,暂停的意思
fg是将进程放到前台并唤醒
bg是将进程放到后台并唤醒
ctrl+h,在shell就是向左删除的作用
screen cmds #通过screen方式执行命令,执行之后ctr+A,再ctrl+d就可以将命令放到后台执行,其对应的文件在/run/screen目录
screen -ls #查看所用在运行的screen session
screen -r pid #恢复-ls中pid对应的终端session

 

4 说明

本文中的虚拟机为VM12.X版本,其它Linux配置若为桌面软件则为Ubuntu Desktop 1604 版本,若为非桌面版则为Ubuntu Server 1601版本,大部分命令主要用于Ubuntu,工具命令会是基于Centos系统的!