Skip to content

Latest commit

 

History

History
448 lines (195 loc) · 7.69 KB

Linux.md

File metadata and controls

448 lines (195 loc) · 7.69 KB

Linux学习笔记

==HELP==

man [CMD] (manual) 或 [CMD] --help

  • 前者更好用一些

(missing semester上的第二课也有讲一些帮助

路径和目录

. 当前目录

.. 上一级目录

~ 当前登录用户的用户目录

* 通配(globbing)任意数量个字符(包含0个吗?), 单独用的话表示某目录下的全部文件

? 通配一个字符

/ 根目录

绝对路径要以根目录/为起始, 相对路径不需要

基本操作

ls <dir>

  • 获取目录下的内容(list files)
  • 默认为当前目录

cd <dir>

  • 改变当前目录(change directory)
  • 默认改变到~目录
  • cd - 返回到之前所在目录

pwd

  • 给出当前目录的绝对路径(print working directory)

realpath

mkdir <dir>

  • 新建目录(make directory)

cp [-r] <src> <dst>

  • 拷贝文件(copy file)
  • -r 递归拷贝

./<file>

  • 执行文件

rm [-rf] <file>

  • 删除文件(remove file)
  • -r 递归删除, 否则删除目录的时候不会删除它底下的文件
  • -f 强制删除, 不需要确认
  • 执行rm命令的时候要慎重! 慎用sudo!! 慎用绝对路径!!!

rmdir

  • 删除目录
  • 可以用来防止一不小心把一大堆文件全删了

mv

  • 重命名文件, 或者移动文件/目录
  • mv [src] [dst] 重命名
  • mv [srcdir] [dstdir] [newname] 移动并重命名

shell

杂七杂八的操作

安装软件

.deb包: # apt install ./<file>.deb

更新软件

sudo apt update && apt upgrade

reboot 重启

查看内核温度

sensors or

vcgencmd measure_temp or

cat /sys/class/thermal/thermal_zone0/temp

  • 注意不同方法显示出的温度可能略有差别

date 打印时间

which 查找命令的程序所在的位置

clear or ctrl + L 清空命令行界面

修改显示分辨率

xrandr 查看当前分辨率和显示器信息

cvt 2560 1440 得到分辨率modeline, 会打印一段这样的文字:

# 2560x1440 59.96 Hz (CVT 3.69M9) hsync: 89.52 kHz; pclk: 312.25 MHz
Modeline "2560x1440_60.00"  312.25  2560 2752 3024 3488  1440 1443 1448 1493 -hsync +vsync

xrandr --newmode 2560x1440 312.25 2560 2752 3024 3488 1440 1443 1448 1493 -hsync +vsync

  • 新建分辨率模式
  • 2560x1440是自己取的分辨率名字
  • 后面那一堆数字复制粘贴前面的结果

xrandr --addmode <displayName> 2560x1440

  • 添加分辨率模式到显示器
  • <displayName>xrandr打印出来的结果里看
  • 2560x1440是分辨率的名字

xrandr -s 2560x1440 or

xrandr --output <displayName> --mode 2560x1440

  • 切换显示分辨率

用这种方法修改的分辨率重启后就会失效, 将上面三个命令添加到/etc/profile文件尾部, 就可以了.

有用或者无用的小技巧

echo <something> 打印"something"

重定向输入输出流:

> <file> 把输出(原本应该打印在屏幕上的内容)写进文件

< <file> 从文件读取内容作为输入

>> 效果同上, 不过是append追加内容而不是每次写新的

| 管道操作: 把左边的输出作为右边的输入. 你就想象左边的内容被输出到一个文本something中, 然后右边的操作读取了这个文本内容作为输入内容

cat 打印文件内容(?

tail 打印最底下的内容

tee <file> 把从管道左边接受的数据写进文件, 同时也在屏幕上输出(?)

find

xdg-open 打开文件, 用合适的程序

English Names

/ (forward) slash

\ backslash

: colon

- dash

# pound symbol

权限&用户管理

切换到root权限

su

  • 第一次切换到root用户需要sudo passwd root重置root用户密码

切换回普通用户

  • su <userName>
  • exit

添加用户

adduser <userName>

删除用户

userdel [-r] <userName>

用户重命名

usermod -l <newNname> <oldName>
mv /home/<oldName> /home/<newName>
usermod -d /home/<newName> <newName>

用户名重命名之后, 注意检查~/.local/目录下, 很多旧文件还是保存着旧用户名作为路径的, 使用sed -i改一改就好

挂载设备

查看可用设备: # fdisk -l

挂载设备: # mount /dev/sdX1 /mnt

  • X1以你实际见到的为准. X表示设备的序号, 一般为a, b, c, … ; 1表示分区. 如果没有数字说明没有分区
  • 是将该移动设备中的所有文件挂载在/mnt目录下, 而不是将该设备挂载在该目录下. 所以最好先在/mnt目录下创建一个子目录

如果挂载时出现如下报错:

mount: /mnt: wrong fs type, bad option, bad superblock on /dev/sdX1, missing codepage or helper program, or other error.

是因为挂载的文件系统格式不对(Linux默认不支持NTFS文件系统), 需要格式化:

mkfs -t exfat /dev/sdX1或者mkfs.exfat /dev/sdX1

exFAT文件系统可以兼容Windows和Linux

检查挂载情况: df -h

  • df (disk free)命令用于显示目前在Linux系统上的文件系统磁盘使用情况统计

取消挂载: # umount /mnt

  • 注意执行这一句的时候不能位于待取消挂载的路径上, 否则会报错target is busy

网络

ssh

注意, 如果远程服务器有更新, 本地储存的ssh信息便失效了, 此时会有报错:

ECDSA host key for <IPaddress> has changed and you have requested strict checking

解决方法: 本地运行ssh-keygen -R <IPaddress>

如果需要使用图形界面, 需要ssh -Y (Linux ssh Linux, usually wsl ssh RaspberryPi)

如果是Windows比较麻烦, 需要Xming

ping

  • 检查网络是否畅通
  • 例: ping sofie.pku.edu.cn
  • 这个命令在Windows Powershell上也可运行

dig

host

  • 查看IP地址

realpath

  • 给出一个文件的绝对路径

scp

  • 从服务器下载文件到本地
  • scp [-r] <username>@<IPadress>:<srcdir> <dstdir>
  • 例: scp [email protected]:/workdir/lsm_course/wcr/testReg/run.def D:\Desktop\run.def
  • 注意该命令是在电脑终端运行的, 不是在wsl上运行的(?)
  • 如果需要上传文件, 把后面两个参数对调即可
  • 如果需要下载整个文件夹, 加上-r
  • 地址如果使用ipv6的话, 要把地址用方括号[]括起来避免解析错误

文本编辑

vi/vim

  • i进入编辑模式, 按ESC退出
  • :wq, 写入并退出
  • !, 强制操作

bash

双引号括起来的为转义字符串, 单引号括起来的会原原本本输出

$varname, 用来表示那个变量

$1 表示第一个变量(类似argv[])

source, 使文件变得可执行(?

$? error code. 一般来说如果是0说明程序运行正常

$_ 上一个命令中最后一个变量. 或者按住Esc再按.

(注意如果要在命命令行里查看记得用echo)

!! 上一条命令的全部内容

​ 经常用来sudo !!

grep 用来查正则表达式

grep <content> <file>

true error code永远是0, false error code 永远是1

||, 第一个执行错误(error code不为零), 第二个才会执行

&&, 第一个执行正确(error code 为0), 第二个才会执行

;, 第一个无论执行结果如何, 第二个都会执行

foo=$(pwd), 把输出结果赋值给变量

或者类似地: echo "We are in $(pwd)"

$# 命令的数量

$$ process ID

$@ 所有变量

for <something> in "$@"; do
	<do something>
done

/dev/null, 如果把输出重定向到这里就等于把输出丢弃

> 重定向输出; 2> 重定向标准错误输出

注释用#

{}, 用来展开(expand)

{1,2,3, 枚举; {a..j}, 范围

touch 如果文件不存在, 会创建一个文件


Install GDAL on Ubuntu