title : Linux 101
author: zvevqx
published: 2025-11-22
cat: linux
desc: ws
...
learn more about `ssh` -> [https://www.ssh.com/ssh/](https://www.ssh.com/ssh/)
- **linux** :
start terminal ctrl + alt + t
~~~ bash
ssh -p portnumber pi@ipaddress
ssh user @ distant_server.address : connection_port (default to 22 )
ssh pi@192.168.1.24
~~~
>⚠️ linux user :
> to copy inside the `terminal` : ctrl + shift + c
> to paste inside the `terminal` : ctrl + shift + v
- **Osx** :
start terminal ( 🍎 + space and search for `terminal`)
~~~bash
ssh -p 55 pi@er401.duckdns.org
~~~
- **Windows** :
- install ```putty```
- got to [putty download page](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html)
- `putty` will give ~~windows~~ `ssh` ability ...
- connect to:
- server: ```ipadresse```
- port ```22```
- user `pi`
---
---
## create your new `home`
### first
1. *create a User*
```
sudo useradd
```
2. *add user to groups and privilege*
- add user to ```admin``` list
```bash
sudo usermod -a -G sudo yourUserName
```
- change shell to ```zsh``` ( optional )
```bash
chsh -s /bin/zsh
```
- exit user ```pi```
```bash
exit
```
3. *reconnect with your `username` and `password`*
```bash
ssh YOUR_USER_NAME@ADRESSEIP
```
4. welcome to your new `home`
1. your *home folder* is in `/home/yourUserName`
1. hint : you can check where you are with the command `pwd` (**P**rint **W**orking **D**irectory)
2. learm about linus folder structure -> [learn more](https://linuxhandbook.com/linux-directory-structure/)
---
# DO SOME STUFF
## general `cli` commands
### navigate
- `.` the current directory ( folder)
- `..` the parent directory
- `man` : view the **man**ual of a command ( ex : ` man ls` )
- `pwd ` : Use the **pwd** command to find out the path of the current working directory (folder) you’re in
- `cd` : **c**hange **d**irectory to go inside a new directory
- `ls` : **l**i**s**t the current directory content
- `cp` : to **c**o**p**y documents / folders
- `mv`: to **m**o**v**e documents / folder
- `mkdir`: **m**a**k**e **dir**ectory create a folder
- `touch`: create an empty file
- `rm` : **r**e**m**ove folder and files ***⚠️*** no return possible / read and think twice before smashing enter
- `find`: to find / search for files
### system stuffs
- `sudo` : **s**uper **u**ser **do** get super privileges to do system stuff ***⚠️*** `sudo` can do **ANYTHING** , even destroy system
- `du` : **d**isk **u**sage ... to see .. disk usage ( use it with `-h` argument for human readable output )
- `top` and `htop` : to monitor system ( application / ram / cpu usage)
- `killall` : kill a process by name e:`killall firefox` will quit and kill all *firefix* process
- `uname ` : view system information ( kernel / linux version ....)
- `sudo reboot` : restart computer ( must be `sudo` to execute )
- `sudo halt` || `sudo shutdown now` : shutdown computer ( must be `sudo`)
### general help
- ctrl + r : search in history for already used commands
- ctrl + c : **kill** running command
--------
# getting started with python
==underconstruction==

just some code to try
~~~python
import time
import math
x = 0
try :
while True:
x = x+1
time.sleep(0.5)
print(" la vlaeur de x est de = {}".format(x))
if x>100:
x=0
except KeyboardInterrupt:
print('Hello user you have pressed ctrl-c button.')
~~~
## create a simple chat with python
[https://python.plainenglish.io/create-a-basic-lan-chat-room-with-python-f334776bf70c](https://python.plainenglish.io/create-a-basic-lan-chat-room-with-python-f334776bf70c)
fixed code
===client===
~~~python
import socket
import threading
my_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
PORT = 8000
ADDRESS = "localhost" # Same as "127.0.1.1"
my_socket.connect((ADDRESS, PORT))
nickname = input("Choose your nickname : ").strip()
while not nickname:
nickname = input("Your nickname should not be empty : ").strip()
def thread_sending():
while True:
message_to_send = input("your message :")
if message_to_send:
message_with_nickname = nickname + " : " + message_to_send
my_socket.send(message_with_nickname.encode())
def thread_receiving():
while True:
message = my_socket.recv(1024).decode()
print(message)
thread_send = threading.Thread(target=thread_sending)
thread_receive = threading.Thread(target=thread_receiving)
thread_send.start()
thread_receive.start()
~~~
===server===
~~~python
import socket
import threading
my_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
PORT = 8000
ADDRESS = "0.0.0.0"
broadcast_list = []
my_socket.bind((ADDRESS, PORT))
def thread_accept():
while True:
my_socket.listen()
client, client_address = my_socket.accept()
broadcast_list.append(client)
start_listenning_thread(client)
def start_listenning_thread(client):
client_thread = threading.Thread(
target = listen_thread,
args = (client,) #the list of argument for the function
)
client_thread.start()
def listen_thread(client):
while True:
message = client.recv(1024).decode()
if message:
print(f"Received message : {message}")
broadcast(message)
else:
print(f"client has been disconnected : {client}")
return
def broadcast(message):
for client in broadcast_list:
try:
client.send(message.encode())
except:
broadcast_list.remove(client)
print(f"Client removed : {client}")
thread_accept()
~~~
--------
## create folder in ```apache``` server
wft is `apache` :
> apache is a http web server [wiki page](https://en.wikipedia.org/wiki/Apache_HTTP_Server)
there other solution like [https://www.lighttpd.net/]{https://www.lighttpd.net/} or the popular [https://nginx.org/en/](https://nginx.org/en/)
`apache` is well documented and often the one you'll find on a web server service
1. create folder first with your username
```bash
sudo mkdir -p /var/www/html/$USER
```
2. change ownership to your user
```bash
sudo chown -R $USER:$USER /var/www/html/$USER
```
3. make sure permissions on ```www``` are ok
```bash
sudo chmod -R 755 /var/www
```
4. create your first webpage to serve
```bash
touch /var/www/html/$USER/index.html
```
5. put something in it
```bash
nano /var/www/html/$USER/index.html
or
vim /var/www/html/$USER/index.html
```
6. content example
~~~html
Welcome to my page
📡 Success!! 📡
~~~
## mjpeg-streamer ( video server )
```https://github.com/jacksonliam/mjpg-streamer```
[github project page](https://github.com/jacksonliam/mjpg-streamer)
***⚠️*** don't follow the instructions during this class ( installation already done )
- after install
- add your user to `video` group
~~~bash
usermod -a -G video $USER
~~~
this will give your user to access camera equipement
- logout and back in
- go have a look
- start server
~~~bash
cd ~/mjpg-streamer/mjpg-streamer-experimental && ./mjpg_streamer -o "output_http.so -w ./www" -i "input_raspicam.so"
~~~
- go check
~~~bash
#in a local network
http://IP_FOR_THE_RASPBERRY_PI:8080/?action=stream
#in that case with dyndns service ( duckdns ) and port redirection ( 666 -> 8080)
http://er401.duckdns.org:666/?action=stream
~~~